69 lines
3.3 KiB
Python
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()
|