You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
4.6 KiB

5 years ago
6 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. from django.core.exceptions import ValidationError
  2. from django.db.utils import IntegrityError
  3. from django.test import TestCase, override_settings
  4. from model_mommy import mommy
  5. from ..models import Category, Label, Span, TextLabel
  6. @override_settings(STATICFILES_STORAGE='django.contrib.staticfiles.storage.StaticFilesStorage')
  7. class TestTextClassificationProject(TestCase):
  8. @classmethod
  9. def setUpTestData(cls):
  10. cls.project = mommy.make('TextClassificationProject')
  11. def test_get_annotation_class(self):
  12. klass = self.project.get_annotation_class()
  13. self.assertEqual(klass, Category)
  14. @override_settings(STATICFILES_STORAGE='django.contrib.staticfiles.storage.StaticFilesStorage')
  15. class TestSequenceLabelingProject(TestCase):
  16. @classmethod
  17. def setUpTestData(cls):
  18. cls.project = mommy.make('SequenceLabelingProject')
  19. def test_get_annotation_class(self):
  20. klass = self.project.get_annotation_class()
  21. self.assertEqual(klass, Span)
  22. @override_settings(STATICFILES_STORAGE='django.contrib.staticfiles.storage.StaticFilesStorage')
  23. class TestSeq2seqProject(TestCase):
  24. @classmethod
  25. def setUpTestData(cls):
  26. cls.project = mommy.make('Seq2seqProject')
  27. def test_get_annotation_class(self):
  28. klass = self.project.get_annotation_class()
  29. self.assertEqual(klass, TextLabel)
  30. @override_settings(STATICFILES_STORAGE='django.contrib.staticfiles.storage.StaticFilesStorage')
  31. class TestSpeech2textProject(TestCase):
  32. @classmethod
  33. def setUpTestData(cls):
  34. cls.project = mommy.make('Speech2textProject')
  35. def test_get_annotation_class(self):
  36. klass = self.project.get_annotation_class()
  37. self.assertEqual(klass, TextLabel)
  38. class TestLabel(TestCase):
  39. def test_text_uniqueness(self):
  40. label = mommy.make('Label')
  41. mommy.make('Label', text=label.text)
  42. with self.assertRaises(IntegrityError):
  43. Label(project=label.project, text=label.text).save()
  44. def test_keys_uniqueness(self):
  45. label = mommy.make('Label', prefix_key='ctrl', suffix_key='a')
  46. with self.assertRaises(ValidationError):
  47. Label(project=label.project,
  48. text='example',
  49. prefix_key=label.prefix_key,
  50. suffix_key=label.suffix_key).full_clean()
  51. def test_suffix_key_uniqueness(self):
  52. label = mommy.make('Label', prefix_key=None, suffix_key='a')
  53. with self.assertRaises(ValidationError):
  54. Label(project=label.project,
  55. text='example',
  56. prefix_key=label.prefix_key,
  57. suffix_key=label.suffix_key).full_clean()
  58. def test_cannot_add_label_only_prefix_key(self):
  59. project = mommy.make('Project')
  60. label = Label(project=project,
  61. text='example',
  62. prefix_key='ctrl')
  63. with self.assertRaises(ValidationError):
  64. label.clean()
  65. def test_can_add_label_only_suffix_key(self):
  66. project = mommy.make('Project')
  67. label = Label(project=project,
  68. text='example',
  69. suffix_key='a')
  70. try:
  71. label.full_clean()
  72. except ValidationError:
  73. self.fail(msg=ValidationError)
  74. def test_can_add_label_suffix_key_with_prefix_key(self):
  75. project = mommy.make('Project')
  76. label = Label(project=project,
  77. text='example',
  78. prefix_key='ctrl',
  79. suffix_key='a')
  80. try:
  81. label.full_clean()
  82. except ValidationError:
  83. self.fail(msg=ValidationError)
  84. class TestCategory(TestCase):
  85. def test_uniqueness(self):
  86. a = mommy.make('Category')
  87. with self.assertRaises(IntegrityError):
  88. Category(example=a.example, user=a.user, label=a.label).save()
  89. class TestSequenceAnnotation(TestCase):
  90. def test_uniqueness(self):
  91. a = mommy.make('Span')
  92. with self.assertRaises(IntegrityError):
  93. Span(example=a.example,
  94. user=a.user,
  95. label=a.label,
  96. start_offset=a.start_offset,
  97. end_offset=a.end_offset).save()
  98. def test_position_constraint(self):
  99. with self.assertRaises(ValidationError):
  100. mommy.make('Span',
  101. start_offset=1, end_offset=0).clean()
  102. class TestSeq2seqAnnotation(TestCase):
  103. def test_uniqueness(self):
  104. a = mommy.make('TextLabel')
  105. with self.assertRaises(IntegrityError):
  106. TextLabel(example=a.example,
  107. user=a.user,
  108. text=a.text).save()