import pytest from botocore.exceptions import ClientError # ========== CodeBuild ========== def test_codebuild_create_project(codebuild): resp = codebuild.create_project( name="test-project", source={"type": "NO_SOURCE", "buildspec": "version: 0.2\nphases:\n build:\n commands:\n - echo Hello"}, artifacts={"type": "NO_ARTIFACTS"}, environment={ "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", "computeType": "BUILD_GENERAL1_SMALL", }, serviceRole="arn:aws:iam::000000000000:role/codebuild-role", ) project = resp["project"] assert project["name"] == "test-project" assert project["arn"].startswith("arn:aws:codebuild:") assert "created" in project def test_codebuild_create_duplicate_project(codebuild): with pytest.raises(ClientError) as exc: codebuild.create_project( name="test-project", source={"type": "NO_SOURCE"}, artifacts={"type": "NO_ARTIFACTS"}, environment={"type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", "computeType": "BUILD_GENERAL1_SMALL"}, serviceRole="arn:aws:iam::000000000000:role/codebuild-role", ) assert "ResourceAlreadyExistsException" in str(exc.value) def test_codebuild_batch_get_projects(codebuild): resp = codebuild.batch_get_projects(names=["test-project", "nonexistent"]) assert len(resp["projects"]) == 1 assert resp["projects"][0]["name"] == "test-project" assert "nonexistent" in resp["projectsNotFound"] def test_codebuild_batch_get_projects_by_arn(codebuild): arn = codebuild.batch_get_projects(names=["test-project"])["projects"][0]["arn"] resp = codebuild.batch_get_projects(names=[arn]) assert len(resp["projects"]) == 1 assert resp["projects"][0]["name"] == "test-project" assert resp["projectsNotFound"] == [] def test_codebuild_list_projects(codebuild): resp = codebuild.list_projects() assert "test-project" in resp["projects"] def test_codebuild_update_project(codebuild): resp = codebuild.update_project( name="test-project", description="updated description", ) assert resp["project"]["description"] == "updated description" def test_codebuild_start_build(codebuild): resp = codebuild.start_build(projectName="test-project") build = resp["build"] assert build["projectName"] == "test-project" assert build["buildStatus"] == "SUCCEEDED" assert build["arn"].startswith("arn:aws:codebuild:") assert "phases" in build def test_codebuild_batch_get_builds(codebuild): start_resp = codebuild.start_build(projectName="test-project") build_id = start_resp["build"]["id"] resp = codebuild.batch_get_builds(ids=[build_id, "nonexistent:fake"]) assert len(resp["builds"]) == 1 assert resp["builds"][0]["id"] == build_id assert "nonexistent:fake" in resp["buildsNotFound"] def test_codebuild_list_builds_for_project(codebuild): resp = codebuild.list_builds_for_project(projectName="test-project") assert len(resp["ids"]) >= 1 def test_codebuild_list_builds(codebuild): resp = codebuild.list_builds() assert len(resp["ids"]) >= 1 def test_codebuild_stop_build(codebuild): start_resp = codebuild.start_build(projectName="test-project") build_id = start_resp["build"]["id"] resp = codebuild.stop_build(id=build_id) assert resp["build"]["buildStatus"] == "STOPPED" def test_codebuild_batch_delete_builds(codebuild): start_resp = codebuild.start_build(projectName="test-project") build_id = start_resp["build"]["id"] resp = codebuild.batch_delete_builds(ids=[build_id]) assert build_id in resp["buildsDeleted"] def test_codebuild_delete_project(codebuild): codebuild.delete_project(name="test-project") resp = codebuild.list_projects() assert "test-project" not in resp["projects"] def test_codebuild_delete_nonexistent_project(codebuild): with pytest.raises(ClientError) as exc: codebuild.delete_project(name="nonexistent") assert "ResourceNotFoundException" in str(exc.value)