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)
