193 lines
7.2 KiB
Python
193 lines
7.2 KiB
Python
import boto3
|
|
|
|
from moto import mock_codecommit
|
|
from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
|
|
from botocore.exceptions import ClientError
|
|
import pytest
|
|
|
|
|
|
@mock_codecommit
|
|
def test_create_repository():
|
|
client = boto3.client("codecommit", region_name="eu-central-1")
|
|
metadata = client.create_repository(
|
|
repositoryName="repository_one", repositoryDescription="description repo one"
|
|
)["repositoryMetadata"]
|
|
|
|
assert metadata["creationDate"] is not None
|
|
assert metadata["lastModifiedDate"] is not None
|
|
assert metadata["repositoryId"] is not None
|
|
assert metadata["repositoryName"] == "repository_one"
|
|
assert metadata["repositoryDescription"] == "description repo one"
|
|
assert (
|
|
metadata["cloneUrlSsh"]
|
|
== "ssh://git-codecommit.eu-central-1.amazonaws.com/v1/repos/repository_one"
|
|
)
|
|
assert (
|
|
metadata["cloneUrlHttp"]
|
|
== "https://git-codecommit.eu-central-1.amazonaws.com/v1/repos/repository_one"
|
|
)
|
|
assert (
|
|
metadata["Arn"]
|
|
== f"arn:aws:codecommit:eu-central-1:{ACCOUNT_ID}:repository_one"
|
|
)
|
|
assert metadata["accountId"] == ACCOUNT_ID
|
|
|
|
|
|
@mock_codecommit
|
|
def test_create_repository_without_description():
|
|
client = boto3.client("codecommit", region_name="eu-central-1")
|
|
|
|
metadata = client.create_repository(repositoryName="repository_two")[
|
|
"repositoryMetadata"
|
|
]
|
|
|
|
assert metadata.get("repositoryName") == "repository_two"
|
|
assert metadata.get("repositoryDescription") is None
|
|
|
|
assert metadata["creationDate"] is not None
|
|
assert metadata["lastModifiedDate"] is not None
|
|
assert metadata["repositoryId"] is not None
|
|
assert (
|
|
metadata["cloneUrlSsh"]
|
|
== "ssh://git-codecommit.eu-central-1.amazonaws.com/v1/repos/repository_two"
|
|
)
|
|
assert (
|
|
metadata["cloneUrlHttp"]
|
|
== "https://git-codecommit.eu-central-1.amazonaws.com/v1/repos/repository_two"
|
|
)
|
|
assert (
|
|
metadata["Arn"]
|
|
== f"arn:aws:codecommit:eu-central-1:{ACCOUNT_ID}:repository_two"
|
|
)
|
|
assert metadata["accountId"] == ACCOUNT_ID
|
|
|
|
|
|
@mock_codecommit
|
|
def test_create_repository_repository_name_exists():
|
|
client = boto3.client("codecommit", region_name="eu-central-1")
|
|
|
|
client.create_repository(repositoryName="repository_two")
|
|
|
|
with pytest.raises(ClientError) as e:
|
|
client.create_repository(
|
|
repositoryName="repository_two",
|
|
repositoryDescription="description repo two",
|
|
)
|
|
ex = e.value
|
|
assert ex.operation_name == "CreateRepository"
|
|
assert ex.response["ResponseMetadata"]["HTTPStatusCode"] == 400
|
|
assert ex.response["Error"]["Code"] == "RepositoryNameExistsException"
|
|
assert (
|
|
ex.response["Error"]["Message"]
|
|
== "Repository named repository_two already exists"
|
|
)
|
|
|
|
|
|
@mock_codecommit
|
|
def test_create_repository_invalid_repository_name():
|
|
client = boto3.client("codecommit", region_name="eu-central-1")
|
|
|
|
with pytest.raises(ClientError) as e:
|
|
client.create_repository(repositoryName="in_123_valid_@#$_characters")
|
|
ex = e.value
|
|
assert ex.operation_name == "CreateRepository"
|
|
assert ex.response["ResponseMetadata"]["HTTPStatusCode"] == 400
|
|
assert ex.response["Error"]["Code"] == "InvalidRepositoryNameException"
|
|
assert (
|
|
ex.response["Error"]["Message"]
|
|
== "The repository name is not valid. Repository names can be any valid combination of letters, numbers, periods, underscores, and dashes between 1 and 100 characters in length. Names are case sensitive. For more information, see Limits in the AWS CodeCommit User Guide. "
|
|
)
|
|
|
|
|
|
@mock_codecommit
|
|
def test_get_repository():
|
|
client = boto3.client("codecommit", region_name="eu-central-1")
|
|
|
|
repository_name = "repository_one"
|
|
|
|
client.create_repository(
|
|
repositoryName=repository_name, repositoryDescription="description repo one"
|
|
)
|
|
|
|
metadata = client.get_repository(repositoryName=repository_name)[
|
|
"repositoryMetadata"
|
|
]
|
|
|
|
assert metadata["creationDate"] is not None
|
|
assert metadata["lastModifiedDate"] is not None
|
|
assert metadata["repositoryId"] is not None
|
|
assert metadata["repositoryName"] == repository_name
|
|
assert metadata["repositoryDescription"] == "description repo one"
|
|
assert (
|
|
metadata["cloneUrlSsh"]
|
|
== "ssh://git-codecommit.eu-central-1.amazonaws.com/v1/repos/repository_one"
|
|
)
|
|
assert (
|
|
metadata["cloneUrlHttp"]
|
|
== "https://git-codecommit.eu-central-1.amazonaws.com/v1/repos/repository_one"
|
|
)
|
|
assert (
|
|
metadata["Arn"]
|
|
== f"arn:aws:codecommit:eu-central-1:{ACCOUNT_ID}:repository_one"
|
|
)
|
|
assert metadata["accountId"] == ACCOUNT_ID
|
|
|
|
client = boto3.client("codecommit", region_name="us-east-1")
|
|
|
|
with pytest.raises(ClientError) as e:
|
|
client.get_repository(repositoryName=repository_name)
|
|
ex = e.value
|
|
assert ex.operation_name == "GetRepository"
|
|
assert ex.response["ResponseMetadata"]["HTTPStatusCode"] == 400
|
|
assert ex.response["Error"]["Code"] == "RepositoryDoesNotExistException"
|
|
assert ex.response["Error"]["Message"] == f"{repository_name} does not exist"
|
|
|
|
|
|
@mock_codecommit
|
|
def test_get_repository_invalid_repository_name():
|
|
client = boto3.client("codecommit", region_name="eu-central-1")
|
|
|
|
with pytest.raises(ClientError) as e:
|
|
client.get_repository(repositoryName="repository_one-@#@")
|
|
ex = e.value
|
|
assert ex.response["ResponseMetadata"]["HTTPStatusCode"] == 400
|
|
assert ex.response["Error"]["Code"] == "InvalidRepositoryNameException"
|
|
assert (
|
|
ex.response["Error"]["Message"]
|
|
== "The repository name is not valid. Repository names can be any valid combination of letters, numbers, periods, underscores, and dashes between 1 and 100 characters in length. Names are case sensitive. For more information, see Limits in the AWS CodeCommit User Guide. "
|
|
)
|
|
|
|
|
|
@mock_codecommit
|
|
def test_delete_repository():
|
|
client = boto3.client("codecommit", region_name="us-east-1")
|
|
|
|
response = client.create_repository(repositoryName="repository_one")
|
|
|
|
repository_id_create = response.get("repositoryMetadata").get("repositoryId")
|
|
|
|
response = client.delete_repository(repositoryName="repository_one")
|
|
|
|
assert response.get("repositoryId") is not None
|
|
assert repository_id_create == response.get("repositoryId")
|
|
|
|
response = client.delete_repository(repositoryName="unknown_repository")
|
|
|
|
assert response.get("repositoryId") is None
|
|
|
|
|
|
@mock_codecommit
|
|
def test_delete_repository_invalid_repository_name():
|
|
client = boto3.client("codecommit", region_name="us-east-1")
|
|
|
|
with pytest.raises(ClientError) as e:
|
|
client.delete_repository(repositoryName="_rep@ository_one")
|
|
ex = e.value
|
|
assert ex.operation_name == "DeleteRepository"
|
|
assert ex.response["ResponseMetadata"]["HTTPStatusCode"] == 400
|
|
assert ex.response["Error"]["Code"] == "InvalidRepositoryNameException"
|
|
assert (
|
|
ex.response["Error"]["Message"]
|
|
== "The repository name is not valid. Repository names can be any valid combination of letters, numbers, periods, underscores, and dashes between 1 and 100 characters in length. Names are case sensitive. For more information, see Limits in the AWS CodeCommit User Guide. "
|
|
)
|