97 lines
3.5 KiB
Python
97 lines
3.5 KiB
Python
# Copyright 2022 Camptocamp SA
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
|
|
from odoo.osv.expression import AND, OR
|
|
from odoo.tests import TransactionCase
|
|
|
|
from ..inverse_expression import inverse_AND, inverse_OR
|
|
|
|
|
|
class TestInverseFunctions(TransactionCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.basic_domain_and = ["&", "&", ("a", "=", 1), ("b", "=", 2), ("c", "=", 3)]
|
|
cls.basic_domain_or = ["|", "|", ("a", "=", 1), ("b", "=", 2), ("c", "=", 3)]
|
|
cls.complex_domain_and_and_or = (
|
|
["&"] + cls.basic_domain_and + cls.basic_domain_or
|
|
)
|
|
cls.complex_domain_or_or_and = (
|
|
["|"] + cls.basic_domain_or + cls.basic_domain_and
|
|
)
|
|
cls.complex_domain_and_or_or = ["&"] + cls.basic_domain_or + cls.basic_domain_or
|
|
cls.complex_domain_or_and_and = (
|
|
["|"] + cls.basic_domain_and + cls.basic_domain_and
|
|
)
|
|
|
|
def test_neutral_basic_and(self):
|
|
result = AND(inverse_AND(self.basic_domain_and))
|
|
self.assertEqual(result, self.basic_domain_and)
|
|
|
|
def test_neutral_basic_or(self):
|
|
result = OR(inverse_OR(self.basic_domain_or))
|
|
self.assertEqual(result, self.basic_domain_or)
|
|
|
|
def test_neutral_complex_and_and_or(self):
|
|
result = AND(inverse_AND(self.complex_domain_and_and_or))
|
|
self.assertEqual(result, self.complex_domain_and_and_or)
|
|
|
|
def test_neutral_complex_or_or_and(self):
|
|
result = OR(inverse_OR(self.complex_domain_or_or_and))
|
|
self.assertEqual(result, self.complex_domain_or_or_and)
|
|
|
|
def test_neutral_complex_and_or_or(self):
|
|
result = AND(inverse_AND(self.complex_domain_and_or_or))
|
|
self.assertEqual(result, self.complex_domain_and_or_or)
|
|
|
|
def test_neutral_complex_or_and_and(self):
|
|
result = OR(inverse_OR(self.complex_domain_or_and_and))
|
|
self.assertEqual(result, self.complex_domain_or_and_and)
|
|
|
|
def test_inverse_basic_and(self):
|
|
result = [
|
|
[("a", "=", 1)],
|
|
[("b", "=", 2)],
|
|
[("c", "=", 3)],
|
|
]
|
|
self.assertEqual(inverse_AND(self.basic_domain_and), result)
|
|
|
|
def test_inverse_basic_or(self):
|
|
result = [
|
|
[("a", "=", 1)],
|
|
[("b", "=", 2)],
|
|
[("c", "=", 3)],
|
|
]
|
|
self.assertEqual(inverse_OR(self.basic_domain_or), result)
|
|
|
|
def test_inverse_complex_and_and_or(self):
|
|
result = [
|
|
[("a", "=", 1)],
|
|
[("b", "=", 2)],
|
|
[("c", "=", 3)],
|
|
["|", "|", ("a", "=", 1), ("b", "=", 2), ("c", "=", 3)],
|
|
]
|
|
self.assertEqual(inverse_AND(self.complex_domain_and_and_or), result)
|
|
|
|
def test_inverse_complex_or_or_and(self):
|
|
result = [
|
|
[("a", "=", 1)],
|
|
[("b", "=", 2)],
|
|
[("c", "=", 3)],
|
|
["&", "&", ("a", "=", 1), ("b", "=", 2), ("c", "=", 3)],
|
|
]
|
|
self.assertEqual(inverse_OR(self.complex_domain_or_or_and), result)
|
|
|
|
def test_inverse_complex_and_or_or(self):
|
|
result = [
|
|
["|", "|", ("a", "=", 1), ("b", "=", 2), ("c", "=", 3)],
|
|
["|", "|", ("a", "=", 1), ("b", "=", 2), ("c", "=", 3)],
|
|
]
|
|
self.assertEqual(inverse_AND(self.complex_domain_and_or_or), result)
|
|
|
|
def test_inverse_complex_or_and_and(self):
|
|
result = [
|
|
["&", "&", ("a", "=", 1), ("b", "=", 2), ("c", "=", 3)],
|
|
["&", "&", ("a", "=", 1), ("b", "=", 2), ("c", "=", 3)],
|
|
]
|
|
self.assertEqual(inverse_OR(self.complex_domain_or_and_and), result)
|