Browse Source

ref(apidocs-testing): Releases Endpoint Testing (#21035)

* ref(apidocs-testing): Releases Endpoint Testing
MeredithAnya 4 years ago
parent
commit
9be526a62a

+ 2 - 1
api-docs/components/schemas/releases/commit.json

@@ -11,7 +11,8 @@
         "type": "string"
         "type": "string"
       },
       },
       "message": {
       "message": {
-        "type": "string"
+        "type": "string",
+        "nullable": true
       }
       }
     }
     }
   }
   }

+ 28 - 2
api-docs/components/schemas/releases/organization-release.json

@@ -57,8 +57,34 @@
         "nullable": true
         "nullable": true
       },
       },
       "lastDeploy": {
       "lastDeploy": {
-        "$ref": "deploy.json#/Deploy",
-        "nullable": true
+        "type": "object",
+        "nullable": true,
+        "required": ["environment", "name", "dateStarted", "dateFinished", "url", "id"],
+        "properties": {
+          "environment": {
+            "type": "string"
+          },
+          "name": {
+            "type": "string",
+            "nullable": true
+          },
+          "dateStarted": {
+            "type": "string",
+            "format": "date-time",
+            "nullable": true
+          },
+          "dateFinished": {
+            "type": "string",
+            "format": "date-time"
+          },
+          "url": {
+            "type": "string",
+            "nullable": true
+          },
+          "id": {
+            "type": "string"
+          }
+        }
       },
       },
       "lastEvent": {
       "lastEvent": {
         "type": "string",
         "type": "string",

+ 1 - 1
api-docs/paths/releases/project-release-file.json

@@ -140,7 +140,7 @@
       }
       }
     },
     },
     "responses": {
     "responses": {
-      "201": {
+      "200": {
         "description": "Success",
         "description": "Success",
         "content": {
         "content": {
           "application/json": {
           "application/json": {

+ 1 - 1
api-docs/paths/releases/release-file.json

@@ -122,7 +122,7 @@
       }
       }
     },
     },
     "responses": {
     "responses": {
-      "201": {
+      "200": {
         "description": "Success",
         "description": "Success",
         "content": {
         "content": {
           "application/json": {
           "application/json": {

+ 2 - 3
tests/apidocs/endpoints/test_deploy.py → tests/apidocs/endpoints/releases/test_deploys.py

@@ -7,15 +7,14 @@ import datetime
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 from django.test.client import RequestFactory
 from django.test.client import RequestFactory
 
 
-from sentry.models import Deploy, Environment, Release
+from sentry.models import Deploy, Environment
 from tests.apidocs.util import APIDocsTestCase
 from tests.apidocs.util import APIDocsTestCase
 
 
 
 
 class ReleaseDeploysDocs(APIDocsTestCase):
 class ReleaseDeploysDocs(APIDocsTestCase):
     def setUp(self):
     def setUp(self):
         project = self.create_project(name="foo")
         project = self.create_project(name="foo")
-        release = Release.objects.create(organization_id=project.organization_id, version="1")
-        release.add_project(project)
+        release = self.create_release(project=project, version="1")
         Deploy.objects.create(
         Deploy.objects.create(
             environment_id=Environment.objects.create(
             environment_id=Environment.objects.create(
                 organization_id=project.organization_id, name="production"
                 organization_id=project.organization_id, name="production"

+ 48 - 0
tests/apidocs/endpoints/releases/test_organization_release_commit_files.py

@@ -0,0 +1,48 @@
+from __future__ import absolute_import
+
+from django.core.urlresolvers import reverse
+from django.test.client import RequestFactory
+
+from sentry.models import Commit, CommitFileChange, ReleaseCommit
+from tests.apidocs.util import APIDocsTestCase
+
+
+class CommitFileChangeDocsTest(APIDocsTestCase):
+    def setUp(self):
+        project = self.create_project(name="foo")
+        release = self.create_release(project=project, version="1")
+        release.add_project(project)
+        repo = self.create_repo(project=project, name=project.name)
+        commit = Commit.objects.create(
+            organization_id=project.organization_id, repository_id=repo.id, key="a" * 40
+        )
+        commit2 = Commit.objects.create(
+            organization_id=project.organization_id, repository_id=repo.id, key="b" * 40
+        )
+        ReleaseCommit.objects.create(
+            organization_id=project.organization_id, release=release, commit=commit, order=1
+        )
+        ReleaseCommit.objects.create(
+            organization_id=project.organization_id, release=release, commit=commit2, order=0
+        )
+        CommitFileChange.objects.create(
+            organization_id=project.organization_id, commit=commit, filename=".gitignore", type="M"
+        )
+        CommitFileChange.objects.create(
+            organization_id=project.organization_id,
+            commit=commit2,
+            filename="/static/js/widget.js",
+            type="A",
+        )
+        self.url = reverse(
+            "sentry-api-0-release-commitfilechange",
+            kwargs={"organization_slug": project.organization.slug, "version": release.version},
+        )
+
+        self.login_as(user=self.user)
+
+    def test_get(self):
+        response = self.client.get(self.url)
+        request = RequestFactory().get(self.url)
+
+        self.validate_schema(request, response)

+ 39 - 0
tests/apidocs/endpoints/releases/test_organization_release_commits.py

@@ -0,0 +1,39 @@
+from __future__ import absolute_import
+
+from django.core.urlresolvers import reverse
+from django.test.client import RequestFactory
+
+from sentry.models import Commit, ReleaseCommit
+from tests.apidocs.util import APIDocsTestCase
+
+
+class ReleaseCommitsListDocsTest(APIDocsTestCase):
+    def setUp(self):
+        project = self.create_project(name="foo")
+        release = self.create_release(project=project, version="1")
+        release.add_project(project)
+        repo = self.create_repo(project=project, name=project.name)
+        commit = Commit.objects.create(
+            organization_id=project.organization_id, repository_id=repo.id, key="a" * 40
+        )
+        commit2 = Commit.objects.create(
+            organization_id=project.organization_id, repository_id=repo.id, key="b" * 40
+        )
+        ReleaseCommit.objects.create(
+            organization_id=project.organization_id, release=release, commit=commit, order=1
+        )
+        ReleaseCommit.objects.create(
+            organization_id=project.organization_id, release=release, commit=commit2, order=0
+        )
+        self.url = reverse(
+            "sentry-api-0-organization-release-commits",
+            kwargs={"organization_slug": project.organization.slug, "version": release.version},
+        )
+
+        self.login_as(user=self.user)
+
+    def test_get(self):
+        response = self.client.get(self.url)
+        request = RequestFactory().get(self.url)
+
+        self.validate_schema(request, response)

+ 49 - 0
tests/apidocs/endpoints/releases/test_organization_release_details.py

@@ -0,0 +1,49 @@
+from __future__ import absolute_import
+
+from datetime import datetime
+
+from django.core.urlresolvers import reverse
+from django.test.client import RequestFactory
+
+from tests.apidocs.util import APIDocsTestCase
+
+
+class OrganizationReleaseDetailsDocsTest(APIDocsTestCase):
+    def setUp(self):
+        user = self.create_user(is_staff=False, is_superuser=False)
+        org = self.organization
+        org2 = self.create_organization()
+        org.flags.allow_joinleave = False
+        org.save()
+
+        team1 = self.create_team(organization=org)
+        team2 = self.create_team(organization=org)
+
+        self.project1 = self.create_project(teams=[team1], organization=org)
+        self.project2 = self.create_project(teams=[team2], organization=org2)
+        self.project3 = self.create_project(teams=[team1], organization=org)
+
+        self.create_member(teams=[team1], user=user, organization=org)
+
+        self.login_as(user=user)
+        release = self.create_release(
+            project=self.project1, version="1", date_added=datetime(2013, 8, 13, 3, 8, 24, 880386)
+        )
+
+        self.url = reverse(
+            "sentry-api-0-organization-release-details",
+            kwargs={"organization_slug": org.slug, "version": release.version},
+        )
+
+    def test_get(self):
+        response = self.client.get(self.url)
+        request = RequestFactory().get(self.url)
+
+        self.validate_schema(request, response)
+
+    def test_put(self):
+        data = {"projects": [self.project3.slug]}
+        response = self.client.put(self.url, data)
+        request = RequestFactory().put(self.url, data)
+
+        self.validate_schema(request, response)

+ 46 - 0
tests/apidocs/endpoints/releases/test_organization_release_file_details.py

@@ -0,0 +1,46 @@
+from __future__ import absolute_import
+
+from django.core.urlresolvers import reverse
+from django.test.client import RequestFactory
+
+from tests.apidocs.util import APIDocsTestCase
+
+
+class ReleaseFileDetailsDocsTest(APIDocsTestCase):
+    def setUp(self):
+        self.login_as(user=self.user)
+
+        project = self.create_project(name="foo")
+        release = self.create_release(project=project, version="1")
+        file1 = self.create_file(
+            name="blah.js",
+            size=42,
+            type="release.file",
+            headers={"Content-Type": "application/json"},
+            checksum="dc1e3f3e411979d336c3057cce64294f3420f93a",
+        )
+        releasefile = self.create_release_file(
+            file=file1, release=release, name="http://example.com/blah.js"
+        )
+
+        self.url = reverse(
+            "sentry-api-0-organization-release-file-details",
+            kwargs={
+                "organization_slug": project.organization.slug,
+                "version": release.version,
+                "file_id": releasefile.id,
+            },
+        )
+
+    def test_get(self):
+        response = self.client.get(self.url)
+        request = RequestFactory().get(self.url)
+
+        self.validate_schema(request, response)
+
+    def test_put(self):
+        data = {"name": "newfilename.js"}
+        response = self.client.put(self.url, data)
+        request = RequestFactory().put(self.url, data)
+
+        self.validate_schema(request, response)

+ 47 - 0
tests/apidocs/endpoints/releases/test_organization_release_files.py

@@ -0,0 +1,47 @@
+from __future__ import absolute_import
+
+from django.core.files.uploadedfile import SimpleUploadedFile
+from django.core.urlresolvers import reverse
+from django.test.client import RequestFactory
+
+from tests.apidocs.util import APIDocsTestCase
+
+
+class ReleaseFilesListDocsTest(APIDocsTestCase):
+    def setUp(self):
+        project = self.create_project(name="foo")
+        release = self.create_release(project=self.project, version="1")
+        file1 = self.create_file(
+            name="blah.js",
+            size=42,
+            type="release.file",
+            headers={"Content-Type": "application/json"},
+            checksum="dc1e3f3e411979d336c3057cce64294f3420f93a",
+        )
+        self.create_release_file(file=file1, release=release, name="http://example.com/blah.js")
+
+        self.url = reverse(
+            "sentry-api-0-organization-release-files",
+            kwargs={"organization_slug": project.organization.slug, "version": release.version},
+        )
+
+        self.login_as(user=self.user)
+
+    def test_get(self):
+        response = self.client.get(self.url)
+        request = RequestFactory().get(self.url)
+
+        self.validate_schema(request, response)
+
+    def test_post(self):
+        data = {
+            "name": "http://example.com/application.js",
+            "header": "X-SourceMap: http://example.com",
+            "file": SimpleUploadedFile(
+                "application.js", b"function() { }", content_type="application/javascript"
+            ),
+        }
+        response = self.client.post(self.url, data, format="multipart",)
+        request = RequestFactory().post(self.url, data=data, content_type="multipart/form-data")
+
+        self.validate_schema(request, response)

Some files were not shown because too many files changed in this diff