Skip to content

Commit

Permalink
feat(team): added missing constraint on TeamStatusReason
Browse files Browse the repository at this point in the history
  • Loading branch information
iarp committed Mar 13, 2022
1 parent 5f55c1b commit eda9ebf
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 4.0.3 on 2022-03-13 17:38

from django.db import migrations, models
import django.db.models.expressions
import django.db.models.functions.text


class Migration(migrations.Migration):

dependencies = [
('team', '0001_initial'),
]

operations = [
migrations.AddConstraint(
model_name='teamstatusreason',
constraint=models.UniqueConstraint(django.db.models.functions.text.Lower('name'), django.db.models.expressions.F('status'), name='teamstatusreason_name_status_uniqueness'),
),
]
5 changes: 4 additions & 1 deletion team/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,10 @@ class Meta:
constraints = [
models.constraints.UniqueConstraint(
"status", "default", name="teamstatusreason_status_default_uniqueness"
)
),
models.constraints.UniqueConstraint(
Lower("name"), "status", name="teamstatusreason_name_status_uniqueness"
),
]

status = models.ForeignKey(
Expand Down
33 changes: 29 additions & 4 deletions team/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -732,14 +732,39 @@ def test_team_full_name_includes_parent_object_names(self):


class TeamStatusTests(TestCase):
def setUp(self) -> None:
self.team_status = TeamStatus.objects.create(name="test")
self.team_status2 = TeamStatus.objects.create(name="test 2")
return super().setUp()

def test_teamstatus_uniqueness(self):
TeamStatus.objects.create(name="test")
self.assertRaises(IntegrityError, TeamStatus.objects.create, name="test")

def test_teamstatus_uniqueness_case_insensitive(self):
self.assertRaises(IntegrityError, TeamStatus.objects.create, name="Test")

def test_teamstatusreason_uniqueness(self):
status = TeamStatus.objects.create(name="test")
status.reasons.create(name="test1", default=True)
self.team_status.reasons.create(name="test1", default=True)
self.team_status.reasons.create(name="test3")
self.team_status.reasons.create(name="test4")

self.team_status2.reasons.create(name="test1")

self.assertRaises(
IntegrityError, status.reasons.create, name="test2", default=True
IntegrityError, self.team_status.reasons.create, name="test2", default=True
)

def test_teamstatusreason_uniqueness_is_limited_to_specific_stats(self):
self.team_status.reasons.create(name="test1")
self.team_status2.reasons.create(name="test1")

def test_teamstatusreason_uniqueness_case_insensitive(self):
self.team_status.reasons.create(name="test1")
self.assertRaises(IntegrityError, self.team_status.reasons.create, name="test1")

def test_teamstatusreason_default_is_always_none_due_to_unique_constraint(self):
tsr = TeamStatusReason.objects.create(
name="test", default=False, status=self.team_status
)
tsr.refresh_from_db()
self.assertIsNone(tsr.default)

0 comments on commit eda9ebf

Please sign in to comment.