|
1 | 1 | import pytest |
2 | 2 |
|
3 | | -from grandchallenge.components.models import ComponentInterface |
| 3 | +from grandchallenge.algorithms.exceptions import ImageImportError |
| 4 | +from grandchallenge.cases.models import RawImageUploadSession |
| 5 | +from grandchallenge.components.models import ( |
| 6 | + ComponentInterface, |
| 7 | + ComponentInterfaceValue, |
| 8 | +) |
4 | 9 | from grandchallenge.reader_studies.tasks import ( |
| 10 | + add_image_to_display_set, |
5 | 11 | create_display_sets_for_upload_session, |
6 | 12 | ) |
| 13 | +from tests.cases_tests.factories import RawImageUploadSessionFactory |
| 14 | +from tests.components_tests.factories import ComponentInterfaceFactory |
7 | 15 | from tests.factories import ImageFactory |
8 | | -from tests.reader_studies_tests.factories import ReaderStudyFactory |
| 16 | +from tests.reader_studies_tests.factories import ( |
| 17 | + DisplaySetFactory, |
| 18 | + ReaderStudyFactory, |
| 19 | +) |
9 | 20 |
|
10 | 21 |
|
11 | 22 | @pytest.mark.django_db |
@@ -33,3 +44,48 @@ def test_create_display_sets_for_upload_session(): |
33 | 44 |
|
34 | 45 | assert rs.display_sets.count() == 1 |
35 | 46 | assert rs.display_sets.first().values.first().image == image |
| 47 | + |
| 48 | + |
| 49 | +@pytest.mark.django_db |
| 50 | +def test_add_image_to_display_set(settings): |
| 51 | + settings.task_eager_propagates = (True,) |
| 52 | + settings.task_always_eager = (True,) |
| 53 | + |
| 54 | + ds = DisplaySetFactory() |
| 55 | + us = RawImageUploadSessionFactory() |
| 56 | + ci = ComponentInterfaceFactory() |
| 57 | + |
| 58 | + error_message = "Image imports should result in a single image" |
| 59 | + |
| 60 | + with pytest.raises(ImageImportError): |
| 61 | + add_image_to_display_set( |
| 62 | + upload_session_pk=us.pk, |
| 63 | + display_set_pk=ds.pk, |
| 64 | + interface_pk=ci.pk, |
| 65 | + ) |
| 66 | + assert ComponentInterfaceValue.objects.filter(interface=ci).count() == 0 |
| 67 | + us.refresh_from_db() |
| 68 | + assert us.status == RawImageUploadSession.FAILURE |
| 69 | + assert us.error_message == error_message |
| 70 | + |
| 71 | + im1, im2 = ImageFactory.create_batch(2, origin=us) |
| 72 | + |
| 73 | + with pytest.raises(ImageImportError): |
| 74 | + add_image_to_display_set( |
| 75 | + upload_session_pk=us.pk, |
| 76 | + display_set_pk=ds.pk, |
| 77 | + interface_pk=ci.pk, |
| 78 | + ) |
| 79 | + assert ComponentInterfaceValue.objects.filter(interface=ci).count() == 0 |
| 80 | + us.refresh_from_db() |
| 81 | + assert us.status == RawImageUploadSession.FAILURE |
| 82 | + assert us.error_message == error_message |
| 83 | + |
| 84 | + im2.delete() |
| 85 | + |
| 86 | + add_image_to_display_set( |
| 87 | + upload_session_pk=us.pk, |
| 88 | + display_set_pk=ds.pk, |
| 89 | + interface_pk=ci.pk, |
| 90 | + ) |
| 91 | + assert ComponentInterfaceValue.objects.filter(interface=ci).count() == 1 |
0 commit comments