180 lines
5.5 KiB
Python
180 lines
5.5 KiB
Python
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",
|
|
)
|