atmos/tests.py
2023-01-24 17:14:05 +01:00

69 lines
3.3 KiB
Python

import unittest
from unittest.mock import MagicMock, patch
import argparse
import atmos
class DetermineActionsTests(unittest.TestCase):
def setUp(self):
self.input_args = argparse.Namespace(command="mytestcommand", e=False, m=False, n=False, project="", verbose=False)
atmos.is_git_directory = MagicMock(return_value=False)
atmos.run_cmd = MagicMock()
def test_whenCalledWithNoAdditionalArgs_shouldRunTheTerraformCommand(self):
"""Simplest case where atmos is only called with a command and no further arguments"""
atmos.determine_actions(self.input_args, [])
atmos.run_cmd.assert_called_with("terraform mytestcommand")
def test_whenCalledWithParams_theyAreAppended(self):
"""Should append all params after the command"""
atmos.determine_actions(self.input_args, ["--myparam", "myvalue"])
atmos.run_cmd.assert_called_with("terraform mytestcommand --myparam myvalue")
@patch("workspaces.get_env")
def test_whenCalledWithInitCommand_shouldAppendVarsAndCreds(self, mocked_get_env):
"""Case where var-file, -var workpace=xyz is appended"""
self.input_args.command = "init"
mocked_get_env.return_value = "mytestenv"
atmos.determine_actions(self.input_args, [])
atmos.run_cmd.assert_called_with('terraform init -var-file=vars/mytestenv.tfvars -var "workspace=mytestenv"')
@patch("workspaces.get_env")
def test_whenCalledWithPlanCommand_shouldAppendVarsAndCreds(self, mocked_get_env):
"""Case where var-file, -var workpace=xyz is appended"""
self.input_args.command = "plan"
mocked_get_env.return_value = "mytestenv"
atmos.determine_actions(self.input_args, [])
atmos.run_cmd.assert_called_with('terraform plan -var-file=vars/mytestenv.tfvars -var "workspace=mytestenv"')
@patch("workspaces.get_env")
def test_whenCalledWithApplyCommand_shouldAppendVarsAndCreds(self, mocked_get_env):
"""Case where var-file, -var workpace=xyz is appended"""
self.input_args.command = "apply"
mocked_get_env.return_value = "mytestenv"
atmos.determine_actions(self.input_args, [])
atmos.run_cmd.assert_called_with('terraform apply -var-file=vars/mytestenv.tfvars -var "workspace=mytestenv"')
@patch("workspaces.get_env")
def test_whenCalledWithDestroyCommand_shouldAppendVarsAndCreds(self, mocked_get_env):
"""Case where var-file, -var workpace=xyz is appended"""
self.input_args.command = "destroy"
mocked_get_env.return_value = "mytestenv"
atmos.determine_actions(self.input_args, [])
atmos.run_cmd.assert_called_with('terraform destroy -var-file=vars/mytestenv.tfvars -var "workspace=mytestenv"')
@patch("workspaces.workspace_manager")
def test_whenInAGitRepo_andManualArgIsNotGiven_andEnvironmentArgIsNotGiven_shouldCallTheWorkspaceManager(self, mocked_workspace_manager):
atmos.is_git_directory.return_value = True
atmos.determine_actions(self.input_args, [])
mocked_workspace_manager.assert_called_once()
@patch("credentials.generate")
def test_whenEnvironmentArgIsGiven_shouldGenerateCredentials(self, mocked_generate):
self.input_args.e = True
atmos.determine_actions(self.input_args, [])
mocked_generate.assert_called_once()
if __name__ == '__main__':
unittest.main()