forked from Mapan/odoo17e
98 lines
4.0 KiB
Python
98 lines
4.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
from odoo.addons.base.tests.common import HttpCaseWithUserPortal
|
|
from odoo.addons.product.tests.common import ProductCommon
|
|
from odoo.tests import tagged
|
|
|
|
from odoo import Command
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestWebsiteSaleFiscalPosition(ProductCommon, HttpCaseWithUserPortal):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls._use_currency('USD')
|
|
|
|
def test_shop_fiscal_position_products_template(self):
|
|
"""
|
|
The `website_sale.products` template is computationally intensive
|
|
and therefore uses the cache.
|
|
The goal of this test is to check that this template
|
|
is up to date with the fiscal position detected.
|
|
"""
|
|
self.env.ref('base.group_user').write({'implied_ids': [(4, self.env.ref('product.group_product_pricelist').id)]})
|
|
self.env.company.country_id = self.env.ref('base.us')
|
|
website_id = self.env.ref('website.default_website').id
|
|
belgium_id = self.env.ref('base.be').id
|
|
# Set setting to display tax included on the website
|
|
config = self.env['res.config.settings'].create({})
|
|
config.show_line_subtotals_tax_selection = "tax_included"
|
|
config.execute()
|
|
# Create a fiscal position with a mapping of taxes
|
|
tax_15_excl = self.env['account.tax'].create({
|
|
'name': '15% excl',
|
|
'type_tax_use': 'sale',
|
|
'amount_type': 'percent',
|
|
'amount': 15,
|
|
'price_include': False,
|
|
'include_base_amount': False,
|
|
})
|
|
tax_0 = self.env['account.tax'].create({
|
|
'name': '0% Test Tax',
|
|
'type_tax_use': 'sale',
|
|
'amount_type': 'percent',
|
|
'amount': 0,
|
|
})
|
|
self.env['account.fiscal.position'].create({
|
|
'name': 'fiscal_pos_belgium',
|
|
'auto_apply': True,
|
|
'country_id': belgium_id,
|
|
'tax_ids': [Command.create({
|
|
'tax_src_id': tax_15_excl.id,
|
|
'tax_dest_id': tax_0.id,
|
|
})]
|
|
})
|
|
# Create a pricelist which will be automatically detected
|
|
self.env['product.pricelist'].create([{
|
|
'name': 'EUROPE EUR',
|
|
'selectable': True,
|
|
'website_id': website_id,
|
|
'country_group_ids': [Command.link(self.env.ref('base.europe').id)],
|
|
'sequence': 1,
|
|
'currency_id': self.env.ref('base.EUR').id,
|
|
}, {
|
|
'name': 'Christmas List',
|
|
'selectable': False,
|
|
'website_id': website_id,
|
|
'country_group_ids': [Command.link(self.env.ref('base.europe').id)],
|
|
'sequence': 20,
|
|
'currency_id': self.env.ref('base.EUR').id,
|
|
}])
|
|
# Create the product to be used for analysis
|
|
self.env["product.product"].create({
|
|
'name': "Super product",
|
|
'list_price': 40.00,
|
|
'taxes_id': [tax_15_excl.id],
|
|
'website_published': True,
|
|
})
|
|
# Create a conversion rate (1 USD <=> 2 EUR)
|
|
self.env['res.currency.rate'].search([]).unlink()
|
|
self.env['res.currency.rate'].create({
|
|
'company_id': self.env.company.id,
|
|
'currency_id': self.env.ref('base.EUR').id,
|
|
'company_rate': 2,
|
|
'name': '2023-01-01',
|
|
})
|
|
|
|
self.partner_portal.country_id = belgium_id
|
|
|
|
# [1] By going to the shop page with the portal user,
|
|
# a t-cache key `pricelist,products` + `fiscal_position_id` is generated
|
|
self.start_tour("/shop", 'website_sale_fiscal_position_portal_tour', login="portal")
|
|
# [2] If we return to the page with a public user
|
|
# and take the portal user's pricelist,
|
|
# the prices must not be those previously calculated for the portal user.
|
|
# Because the fiscal position differs from that of the public user.
|
|
self.start_tour("/shop", 'website_sale_fiscal_position_public_tour', login="")
|