Skip to content
Snippets Groups Projects
Commit 32814987 authored by Bastien Abadie's avatar Bastien Abadie
Browse files

Merge branch 'fix-class-test' into 'master'

Fix randomly failing best class filter test

Closes #486

See merge request !1209
parents a37baaad 4f7eeb73
No related branches found
No related tags found
1 merge request!1209Fix randomly failing best class filter test
......@@ -12,30 +12,30 @@ class TestClasses(FixtureAPITestCase):
@classmethod
def setUpTestData(cls):
super().setUpTestData()
cls.text = MLClass.objects.create(name='text', corpus=cls.corpus)
cls.cover = MLClass.objects.create(name='cover', corpus=cls.corpus)
cls.text = cls.corpus.ml_classes.create(name='text')
cls.cover = cls.corpus.ml_classes.create(name='cover')
cls.classified = cls.corpus.types.create(slug='classified', folder=True)
cls.folder_type = cls.corpus.types.create(slug='folder', folder=True)
cls.parent = cls.corpus.elements.create(type=cls.folder_type, name='parent')
cls.common_children = cls.corpus.elements.create(type=cls.folder_type, name='common_children')
def populate_classified_elements(self):
self.folder_type = self.corpus.types.create(slug='folder', folder=True)
self.parent = self.corpus.elements.create(type=self.folder_type)
self.common_children = self.corpus.elements.create(type=self.folder_type)
cls.version1 = WorkerVersion.objects.get(worker__slug='reco')
cls.version2 = WorkerVersion.objects.get(worker__slug='dla')
self.version1 = WorkerVersion.objects.get(worker__slug='reco')
self.version2 = WorkerVersion.objects.get(worker__slug='dla')
for elt_num in range(1, 13):
elt = Element.objects.create(
elt = cls.corpus.elements.create(
name='elt_{}'.format(elt_num),
type=self.classified,
corpus_id=self.corpus.id
type=cls.classified,
)
elt.add_parent(self.parent)
self.common_children.add_parent(elt)
for ml_class, score in zip((self.text, self.cover), (.7, .99)):
for worker_version in (self.version1, self.version2):
elt.add_parent(cls.parent)
cls.common_children.add_parent(elt)
for ml_class, score in ((cls.text, .7), (cls.cover, .99)):
for worker_version in (cls.version1, cls.version2):
elt.classifications.create(
worker_version=worker_version,
ml_class_id=ml_class.id,
ml_class=ml_class,
confidence=score,
high_confidence=bool(score == .99)
)
......@@ -57,7 +57,7 @@ class TestClasses(FixtureAPITestCase):
{
"id": str(self.cover.pk),
"name": "cover",
"nb_best": 0
"nb_best": 24
},
{
"id": str(self.text.pk),
......@@ -82,7 +82,7 @@ class TestClasses(FixtureAPITestCase):
{
"id": str(self.cover.pk),
"name": "cover",
"nb_best": 0
"nb_best": 24
},
{
"id": str(self.image.pk),
......@@ -115,7 +115,6 @@ class TestClasses(FixtureAPITestCase):
"""
Test nb_best attribute on ListCorpusMLClasses endpoint
"""
self.populate_classified_elements()
self.client.force_login(self.user)
with self.assertNumQueries(5):
response = self.client.get(reverse('api:corpus-classes', kwargs={'pk': self.corpus.pk}), {})
......@@ -140,7 +139,6 @@ class TestClasses(FixtureAPITestCase):
def test_list_classes_search(self):
buffer_class = MLClass.objects.create(name='buffer overflow', corpus=self.corpus)
self.populate_classified_elements()
self.client.force_login(self.user)
with self.assertNumQueries(5):
response = self.client.get(
......@@ -173,7 +171,6 @@ class TestClasses(FixtureAPITestCase):
@override_settings(SEARCH_FILTER_MAX_TERMS=3)
def test_search_filter_limit(self):
self.corpus.ml_classes.create(name='buffer overflow')
self.populate_classified_elements()
self.client.force_login(self.user)
response = self.client.get(
......@@ -218,7 +215,6 @@ class TestClasses(FixtureAPITestCase):
})
def test_list_elements_db_queries(self):
self.populate_classified_elements()
with self.assertNumQueries(3):
response = self.client.get(
reverse('api:corpus-elements', kwargs={'corpus': self.corpus.id}),
......@@ -228,7 +224,6 @@ class TestClasses(FixtureAPITestCase):
self.assertEqual(response.json()['count'], 12)
def test_list_elements_best_classes(self):
self.populate_classified_elements()
with self.assertNumQueries(4):
response = self.client.get(
reverse('api:corpus-elements', kwargs={'corpus': self.corpus.id}),
......@@ -244,7 +239,6 @@ class TestClasses(FixtureAPITestCase):
)
def test_list_elements_best_classes_false(self):
self.populate_classified_elements()
with self.assertNumQueries(3):
response = self.client.get(
reverse('api:corpus-elements', kwargs={'corpus': self.corpus.id}),
......@@ -258,7 +252,6 @@ class TestClasses(FixtureAPITestCase):
self.assertIsNone(elt['best_classes'])
def test_element_parents_best_classes(self):
self.populate_classified_elements()
with self.assertNumQueries(4):
response = self.client.get(
reverse('api:elements-parents', kwargs={'pk': str(self.common_children.id)}),
......@@ -274,7 +267,6 @@ class TestClasses(FixtureAPITestCase):
)
def test_element_children_best_classes(self):
self.populate_classified_elements()
with self.assertNumQueries(5):
response = self.client.get(
reverse('api:elements-children', kwargs={'pk': str(self.parent.id)}),
......@@ -293,7 +285,6 @@ class TestClasses(FixtureAPITestCase):
"""
A machine classification that have been rejected by a human must not appear
"""
self.populate_classified_elements()
child = Element.objects.filter(type=self.classified.id).first()
child.classifications.all().update(state=ClassificationState.Rejected)
with self.assertNumQueries(5):
......@@ -314,7 +305,6 @@ class TestClasses(FixtureAPITestCase):
"""
A non best class validated by a human is considered as best as it is for the human
"""
self.populate_classified_elements()
parent = Element.objects.get_ascending(self.common_children.id).last()
parent.classifications.all().filter(confidence=.7).update(state=ClassificationState.Validated)
response = self.client.get(
......@@ -342,7 +332,6 @@ class TestClasses(FixtureAPITestCase):
"""
A manual classification rejected by a human may not appear in best classes
"""
self.populate_classified_elements()
element = Element.objects.filter(type=self.classified.id).first()
classif = element.classifications.create(
ml_class_id=self.text.id,
......@@ -387,7 +376,6 @@ class TestClasses(FixtureAPITestCase):
)
def test_class_filter_list_elements(self):
self.populate_classified_elements()
element = Element.objects.filter(type=self.classified.id).first()
element.classifications.create(
ml_class=self.text,
......@@ -405,9 +393,9 @@ class TestClasses(FixtureAPITestCase):
self.assertEqual(data['results'][0]['id'], str(element.id))
def test_class_filter_list_parents(self):
self.populate_classified_elements()
parent = Element.objects.get_ascending(self.common_children.id).last()
parent.classifications.all().filter(confidence=.7).update(state=ClassificationState.Validated)
parent = Element.objects.get_ascending(self.common_children.id).get(name='elt_1')
self.assertEqual(parent.classifications.filter(ml_class=self.text).count(), 2)
parent.classifications.filter(ml_class=self.text).update(state=ClassificationState.Validated)
with self.assertNumQueries(3):
response = self.client.get(
reverse('api:elements-parents', kwargs={'pk': str(self.common_children.id)}),
......@@ -419,7 +407,6 @@ class TestClasses(FixtureAPITestCase):
self.assertEqual(data['results'][0]['id'], str(parent.id))
def test_class_filter_list_children(self):
self.populate_classified_elements()
child = Element.objects.filter(type=self.classified.id).first()
child.classifications.all().filter(confidence=.7).update(state=ClassificationState.Validated)
with self.assertNumQueries(4):
......@@ -433,7 +420,6 @@ class TestClasses(FixtureAPITestCase):
self.assertEqual(data['results'][0]['id'], str(child.id))
def test_class_filter_list_elements_distinct(self):
self.populate_classified_elements()
self.assertEqual(Classification.objects.filter(high_confidence=True).count(), 24)
self.assertEqual(Classification.objects.filter(high_confidence=True).distinct('element_id').count(), 12)
with self.assertNumQueries(3):
......@@ -449,7 +435,6 @@ class TestClasses(FixtureAPITestCase):
self.assertCountEqual(ids, set(ids))
def test_class_filter_list_parents_distinct(self):
self.populate_classified_elements()
self.assertEqual(Classification.objects.filter(high_confidence=True).count(), 24)
self.assertEqual(Classification.objects.filter(high_confidence=True).distinct('element_id').count(), 12)
with self.assertNumQueries(3):
......@@ -465,7 +450,6 @@ class TestClasses(FixtureAPITestCase):
self.assertCountEqual(ids, set(ids))
def test_class_filter_list_children_distinct(self):
self.populate_classified_elements()
self.assertEqual(Classification.objects.filter(high_confidence=True).count(), 24)
self.assertEqual(Classification.objects.filter(high_confidence=True).distinct('element_id').count(), 12)
with self.assertNumQueries(4):
......@@ -481,7 +465,6 @@ class TestClasses(FixtureAPITestCase):
self.assertCountEqual(ids, set(ids))
def test_class_filter_true(self):
self.populate_classified_elements()
element = Element.objects.filter(type=self.classified.id).first()
element.classifications.all().delete()
element.classifications.create(
......@@ -506,7 +489,6 @@ class TestClasses(FixtureAPITestCase):
self.assertSetEqual(best_class_ids, {str(self.text.id), str(self.cover.id)})
def test_class_filter_false(self):
self.populate_classified_elements()
element = Element.objects.filter(type=self.classified.id).first()
element.classifications.all().delete()
element.classifications.create(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment