From 88f656b55cf319040bce98cc77516450fd6c31fa 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) --- addons/cetmix_tower_yaml/tests/test_plan.py | 179 ++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 addons/cetmix_tower_yaml/tests/test_plan.py diff --git a/addons/cetmix_tower_yaml/tests/test_plan.py b/addons/cetmix_tower_yaml/tests/test_plan.py new file mode 100644 index 0000000..4d9ec43 --- /dev/null +++ b/addons/cetmix_tower_yaml/tests/test_plan.py @@ -0,0 +1,179 @@ +from odoo.tests import TransactionCase + + +class TestTowerPlan(TransactionCase): + @classmethod + def setUpClass(cls, *args, **kwargs): + super().setUpClass(*args, **kwargs) + + cls.Plan = cls.env["cx.tower.plan"] + + def test_plan_create_from_yaml(self): + """Test plan creation from YAML.""" + + plan_yaml = """cetmix_tower_model: plan +access_level: manager +reference: test_plan_from_yaml +name: 'Test Plan From Yaml' +allow_parallel_run: false +color: 0 +tag_ids: +- reference: doge_test_plan_tag + name: Doge Test Plan Tag + color: 1 +on_error_action: e +custom_exit_code: 0 +line_ids: +- sequence: 5 + condition: false + use_sudo: false + path: /such/much/{{ test_plan_dir }} + command_id: + access_level: manager + reference: very_much_command_test + name: Very much command + action: ssh_command + allow_parallel_run: false + note: false + code: Such much code + variable_ids: + - cetmix_tower_model: variable + reference: test_plan_dir + name: Test Plan Directory + action_ids: + - sequence: 1 + condition: == + value_char: '0' + action: n + custom_exit_code: 0 + variable_value_ids: + - cetmix_tower_model: variable_value + variable_id: + cetmix_tower_yaml_version: 1 + cetmix_tower_model: variable + reference: test_plan_branch + name: Test Plan Branch + value_char: production + - cetmix_tower_model: variable_value + variable_id: + cetmix_tower_yaml_version: 1 + cetmix_tower_model: variable + reference: test_plan_some_unique_variable + name: Test Plan Some Unique Variable + value_char: 'Final Value' + - cetmix_tower_model: plan_line_action + access_level: manager + sequence: 2 + condition: '>' + value_char: '0' + action: ec + custom_exit_code: 255 + variable_value_ids: false + variable_ids: false +""" + # -- 1 -- + # Create plan from YAML + plan_form_yaml = self.Plan.create( + {"name": "Name Placeholder", "yaml_code": plan_yaml} + ) + self.assertEqual( + plan_form_yaml.reference, + "test_plan_from_yaml", + "Reference is not set from YAML", + ) + # Name should be set from YAML + self.assertEqual( + plan_form_yaml.name, "Test Plan From Yaml", "Name is not set from YAML" + ) + + # -- 2 -- + # Check plan tags + plan_tags = plan_form_yaml.tag_ids + self.assertEqual(len(plan_tags), 1) + self.assertEqual(plan_tags.name, "Doge Test Plan Tag") + + # -- 3 -- + # Check plan lines + plan_lines = plan_form_yaml.line_ids + self.assertEqual(len(plan_lines), 1, "Line count is not 1") + self.assertFalse(plan_lines.condition, "Condition is not false") + self.assertEqual( + plan_lines.path, + "/such/much/{{ test_plan_dir }}", + "Path is not set from YAML", + ) + self.assertEqual( + plan_lines.command_id.reference, + "very_much_command_test", + "Command reference is not set from YAML", + ) + self.assertEqual( + plan_lines.command_id.name, + "Very much command", + "Command name is not set from YAML", + ) + self.assertEqual( + plan_lines.command_id.action, + "ssh_command", + "Command action is not set from YAML", + ) + self.assertFalse( + plan_lines.command_id.allow_parallel_run, + "Command allow parallel run is not set from YAML", + ) + self.assertFalse( + plan_lines.command_id.note, "Command note is not set from YAML" + ) + self.assertEqual( + plan_lines.command_id.variable_ids.mapped("reference"), + ["test_plan_dir"], + "Command variable ids is not set from YAML", + ) + self.assertEqual( + plan_lines.command_id.access_level, + "2", + "Command access level is not set from YAML", + ) + + # -- 4 -- + # Check plan line actions + plan_actions = plan_form_yaml.line_ids.action_ids + self.assertEqual(len(plan_actions), 2, "Action count is not 2") + self.assertEqual( + plan_actions[0].condition, "==", "First action condition is not equal" + ) + self.assertEqual( + plan_actions[0].value_char, "0", "First action value char is not 0" + ) + self.assertEqual(plan_actions[0].action, "n", "First action action is not n") + self.assertEqual( + plan_actions[0].custom_exit_code, + 0, + "First action custom exit code is not 0", + ) + self.assertEqual( + len(plan_actions[0].variable_value_ids), + 2, + "Number of variable value ids is not correct", + ) + self.assertEqual( + plan_actions[0].variable_value_ids.mapped("value_char"), + ["production", "Final Value"], + "Variable value chars are not correct", + ) + self.assertEqual( + plan_actions[1].condition, ">", "Second action condition is not greater" + ) + self.assertEqual( + plan_actions[1].value_char, "0", "Second action value char is not 0" + ) + self.assertEqual(plan_actions[1].action, "ec", "Second action action is not ec") + self.assertEqual( + plan_actions[1].custom_exit_code, + 255, + "Second action custom exit code is not 255", + ) + self.assertFalse( + plan_actions[1].variable_value_ids, + "Second action variable value ids is not false", + )