Files
prowler/tests/providers/aws/services/codepipeline/codepipeline_service_test.py
2025-10-27 18:55:36 -04:00

106 lines
3.7 KiB
Python

from unittest.mock import patch
import botocore
from moto import mock_aws
from prowler.providers.aws.services.codepipeline.codepipeline_service import (
CodePipeline,
Pipeline,
Source,
)
from tests.providers.aws.utils import (
AWS_ACCOUNT_NUMBER,
AWS_COMMERCIAL_PARTITION,
AWS_REGION_EU_WEST_1,
set_mocked_aws_provider,
)
pipeline_name = "test-pipeline"
pipeline_arn = f"arn:{AWS_COMMERCIAL_PARTITION}:codepipeline:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:{pipeline_name}"
source_type = "CodeStarSourceConnection"
repository_id = "prowler-cloud/prowler-private"
connection_arn = f"arn:{AWS_COMMERCIAL_PARTITION}:codestar-connections:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:connection/test"
# Mocking API calls
make_api_call = botocore.client.BaseClient._make_api_call
def mock_make_api_call(self, operation_name, kwarg):
if operation_name == "ListPipelines":
return {"pipelines": [{"name": pipeline_name}]}
elif operation_name == "GetPipeline":
return {
"pipeline": {
"name": pipeline_name,
"stages": [
{
"name": "Source",
"actions": [
{
"name": "Source",
"actionTypeId": {
"category": "Source",
"owner": "AWS",
"provider": source_type,
"version": "1",
},
"configuration": {
"ConnectionArn": connection_arn,
"FullRepositoryId": repository_id,
},
}
],
}
],
},
}
elif operation_name == "ListTagsForResource":
return {"tags": [{"key": "Environment", "value": "Test"}]}
return make_api_call(self, operation_name, kwarg)
# Mock generate_regional_clients()
def mock_generate_regional_clients(provider, service):
regional_client = provider._session.current_session.client(
service, region_name=AWS_REGION_EU_WEST_1
)
regional_client.region = AWS_REGION_EU_WEST_1
return {AWS_REGION_EU_WEST_1: regional_client}
class Test_CodePipeline_Service:
@patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
@patch(
"prowler.providers.aws.aws_provider.AwsProvider.generate_regional_clients",
new=mock_generate_regional_clients,
)
@mock_aws
def test_codepipeline_service(self):
codepipeline = CodePipeline(set_mocked_aws_provider())
assert codepipeline.session.__class__.__name__ == "Session"
assert codepipeline.service == "codepipeline"
# Test pipeline properties
assert len(codepipeline.pipelines) == 1
assert isinstance(codepipeline.pipelines, dict)
assert isinstance(codepipeline.pipelines[pipeline_arn], Pipeline)
pipeline = codepipeline.pipelines[pipeline_arn]
assert pipeline.name == pipeline_name
assert pipeline.arn == pipeline_arn
assert pipeline.region == AWS_REGION_EU_WEST_1
# Test source properties
assert isinstance(pipeline.source, Source)
assert pipeline.source.type == source_type
assert pipeline.source.repository_id == repository_id
assert pipeline.source.configuration == {
"ConnectionArn": connection_arn,
"FullRepositoryId": repository_id,
}
# Test tags
assert pipeline.tags[0]["key"] == "Environment"
assert pipeline.tags[0]["value"] == "Test"