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)