diff --git a/backend/tests/integration/test_artifacts_api.py b/backend/tests/integration/test_artifacts_api.py index f4dc120..f9b0841 100644 --- a/backend/tests/integration/test_artifacts_api.py +++ b/backend/tests/integration/test_artifacts_api.py @@ -482,6 +482,102 @@ class TestGlobalUploads: assert isinstance(data["pagination"]["has_more"], bool) +class TestGlobalArtifacts: + """Tests for global artifacts endpoint.""" + + @pytest.mark.integration + def test_global_artifacts_returns_200(self, integration_client): + """Test global artifacts endpoint returns 200.""" + response = integration_client.get("/api/v1/artifacts") + assert response.status_code == 200 + + data = response.json() + assert "items" in data + assert "pagination" in data + + @pytest.mark.integration + def test_global_artifacts_pagination(self, integration_client): + """Test global artifacts endpoint respects pagination.""" + response = integration_client.get("/api/v1/artifacts?limit=5&page=1") + assert response.status_code == 200 + + data = response.json() + assert len(data["items"]) <= 5 + assert data["pagination"]["limit"] == 5 + + @pytest.mark.integration + def test_global_artifacts_filter_by_size(self, integration_client): + """Test filtering global artifacts by size range.""" + response = integration_client.get( + "/api/v1/artifacts?min_size=1&max_size=1000000" + ) + assert response.status_code == 200 + + data = response.json() + for item in data["items"]: + assert 1 <= item["size"] <= 1000000 + + @pytest.mark.integration + def test_global_artifacts_sort_by_size(self, integration_client): + """Test sorting global artifacts by size.""" + response = integration_client.get("/api/v1/artifacts?sort=size&order=desc") + assert response.status_code == 200 + data = response.json() + if len(data["items"]) > 1: + sizes = [item["size"] for item in data["items"]] + assert sizes == sorted(sizes, reverse=True) + + @pytest.mark.integration + def test_global_artifacts_invalid_sort_returns_400(self, integration_client): + """Test invalid sort field returns 400.""" + response = integration_client.get("/api/v1/artifacts?sort=invalid_field") + assert response.status_code == 400 + + +class TestGlobalTags: + """Tests for global tags endpoint.""" + + @pytest.mark.integration + def test_global_tags_returns_200(self, integration_client): + """Test global tags endpoint returns 200.""" + response = integration_client.get("/api/v1/tags") + assert response.status_code == 200 + + data = response.json() + assert "items" in data + assert "pagination" in data + + @pytest.mark.integration + def test_global_tags_pagination(self, integration_client): + """Test global tags endpoint respects pagination.""" + response = integration_client.get("/api/v1/tags?limit=5&page=1") + assert response.status_code == 200 + + data = response.json() + assert len(data["items"]) <= 5 + assert data["pagination"]["limit"] == 5 + + @pytest.mark.integration + def test_global_tags_has_project_context(self, integration_client): + """Test global tags response includes project/package context.""" + response = integration_client.get("/api/v1/tags?limit=1") + assert response.status_code == 200 + + data = response.json() + if len(data["items"]) > 0: + item = data["items"][0] + assert "project_name" in item + assert "package_name" in item + assert "artifact_id" in item + + @pytest.mark.integration + def test_global_tags_search_with_wildcard(self, integration_client): + """Test global tags search supports wildcards.""" + response = integration_client.get("/api/v1/tags?search=v*") + assert response.status_code == 200 + # Just verify it doesn't error; results may vary + + class TestAuditLogs: """Tests for global audit logs endpoint."""