321 lines
11 KiB
Python
321 lines
11 KiB
Python
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)
|