from django.core.files.uploadedfile import SimpleUploadedFile
from django.test.client import RequestFactory
from django.urls import reverse

from fixtures.apidocs_test_case import APIDocsTestCase
from sentry.testutils.silo import region_silo_test


@region_silo_test
class ProjectReleaseFilesListDocsTest(APIDocsTestCase):
    def setUp(self):
        project = self.create_project(name="foo")
        file1 = self.create_file(
            name="blah.js",
            size=42,
            type="release.file",
            headers={"Content-Type": "application/json"},
            checksum="dc1e3f3e411979d336c3057cce64294f3420f93a",
        )
        release = self.create_release(project=project, version="1")

        self.create_release_file(
            file=file1, release_id=release.id, name="http://example.com/blah.js"
        )

        self.url = reverse(
            "sentry-api-0-project-release-files",
            kwargs={
                "project_slug": project.slug,
                "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)