From 6d90045065eb8d460263dba00a533ce006a3183c Mon Sep 17 00:00:00 2001 From: git_admin Date: Mon, 27 Apr 2026 10:44:07 +0000 Subject: [PATCH] Tower: upload cetmix_tower_yaml 16.0.2.0.3 (via marketplace) --- .../tests/test_file_template.py | 320 ++++++++++++++++++ 1 file changed, 320 insertions(+) create mode 100644 addons/cetmix_tower_yaml/tests/test_file_template.py diff --git a/addons/cetmix_tower_yaml/tests/test_file_template.py b/addons/cetmix_tower_yaml/tests/test_file_template.py new file mode 100644 index 0000000..097cb76 --- /dev/null +++ b/addons/cetmix_tower_yaml/tests/test_file_template.py @@ -0,0 +1,320 @@ +import yaml + +from odoo.tests import TransactionCase + + +class TestTowerFileTemplate(TransactionCase): + @classmethod + def setUpClass(cls, *args, **kwargs): + super().setUpClass(*args, **kwargs) + + cls.FileTemplate = cls.env["cx.tower.file.template"] + + # Expected YAML content of the test file template + cls.file_template_test_yaml = """cetmix_tower_model: file_template +reference: dockerfile_unit_test +name: Dockerfile Test +source: tower +file_type: text +server_dir: /opt +file_name: Dockerfile +keep_when_deleted: true +tag_ids: false +note: |- + Used to build Odoo addons image. + Depends on Odoo core image. +code: |- + FROM odoo:{{ odoo_test_version }} + # Install git-aggregator and tools for requirements generation + RUN pip3 install --upgrade pip && pip install manifestoo setuptools-odoo git-aggregator + # Let's go! + USER odoo +variable_ids: false +secret_ids: false +""" # noqa + + # Expected YAML content of the test file template + # without empty x2mvalues + cls.file_template_test_yaml_no_empty_values = """cetmix_tower_model: file_template +reference: dockerfile_unit_test +name: Dockerfile Test +source: tower +file_type: text +server_dir: /opt +file_name: Dockerfile +keep_when_deleted: true +note: |- + Used to build Odoo addons image. + Depends on Odoo core image. +code: |- + FROM odoo:{{ odoo_test_version }} + # Install git-aggregator and tools for requirements generation + RUN pip3 install --upgrade pip && pip install manifestoo setuptools-odoo git-aggregator + # Let's go! + USER odoo +""" # noqa + + # YAML content translated into Python dict + cls.file_template_test_yaml_dict = yaml.safe_load(cls.file_template_test_yaml) + cls.file_template_test_yaml_dict_no_empty_values = yaml.safe_load( + cls.file_template_test_yaml_no_empty_values + ) + + def test_yaml_from_file_template(self): + """Test if YAML is generated properly from a file""" + + # -- 0 -- + # Create test file + # Test file + file_template_test = self.FileTemplate.create( + { + "name": "Dockerfile Test", + "reference": "dockerfile_unit_test", + "file_name": "Dockerfile", + "server_dir": "/opt", + "source": "tower", + "keep_when_deleted": True, + "file_type": "text", + "code": """FROM odoo:{{ odoo_test_version }} +# Install git-aggregator and tools for requirements generation +RUN pip3 install --upgrade pip && pip install manifestoo setuptools-odoo git-aggregator +# Let's go! +USER odoo""", + "note": """Used to build Odoo addons image. +Depends on Odoo core image.""", + } + ) + + # -- 1 -- + # Check it YAML generated by the file matches + # YAML from the template file + + self.assertEqual( + file_template_test.yaml_code, + self.file_template_test_yaml, + "YAML generated from file doesn't match template file one", + ) + + # -- 2 -- + # Check if YAML key values match Cetmix Tower ones + + self.assertEqual( + file_template_test.source, + self.file_template_test_yaml_dict["source"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.file_name, + self.file_template_test_yaml_dict["file_name"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.code, + self.file_template_test_yaml_dict["code"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.name, + self.file_template_test_yaml_dict["name"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.note, + self.file_template_test_yaml_dict["note"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.server_dir, + self.file_template_test_yaml_dict["server_dir"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.reference, + self.file_template_test_yaml_dict["reference"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.file_type, + self.file_template_test_yaml_dict["file_type"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.keep_when_deleted, + self.file_template_test_yaml_dict["keep_when_deleted"], + "YAML value doesn't match Cetmix Tower one", + ) + + def test_yaml_from_file_template_no_empty_values(self): + """Test if YAML is generated properly from a file""" + + # -- 0 -- + # Create test file + # Test file + file_template_test = self.FileTemplate.with_context( + remove_empty_values=True + ).create( + { + "name": "Dockerfile Test", + "reference": "dockerfile_unit_test", + "file_name": "Dockerfile", + "server_dir": "/opt", + "source": "tower", + "keep_when_deleted": True, + "file_type": "text", + "code": """FROM odoo:{{ odoo_test_version }} +# Install git-aggregator and tools for requirements generation +RUN pip3 install --upgrade pip && pip install manifestoo setuptools-odoo git-aggregator +# Let's go! +USER odoo""", + "note": """Used to build Odoo addons image. +Depends on Odoo core image.""", + } + ) + + # -- 1 -- + # Check it YAML generated by the file matches + # YAML from the template file + + self.assertEqual( + file_template_test.yaml_code, + self.file_template_test_yaml_no_empty_values, + "YAML generated from file doesn't match template file one", + ) + + # -- 2 -- + # Check if YAML key values match Cetmix Tower ones + + self.assertEqual( + file_template_test.source, + self.file_template_test_yaml_dict_no_empty_values["source"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.file_name, + self.file_template_test_yaml_dict_no_empty_values["file_name"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.code, + self.file_template_test_yaml_dict_no_empty_values["code"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.name, + self.file_template_test_yaml_dict_no_empty_values["name"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.note, + self.file_template_test_yaml_dict_no_empty_values["note"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.server_dir, + self.file_template_test_yaml_dict_no_empty_values["server_dir"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.reference, + self.file_template_test_yaml_dict_no_empty_values["reference"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.file_type, + self.file_template_test_yaml_dict_no_empty_values["file_type"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template_test.keep_when_deleted, + self.file_template_test_yaml_dict_no_empty_values["keep_when_deleted"], + "YAML value doesn't match Cetmix Tower one", + ) + + def test_file_template_from_yaml(self): + """Test if YAML is generated properly from a file""" + + def test_yaml(file_template): + """Checks if yaml values are inserted correctly + + Args: + file_template (cx.tower.file.template): File template + """ + self.assertEqual( + file_template.source, + self.file_template_test_yaml_dict["source"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template.file_name, + self.file_template_test_yaml_dict["file_name"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template.code, + self.file_template_test_yaml_dict["code"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template.name, + self.file_template_test_yaml_dict["name"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template.note, + self.file_template_test_yaml_dict["note"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template.server_dir, + self.file_template_test_yaml_dict["server_dir"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template.reference, + self.file_template_test_yaml_dict["reference"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template.file_type, + self.file_template_test_yaml_dict["file_type"], + "YAML value doesn't match Cetmix Tower one", + ) + self.assertEqual( + file_template.keep_when_deleted, + self.file_template_test_yaml_dict["keep_when_deleted"], + "YAML value doesn't match Cetmix Tower one", + ) + + # Create test file template + file_template_test = self.FileTemplate.create({"name": "New file template"}) + + # -- 1 -- + # Insert YAML into the file and + # check if YAML key values match Cetmix Tower ones + file_template_test.yaml_code = self.file_template_test_yaml + test_yaml(file_template_test) + + # -- 2 -- + # Insert some non supported keys and ensure nothing bad happens + yaml_with_non_supported_keys = """cetmix_tower_model: file_template +code: |- + FROM odoo:{{ odoo_test_version }} + # Install git-aggregator and tools for requirements generation + RUN pip3 install --upgrade pip && pip install manifestoo setuptools-odoo git-aggregator + # Let's go! + USER odoo +doge: SoMuch style! +file_name: Dockerfile +file_type: text +keep_when_deleted: true +name: Dockerfile Test +note: |- + Used to build Odoo addons image. + Depends on Odoo core image. +reference: dockerfile_unit_test +server_dir: /opt +source: tower +tag_ids: false +""" # noqa + file_template_test.yaml_code = yaml_with_non_supported_keys + test_yaml(file_template_test)