Files
2024-02-15 17:01:50 +00:00

112 lines
4.6 KiB
Python

from django.urls import reverse
from sentry.testutils.cases import APITestCase
from sentry.testutils.silo import control_silo_test
from sentry.utils.dates import to_timestamp
@control_silo_test
class GetSentryAppStatsTest(APITestCase):
def setUp(self):
self.superuser = self.create_user(email="[email protected]", is_superuser=True)
self.user = self.create_user(email="[email protected]")
self.org = self.create_organization(owner=self.user)
self.project = self.create_project(organization=self.org)
self.published_app = self.create_sentry_app(
name="Published App", organization=self.org, published=True
)
self.unowned_published_app = self.create_sentry_app(
name="Unowned Published App", organization=self.create_organization(), published=True
)
self.unpublished_app = self.create_sentry_app(name="Unpublished App", organization=self.org)
self.unowned_unpublished_app = self.create_sentry_app(
name="Unowned Unpublished App", organization=self.create_organization()
)
self.internal_app = self.create_internal_integration(organization=self.org)
self.published_app_install = self.create_sentry_app_installation(
slug=self.published_app.slug, organization=self.create_organization()
)
self.unowned_published_app_install = self.create_sentry_app_installation(
slug=self.unowned_published_app.slug, organization=self.create_organization()
)
def test_superuser_sees_unowned_published_stats(self):
self.login_as(user=self.superuser, superuser=True)
url = reverse("sentry-api-0-sentry-app-stats", args=[self.unowned_published_app.slug])
response = self.client.get(url, format="json")
assert response.status_code == 200
assert response.data["totalInstalls"] == 1
assert response.data["totalUninstalls"] == 0
install_epoch = int(
to_timestamp(
self.unowned_published_app_install.date_added.replace(
microsecond=0, second=0, minute=0
)
)
)
assert (install_epoch, 1) in response.data["installStats"]
def test_superuser_sees_unowned_unpublished_stats(self):
self.login_as(user=self.superuser, superuser=True)
url = reverse("sentry-api-0-sentry-app-stats", args=[self.unowned_unpublished_app.slug])
response = self.client.get(url, format="json")
assert response.status_code == 200
assert response.data["totalInstalls"] == 0
assert response.data["totalUninstalls"] == 0
def test_user_sees_owned_published_stats(self):
self.login_as(self.user)
url = reverse("sentry-api-0-sentry-app-stats", args=[self.published_app.slug])
response = self.client.get(url, format="json")
assert response.status_code == 200
assert response.data["totalInstalls"] == 1
assert response.data["totalUninstalls"] == 0
install_epoch = int(
to_timestamp(
self.published_app_install.date_added.replace(microsecond=0, second=0, minute=0)
)
)
assert (install_epoch, 1) in response.data["installStats"]
def test_user_does_not_see_unowned_published_stats(self):
self.login_as(self.user)
url = reverse("sentry-api-0-sentry-app-stats", args=[self.unowned_published_app.slug])
response = self.client.get(url, format="json")
assert response.status_code == 403
assert response.data["detail"] == "You do not have permission to perform this action."
def test_user_sees_owned_unpublished_stats(self):
self.login_as(self.user)
url = reverse("sentry-api-0-sentry-app-stats", args=[self.unpublished_app.slug])
response = self.client.get(url, format="json")
assert response.status_code == 200
assert response.data["totalInstalls"] == 0
assert response.data["totalUninstalls"] == 0
def test_user_sees_internal_stats(self):
self.login_as(self.user)
url = reverse("sentry-api-0-sentry-app-stats", args=[self.internal_app.slug])
response = self.client.get(url, format="json")
assert response.status_code == 200
assert response.data["totalInstalls"] == 1
assert response.data["totalUninstalls"] == 0
def test_invalid_startend_throws_error(self):
self.login_as(self.user)
url = "%s?since=1569523068&until=1566931068" % reverse(
"sentry-api-0-sentry-app-stats", args=[self.published_app.slug]
)
response = self.client.get(url, format="json")
assert response.status_code == 400