From 80397d31b5331a93dee19ed54d085d695df305b5 Mon Sep 17 00:00:00 2001 From: Hironsan Date: Fri, 10 Dec 2021 09:57:23 +0900 Subject: [PATCH] Update label unique constraint --- .../api/migrations/0022_auto_20211210_0052.py | 21 +++++++++++++++++++ backend/api/models.py | 9 +++++--- backend/api/tests/test_models.py | 11 ++++++---- 3 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 backend/api/migrations/0022_auto_20211210_0052.py diff --git a/backend/api/migrations/0022_auto_20211210_0052.py b/backend/api/migrations/0022_auto_20211210_0052.py new file mode 100644 index 00000000..a8bd942d --- /dev/null +++ b/backend/api/migrations/0022_auto_20211210_0052.py @@ -0,0 +1,21 @@ +# Generated by Django 3.2.8 on 2021-12-10 00:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0021_auto_20211209_0644'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='label', + unique_together=set(), + ), + migrations.AddConstraint( + model_name='label', + constraint=models.UniqueConstraint(fields=('project', 'text', 'task_type'), name='unique_label'), + ), + ] diff --git a/backend/api/models.py b/backend/api/models.py index f3729ca2..d380d5ad 100644 --- a/backend/api/models.py +++ b/backend/api/models.py @@ -157,9 +157,12 @@ class Label(models.Model): super().clean() class Meta: - unique_together = ( - ('project', 'text'), - ) + constraints = [ + models.UniqueConstraint( + fields=['project', 'text', 'task_type'], + name='unique_label' + ) + ] ordering = ['created_at'] diff --git a/backend/api/tests/test_models.py b/backend/api/tests/test_models.py index 233248fa..013b6338 100644 --- a/backend/api/tests/test_models.py +++ b/backend/api/tests/test_models.py @@ -58,11 +58,14 @@ class TestSpeech2textProject(TestCase): class TestLabel(TestCase): - def test_text_uniqueness(self): - label = mommy.make('Label') - mommy.make('Label', text=label.text) + def test_allow_creating_same_text_different_type(self): + label = mommy.make('Label', task_type='Category') + mommy.make('Label', project=label.project, text=label.text, task_type='Span') + + def test_deny_creating_same_text_same_type(self): + label = mommy.make('Label', task_type='Category') with self.assertRaises(IntegrityError): - Label(project=label.project, text=label.text).save() + mommy.make('Label', project=label.project, text=label.text, task_type='Category') def test_keys_uniqueness(self): label = mommy.make('Label', prefix_key='ctrl', suffix_key='a')