import boto3 import sure # noqa from moto import mock_codecommit from moto.iam.models import ACCOUNT_ID from botocore.exceptions import ClientError from nose.tools import assert_raises @mock_codecommit def test_create_repository(): client = boto3.client("codecommit", region_name="eu-central-1") response = client.create_repository( repositoryName='repository_one', repositoryDescription='description repo one' ) response.should_not.be.none response["repositoryMetadata"].should_not.be.none response["repositoryMetadata"]["creationDate"].should_not.be.none response["repositoryMetadata"]["lastModifiedDate"].should_not.be.none response["repositoryMetadata"]["repositoryId"].should_not.be.empty response["repositoryMetadata"]["repositoryName"].should.equal("repository_one") response["repositoryMetadata"]["repositoryDescription"].should.equal('description repo one') response["repositoryMetadata"]["cloneUrlSsh"].should.equal("ssh://git-codecommit.{0}.amazonaws.com/v1/repos/{1}". format("eu-central-1", 'repository_one')) response["repositoryMetadata"]["cloneUrlHttp"].should.equal("https://git-codecommit.{0}.amazonaws.com/v1/repos/{1}". format("eu-central-1", 'repository_one')) response["repositoryMetadata"]["Arn"].should.equal("arn:aws:codecommit:{0}:{1}:{2}".format( "eu-central-1", ACCOUNT_ID, 'repository_one' )) response["repositoryMetadata"]["accountId"].should.equal(ACCOUNT_ID) response = client.create_repository( repositoryName='repository_two' ) response.should_not.be.none response.get("repositoryMetadata").should_not.be.none response.get("repositoryMetadata").get("repositoryName").should.equal("repository_two") response.get("repositoryMetadata").get("repositoryDescription").should.be.none with assert_raises(ClientError) as e: client.create_repository( repositoryName='repository_two' ) ex = e.exception ex.operation_name.should.equal("CreateRepository") ex.response["ResponseMetadata"]["HTTPStatusCode"].should.equal(400) ex.response["Error"]["Code"].should.contain("RepositoryNameExistsException") ex.response["Error"]["Message"].should.equal("Repository named {0} already exists".format("repository_two")) @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' ) response = client.get_repository( repositoryName=repository_name ) response.should_not.be.none response.get("repositoryMetadata").should_not.be.none response.get("repositoryMetadata").get("creationDate").should_not.be.none response.get("repositoryMetadata").get("lastModifiedDate").should_not.be.none response.get("repositoryMetadata").get("repositoryId").should_not.be.empty response.get("repositoryMetadata").get("repositoryName").should.equal(repository_name) response.get("repositoryMetadata").get("repositoryDescription").should.equal('description repo one') response.get("repositoryMetadata").get("cloneUrlSsh") \ .should.equal("ssh://git-codecommit.{0}.amazonaws.com/v1/repos/{1}".format("eu-central-1", 'repository_one')) response.get("repositoryMetadata").get("cloneUrlHttp") \ .should.equal("https://git-codecommit.{0}.amazonaws.com/v1/repos/{1}".format("eu-central-1", 'repository_one')) response.get("repositoryMetadata").get("Arn") \ .should.equal("arn:aws:codecommit:{0}:{1}:{2}".format("eu-central-1", ACCOUNT_ID, 'repository_one' )) response.get("repositoryMetadata").get("accountId").should.equal(ACCOUNT_ID) client = boto3.client("codecommit", region_name="us-east-1") with assert_raises(ClientError) as e: client.get_repository( repositoryName=repository_name ) ex = e.exception ex.operation_name.should.equal("GetRepository") ex.response["ResponseMetadata"]["HTTPStatusCode"].should.equal(400) ex.response["Error"]["Code"].should.contain("RepositoryDoesNotExistException") ex.response["Error"]["Message"].should.equal("{0} does not exist".format(repository_name)) @mock_codecommit def test_invalid_repository_name(): client = boto3.client("codecommit", region_name="eu-central-1") with assert_raises(ClientError) as e: client.create_repository( repositoryName='repository_one-@#@' ) ex = e.exception ex.response["ResponseMetadata"]["HTTPStatusCode"].should.equal(400) ex.response["Error"]["Code"].should.contain("InvalidRepositoryNameException") ex.response["Error"]["Message"].should.equal("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. ") with assert_raises(ClientError) as e: client.create_repository( repositoryName='!_repository_one' ) with assert_raises(ClientError) as e: client.create_repository( repositoryName='_rep@ository_one' ) with assert_raises(ClientError) as e: client.get_repository( repositoryName='_rep@ository_one' ) @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' ) response.get('repositoryId').should_not.be.none repository_id_create.should.equal(response.get("repositoryId")) response = client.delete_repository( repositoryName='unknown_repository' ) response.get('repositoryId').should.be.none @mock_codecommit def test_delete_repository_invalid_repository_name(): client = boto3.client("codecommit", region_name="us-east-1") with assert_raises(ClientError) as e: client.delete_repository( repositoryName='_rep@ository_one' ) ex = e.exception ex.operation_name.should.equal("DeleteRepository") ex.response["ResponseMetadata"]["HTTPStatusCode"].should.equal(400) ex.response["Error"]["Code"].should.contain("InvalidRepositoryNameException") ex.response["Error"]["Message"].should.equal("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. ")