summaryrefslogtreecommitdiff
path: root/addons/base_vat/tests
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/base_vat/tests
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/base_vat/tests')
-rw-r--r--addons/base_vat/tests/__init__.py2
-rw-r--r--addons/base_vat/tests/test_validate_ruc.py92
2 files changed, 94 insertions, 0 deletions
diff --git a/addons/base_vat/tests/__init__.py b/addons/base_vat/tests/__init__.py
new file mode 100644
index 00000000..89c4b041
--- /dev/null
+++ b/addons/base_vat/tests/__init__.py
@@ -0,0 +1,2 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import test_validate_ruc
diff --git a/addons/base_vat/tests/test_validate_ruc.py b/addons/base_vat/tests/test_validate_ruc.py
new file mode 100644
index 00000000..55845fdd
--- /dev/null
+++ b/addons/base_vat/tests/test_validate_ruc.py
@@ -0,0 +1,92 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from odoo.tests.common import SavepointCase, tagged
+from odoo.exceptions import ValidationError
+from unittest.mock import patch
+
+import stdnum.eu.vat
+
+
+class TestStructure(SavepointCase):
+ @classmethod
+ def setUpClass(cls):
+ def check_vies(vat_number):
+ return {'valid': vat_number == 'BE0477472701'}
+
+ super().setUpClass()
+ cls.env.user.company_id.vat_check_vies = False
+ cls._vies_check_func = check_vies
+
+ def test_peru_ruc_format(self):
+ """Only values that has the length of 11 will be checked as RUC, that's what we are proving. The second part
+ will check for a valid ruc and there will be no problem at all.
+ """
+ partner = self.env['res.partner'].create({'name': "Dummy partner", 'country_id': self.env.ref('base.pe').id})
+
+ with self.assertRaises(ValidationError):
+ partner.vat = '11111111111'
+ partner.vat = '20507822470'
+
+ def test_vat_country_difference(self):
+ """Test the validation when country code is different from vat code"""
+ partner = self.env['res.partner'].create({
+ 'name': "Test",
+ 'country_id': self.env.ref('base.mx').id,
+ 'vat': 'RORO790707I47',
+ })
+ self.assertEqual(partner.vat, 'RORO790707I47', "Partner VAT should not be altered")
+
+ def test_parent_validation(self):
+ """Test the validation with company and contact"""
+
+ # set an invalid vat number
+ self.env.user.company_id.vat_check_vies = False
+ company = self.env["res.partner"].create({
+ "name": "World Company",
+ "country_id": self.env.ref("base.be").id,
+ "vat": "ATU12345675",
+ "company_type": "company",
+ })
+ contact = self.env["res.partner"].create({
+ "name": "Sylvestre",
+ "parent_id": company.id,
+ "company_type": "person",
+ })
+
+ # reactivate it and correct the vat number
+ with patch('odoo.addons.base_vat.models.res_partner.check_vies', type(self)._vies_check_func):
+ self.env.user.company_id.vat_check_vies = True
+
+ def test_vat_syntactic_validation(self):
+ """ Tests VAT validation (both successes and failures), with the different country
+ detection cases possible.
+ """
+ test_partner =self.env['res.partner'].create({'name': "John Dex"})
+
+ # VAT starting with country code: use the starting country code
+ test_partner.write({'vat': 'BE0477472701', 'country_id': self.env.ref('base.fr').id})
+ test_partner.write({'vat': 'BE0477472701', 'country_id': None})
+
+ with self.assertRaises(ValidationError):
+ test_partner.write({'vat': 'BE42', 'country_id': self.env.ref('base.fr').id})
+
+ with self.assertRaises(ValidationError):
+ test_partner.write({'vat': 'BE42', 'country_id': None})
+
+ # No country code in VAT: use the partner's country
+ test_partner.write({'vat': '0477472701', 'country_id': self.env.ref('base.be').id})
+
+ with self.assertRaises(ValidationError):
+ test_partner.write({'vat': '42', 'country_id': self.env.ref('base.be').id})
+
+ # If no country can be guessed: VAT number should always be considered valid
+ # (for technical reasons due to ORM and res.company making related fields towards res.partner for country_id and vat)
+ test_partner.write({'vat': '0477472701', 'country_id': None})
+
+
+@tagged('-standard', 'external')
+class TestStructureVIES(TestStructure):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.env.user.company_id.vat_check_vies = True
+ cls._vies_check_func = stdnum.eu.vat.check_vies