mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
108 lines
4.8 KiB
Python
108 lines
4.8 KiB
Python
from django.urls import reverse
|
|
|
|
from sentry.models.options.user_option import UserOption
|
|
from sentry.models.user import User
|
|
from sentry.models.useremail import UserEmail
|
|
from sentry.testutils.cases import APITestCase
|
|
from sentry.testutils.silo import control_silo_test
|
|
|
|
|
|
@control_silo_test
|
|
class UserEmailsTest(APITestCase):
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.user = self.create_user(email="[email protected]")
|
|
self.login_as(user=self.user)
|
|
self.url = reverse("sentry-api-0-user-emails", kwargs={"user_id": self.user.id})
|
|
|
|
def test_get_emails(self):
|
|
UserEmail.objects.create(user=self.user, email="[email protected]")
|
|
UserEmail.objects.create(user=self.user, email="[email protected]")
|
|
|
|
response = self.client.get(self.url)
|
|
assert response.status_code == 200, response.content
|
|
assert len(response.data) == 3
|
|
|
|
primary_email = [n for n in response.data if n["isPrimary"]]
|
|
assert len(primary_email) == 1
|
|
assert primary_email[0]["email"] == "[email protected]"
|
|
|
|
secondary_emails = [n for n in response.data if not n["isPrimary"]]
|
|
assert len(secondary_emails) == 2
|
|
|
|
def test_add_secondary_email(self):
|
|
# test invalid email
|
|
response = self.client.post(self.url, data={"email": "invalidemail"})
|
|
assert response.status_code == 400, response.data
|
|
assert not UserEmail.objects.filter(user=self.user, email="invalidemail").exists()
|
|
|
|
# valid secondary email
|
|
response = self.client.post(self.url, data={"email": "[email protected]"})
|
|
|
|
assert response.status_code == 201, response.data
|
|
assert UserEmail.objects.filter(user=self.user, email="[email protected]").exists()
|
|
|
|
# duplicate email allows still succeeds, but has a diff response code
|
|
response = self.client.post(self.url, data={"email": "[email protected]"})
|
|
assert response.status_code == 200, response.data
|
|
|
|
def test_cant_have_same_email_with_different_casing(self):
|
|
user = self.create_user(email="[email protected]")
|
|
self.login_as(user=user)
|
|
url = reverse("sentry-api-0-user-emails", kwargs={"user_id": user.id})
|
|
response = self.client.post(url, data={"email": "[email protected]"})
|
|
assert response.status_code == 200, response.data
|
|
|
|
def test_change_verified_secondary_to_primary(self):
|
|
UserEmail.objects.create(user=self.user, email="[email protected]", is_verified=True)
|
|
response = self.client.put(self.url, data={"email": "[email protected]"})
|
|
assert response.status_code == 200, response.data
|
|
|
|
user = User.objects.get(id=self.user.id)
|
|
assert user.email == "[email protected]"
|
|
assert user.username == "[email protected]"
|
|
|
|
def test_change_unverified_secondary_to_primary(self):
|
|
UserEmail.objects.create(user=self.user, email="[email protected]", is_verified=False)
|
|
response = self.client.put(self.url, data={"email": "[email protected]"})
|
|
assert response.status_code == 400, response.data
|
|
|
|
user = User.objects.get(id=self.user.id)
|
|
assert user.email != "[email protected]"
|
|
assert user.username != "[email protected]"
|
|
|
|
def test_remove_email(self):
|
|
UserEmail.objects.create(user=self.user, email="[email protected]")
|
|
|
|
response = self.client.delete(self.url, data={"email": "[email protected]"})
|
|
assert response.status_code == 204, response.data
|
|
assert not len(UserEmail.objects.filter(user=self.user, email="[email protected]"))
|
|
|
|
def test_remove_email_also_deletes_user_option_with_same_email(self):
|
|
mail_to_del = "[email protected]"
|
|
UserEmail.objects.create(user=self.user, email=mail_to_del)
|
|
UserOption.objects.create(
|
|
user=self.user, project_id=self.project.id, key="mail:email", value=mail_to_del
|
|
)
|
|
|
|
response = self.client.delete(self.url, data={"email": mail_to_del})
|
|
assert response.status_code == 204, response.data
|
|
assert not len(UserEmail.objects.filter(user=self.user, email=mail_to_del))
|
|
assert not len(
|
|
UserOption.objects.filter(user=self.user, key="mail:email", value=mail_to_del)
|
|
)
|
|
|
|
def test_cant_remove_primary_email(self):
|
|
response = self.client.delete(self.url, data={"email": "[email protected]"})
|
|
assert response.status_code == 400
|
|
assert len(UserEmail.objects.filter(user=self.user, email="[email protected]"))
|
|
|
|
def test_other_user_cant_change(self):
|
|
other_user = self.create_user(email="[email protected]")
|
|
self.login_as(user=other_user)
|
|
|
|
# self.url represents users url to `self.user` and we are logged in as `other_user`
|
|
response = self.client.post(self.url, data={"email": "[email protected]"})
|
|
|
|
assert response.status_code == 403
|