120 lines
4.5 KiB
Python
Executable File
120 lines
4.5 KiB
Python
Executable File
from copy import deepcopy
|
|
|
|
from odoo.tests import common, tagged
|
|
|
|
from .. import compare, upgrade_log
|
|
from ..odoo_patch.odoo_patch import OdooPatch
|
|
|
|
|
|
@tagged("post_install", "-at_install")
|
|
class TestUpgradeAnalysis(common.TransactionCase):
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.IrModuleModule = self.env["ir.module.module"]
|
|
self.website_module = self.IrModuleModule.search([("name", "=", "website")])
|
|
self.sale_module = self.IrModuleModule.search([("name", "=", "sale")])
|
|
self.upgrade_analysis = self.IrModuleModule.search(
|
|
[("name", "=", "upgrade_analysis")]
|
|
)
|
|
|
|
def test_upgrade_install_wizard(self):
|
|
InstallWizard = self.env["upgrade.install.wizard"]
|
|
wizard = InstallWizard.create({})
|
|
|
|
wizard.select_odoo_modules()
|
|
self.assertTrue(
|
|
self.website_module.id in wizard.module_ids.ids,
|
|
"Select Odoo module should select 'product' module",
|
|
)
|
|
# New patch avoids to reinstall already installed modules, so this will fail
|
|
# wizard.select_oca_modules()
|
|
# self.assertTrue(
|
|
# self.upgrade_analysis.id in wizard.module_ids.ids,
|
|
# "Select OCA module should select 'upgrade_analysis' module",
|
|
# )
|
|
|
|
wizard.select_other_modules()
|
|
self.assertFalse(
|
|
self.website_module.id in wizard.module_ids.ids,
|
|
"Select Other module should not select 'product' module",
|
|
)
|
|
|
|
wizard.unselect_modules()
|
|
self.assertEqual(
|
|
wizard.module_ids.ids, [], "Unselect module should clear the selection"
|
|
)
|
|
# For the time being, tests doens't call install_modules() function
|
|
# because installing module in a test context will execute the test
|
|
# of the installed modules, raising finally an error:
|
|
|
|
# TypeError: Many2many fields ir.actions.server.partner_ids and
|
|
# ir.actions.server.partner_ids use the same table and columns
|
|
|
|
def test_odoo_patch(self):
|
|
"""
|
|
Test the patched versions of Odoo's base functions
|
|
"""
|
|
self.assertFalse(
|
|
self.env["upgrade.record"].search(
|
|
[
|
|
("name", "=", "base.constraint_ir_module_module_name_uniq"),
|
|
("type", "=", "xmlid"),
|
|
]
|
|
)
|
|
)
|
|
with OdooPatch():
|
|
self.env["ir.model.constraint"]._reflect_model(self.IrModuleModule)
|
|
self.assertTrue(
|
|
self.env["upgrade.record"].search(
|
|
[
|
|
("name", "=", "base.constraint_ir_module_module_name_uniq"),
|
|
("type", "=", "xmlid"),
|
|
]
|
|
)
|
|
)
|
|
|
|
def test_field_comparison(self):
|
|
"""
|
|
Test we compare fields correctly
|
|
"""
|
|
registry = {}
|
|
upgrade_log.log_model(self.env["upgrade.analysis"], registry)
|
|
upgrade_log.compare_registries(self.env.cr, "upgrade_analysis", {}, registry)
|
|
old_fields = self.env["upgrade.record"].field_dump()
|
|
new_fields = deepcopy(old_fields)
|
|
|
|
def assertInFieldComparison(comparison, field, needle):
|
|
self.assertIn(
|
|
needle,
|
|
"".join(
|
|
line
|
|
for line in comparison["upgrade_analysis"]
|
|
if f"/ {field} (" in line
|
|
),
|
|
)
|
|
|
|
state_field = [
|
|
field
|
|
for field in new_fields
|
|
if field["field"] == "state" and field["model"] == "upgrade.analysis"
|
|
][0]
|
|
|
|
state_field["selection_keys"] = "['done', 'new']"
|
|
comparison = compare.compare_sets(old_fields, new_fields)
|
|
assertInFieldComparison(comparison, "state", "added: [new]")
|
|
assertInFieldComparison(comparison, "state", "removed: [draft]")
|
|
|
|
state_field["selection_keys"] = "['done', 'draft', 'new']"
|
|
comparison = compare.compare_sets(old_fields, new_fields)
|
|
assertInFieldComparison(comparison, "state", "added: [new]")
|
|
assertInFieldComparison(comparison, "state", "most likely nothing to do")
|
|
with self.assertRaises(AssertionError):
|
|
assertInFieldComparison(comparison, "state", "removed")
|
|
|
|
state_field["selection_keys"] = "function"
|
|
comparison = compare.compare_sets(old_fields, new_fields)
|
|
with self.assertRaises(AssertionError):
|
|
assertInFieldComparison(comparison, "state", "added: [new]")
|
|
with self.assertRaises(AssertionError):
|
|
assertInFieldComparison(comparison, "state", "removed")
|