"""Test groups script file.""" from unittest.mock import patch from aws_user_audit import groups_script import pytest @pytest.fixture def iam_groups_list(): """Fixture for the not updated groups list.""" return [{'Path': '/', 'GroupName': 'abacus-compute-test', 'GroupId': 'AGPAWL3VLMTH474L6RUPW', 'Arn': 'arn:aws:iam::437795906767:group/abacus-compute-test', 'CreateDate': '2021-01-21'}, {'Path': '/', 'GroupName': 'accounting', 'GroupId': 'AGPAWL3VLMTHYVKWOZMPP', 'Arn': 'arn:aws:iam::437795906767:group/accounting', 'CreateDate': '2021-01-21'}, {'Path': '/', 'GroupName': 'app-security', 'GroupId': 'AGPAWL3VLMTHSPUNWT6YB', 'Arn': 'arn:aws:iam::437795906767:group/app-security', 'CreateDate': '2021-01-21'}] class Terraform_iam_group: """Class for mocking terraform_iam_group object from github API.""" def __init__(self, name): """Initialize terraform_iam_group object.""" self.name = name @pytest.fixture def terraform_iam_groups(): """Fixture for terraform iam groups list.""" return [Terraform_iam_group('accounting')] @pytest.fixture def updated_groups_list(): """Fixture for the updated groups list.""" return [{'GroupName': 'abacus-compute-test', 'IAM Permissions': '=HYPERLINK("https://us-east-1.console.aws.amazon.com/iamv2/home#/groups/details/abacus-compute-test?section=permissions"; "IAM Group Permissions")', # noqa: E501 'Terraform Permissions': 'None'}, {'GroupName': 'accounting', 'IAM Permissions': '=HYPERLINK("https://us-east-1.console.aws.amazon.com/iamv2/home#/groups/details/accounting?section=permissions"; "IAM Group Permissions")', # noqa: E501 'Terraform Permissions': 'None'}, {'GroupName': 'app-security', 'IAM Permissions': '=HYPERLINK("https://us-east-1.console.aws.amazon.com/iamv2/home#/groups/details/app-security?section=permissions"; "IAM Group Permissions")', # noqa: E501 'Terraform Permissions': 'None'}] @pytest.fixture def final_groups_list(): """Fixture for the final groups list.""" return [{'GroupName': 'abacus-compute-test', 'IAM Permissions': '=HYPERLINK("https://us-east-1.console.aws.amazon.com/iamv2/home#/groups/details/abacus-compute-test?section=permissions"; "IAM Group Permissions")', # noqa: E501 'Terraform Permissions': 'None'}, {'GroupName': 'accounting', 'IAM Permissions': '=HYPERLINK("https://us-east-1.console.aws.amazon.com/iamv2/home#/groups/details/accounting?section=permissions"; "IAM Group Permissions")', # noqa: E501 'Terraform Permissions': '=HYPERLINK("https://github.com/theorchard/terraform-infra/tree/master/prod/iam/groups/accounting"; "Terraform Group Permissions")'}, # noqa: E501 {'GroupName': 'app-security', 'IAM Permissions': '=HYPERLINK("https://us-east-1.console.aws.amazon.com/iamv2/home#/groups/details/app-security?section=permissions"; "IAM Group Permissions")', # noqa: E501 'Terraform Permissions': 'None'}] @patch('botocore.client.BaseClient._make_api_call') def test_get_iam_groups_list(mock_client): """Test get_iam_groups_list function to make right api call.""" groups_script.get_iam_groups_list() mock_client.assert_called_once_with('ListGroups', {'MaxItems': 100}) def test_update_group_list(iam_groups_list, updated_groups_list): """Test update_group_list function to correctly update groups' data.""" groups_script.update_group_list(iam_groups_list) assert iam_groups_list == updated_groups_list def test_add_terraform_iam_groups(updated_groups_list, final_groups_list): """Test add_terraform_iam_groups function to correctly add groups to the group list.""" # noqa: E501 groups_script.add_terraform_iam_groups(['accounting'], updated_groups_list) assert updated_groups_list == final_groups_list @patch('aws_user_audit.groups_script.Github') def test_get_terraform_iam_groups(Github, terraform_iam_groups): """Test get_terraform_iam_groups function to correctly get group list from Github API.""" # noqa: E501 Github.return_value.get_repo.return_value.get_contents.return_value = terraform_iam_groups # noqa: E501 result = groups_script.get_terraform_iam_groups() print(result) Github.assert_called() assert result == ['accounting']