Skip to content

Commit

Permalink
🐛[maykinmedia/open-api-framework#39] make user emails unique
Browse files Browse the repository at this point in the history
  • Loading branch information
Coperh committed Jul 2, 2024
1 parent 3d6b803 commit ca27bda
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 0 deletions.
21 changes: 21 additions & 0 deletions src/openklant/accounts/migrations/0003_user_filled_email_unique.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 4.2.11 on 2024-07-02 14:30

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("accounts", "0002_auto_20211116_0918"),
]

operations = [
migrations.AddConstraint(
model_name="user",
constraint=models.UniqueConstraint(
condition=models.Q(("email", ""), _negated=True),
fields=("email",),
name="filled_email_unique",
),
),
]
6 changes: 6 additions & 0 deletions src/openklant/accounts/models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from django.contrib.auth.validators import UnicodeUsernameValidator
from django.db import models
from django.db.models import Q
from django.utils import timezone
from django.utils.translation import gettext_lazy as _

Expand Down Expand Up @@ -52,6 +53,11 @@ class User(AbstractBaseUser, PermissionsMixin):
class Meta:
verbose_name = _("user")
verbose_name_plural = _("users")
constraints = [
models.UniqueConstraint(
fields=["email"], condition=~Q(email=""), name="filled_email_unique"
)
]

def get_full_name(self):
"""
Expand Down
14 changes: 14 additions & 0 deletions src/openklant/accounts/tests/test_user_manager.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from django.db import IntegrityError
from django.test import TestCase

from ..models import User
Expand All @@ -20,3 +21,16 @@ def test_create_user(self):
self.assertFalse(user.is_superuser)
self.assertFalse(user.is_staff)
self.assertFalse(user.has_usable_password())

def test_create_users_with_same_email(self):
User.objects.create(username="AAA", email="[email protected]", password="aaa!")

with self.assertRaises(IntegrityError):
User.objects.create(username="BBB", email="[email protected]", password="bbb!")

def test_create_user_with_blank_emails(self):
User.objects.create(username="AAA", email="", password="aaa!")
User.objects.create(username="BBB", email="", password="bbb!")

self.assertEqual(User.objects.count(), 2)

0 comments on commit ca27bda

Please sign in to comment.