def setUp(self) -> None: self.method = MethodFactory(ready=True, phase__archive=ArchiveFactory()) self.algorithm_image = AlgorithmImageFactory() self.images = ImageFactory.create_batch(3) self.method.phase.archive.images.set(self.images[:2])
def setUp(self) -> None: self.method = MethodFactory(ready=True) self.algorithm_image = AlgorithmImageFactory() self.images = ImageFactory.create_batch(3) imageset = self.method.challenge.imageset_set.get( phase=ImageSet.TESTING ) imageset.images.set(self.images[:2])
def setUp(self) -> None: self.method = MethodFactory(ready=True, phase__archive=ArchiveFactory()) self.algorithm_image = AlgorithmImageFactory() interface = ComponentInterfaceFactory() self.algorithm_image.algorithm.inputs.set([interface]) self.images = ImageFactory.create_batch(3) for image in self.images[:2]: civ = ComponentInterfaceValueFactory(image=image, interface=interface) ai = ArchiveItemFactory(archive=self.method.phase.archive) ai.values.add(civ)
def test_archive_item_permissions_signal(client, reverse): # noqa: C901 ai1, ai2 = ArchiveItemFactory.create_batch(2) im1, im2, im3, im4 = ImageFactory.create_batch(4) civ1, civ2, civ3, civ4 = ( ComponentInterfaceValueFactory(image=im1), ComponentInterfaceValueFactory(image=im2), ComponentInterfaceValueFactory(image=im3), ComponentInterfaceValueFactory(image=im4), ) with capture_on_commit_callbacks(execute=True): if reverse: for civ in [civ1, civ2, civ3, civ4]: civ.archive_items.add(ai1, ai2) for civ in [civ3, civ4]: civ.archive_items.remove(ai1, ai2) for civ in [civ1, civ2]: civ.archive_items.remove(ai2) else: # Test that adding images works ai1.values.add(civ1, civ2, civ3, civ4) # Test that removing images works ai1.values.remove(civ3, civ4) assert get_groups_with_set_perms(im1) == { ai1.archive.editors_group: {"view_image"}, ai1.archive.uploaders_group: {"view_image"}, ai1.archive.users_group: {"view_image"}, } assert get_groups_with_set_perms(im2) == { ai1.archive.editors_group: {"view_image"}, ai1.archive.uploaders_group: {"view_image"}, ai1.archive.users_group: {"view_image"}, } assert get_groups_with_set_perms(im3) == {} assert get_groups_with_set_perms(im4) == {} # Test clearing with capture_on_commit_callbacks(execute=True): if reverse: civ1.archive_items.clear() civ2.archive_items.clear() else: ai1.values.clear() assert get_groups_with_set_perms(im1) == {} assert get_groups_with_set_perms(im2) == {}
def test_display_set_permissions_signal(client, reverse): ds1, ds2 = DisplaySetFactory.create_batch(2) im1, im2, im3, im4 = ImageFactory.create_batch(4) civ1, civ2, civ3, civ4 = ( ComponentInterfaceValueFactory(image=im1), ComponentInterfaceValueFactory(image=im2), ComponentInterfaceValueFactory(image=im3), ComponentInterfaceValueFactory(image=im4), ) with capture_on_commit_callbacks(execute=True): if reverse: for civ in [civ1, civ2, civ3, civ4]: civ.display_sets.add(ds1, ds2) for civ in [civ3, civ4]: civ.display_sets.remove(ds1, ds2) for civ in [civ1, civ2]: civ.display_sets.remove(ds2) else: # Test that adding images works ds1.values.add(civ1, civ2, civ3, civ4) # Test that removing images works ds1.values.remove(civ3, civ4) assert get_groups_with_set_perms(im1) == { ds1.reader_study.editors_group: {"view_image"}, ds1.reader_study.readers_group: {"view_image"}, } assert get_groups_with_set_perms(im2) == { ds1.reader_study.editors_group: {"view_image"}, ds1.reader_study.readers_group: {"view_image"}, } assert get_groups_with_set_perms(im3) == {} assert get_groups_with_set_perms(im4) == {} # Test clearing with capture_on_commit_callbacks(execute=True): if reverse: civ1.display_sets.clear() civ2.display_sets.clear() else: ds1.values.clear() assert get_groups_with_set_perms(im1) == {} assert get_groups_with_set_perms(im2) == {}
def test_archive_items_to_reader_study_update_form(client, settings): settings.task_eager_propagates = (True,) settings.task_always_eager = (True,) archive = ArchiveFactory() rs1, rs2 = ReaderStudyFactory(use_display_sets=True), ReaderStudyFactory( use_display_sets=False ) editor, reader = UserFactory(), UserFactory() archive.editors_group.user_set.add(editor) rs1.add_editor(editor) rs1.add_reader(reader) rs2.add_editor(editor) im1, im2, im3, im4 = ImageFactory.create_batch(4) overlay = ComponentInterface.objects.get(slug="generic-overlay") image = ComponentInterface.objects.get(slug="generic-medical-image") civ1, civ2, civ3, civ4 = ( ComponentInterfaceValueFactory(interface=image, image=im1), ComponentInterfaceValueFactory(interface=image, image=im2), ComponentInterfaceValueFactory(interface=overlay, image=im3), ComponentInterfaceValueFactory(interface=overlay, image=im4), ) ai1 = ArchiveItemFactory(archive=archive) ai2 = ArchiveItemFactory(archive=archive) ai1.values.add(civ1) ai2.values.add(civ2) assert rs1.display_sets.count() == 0 response = get_view_for_user( viewname="archives:items-reader-study-update", client=client, method=client.post, data={"items": [ai1.pk, ai2.pk], "reader_study": rs1.pk}, reverse_kwargs={"slug": archive.slug}, follow=True, user=reader, ) assert response.status_code == 403 assert rs1.display_sets.count() == 0 response = get_view_for_user( viewname="archives:items-reader-study-update", client=client, method=client.post, data={"items": [ai1.pk, ai2.pk], "reader_study": rs1.pk}, reverse_kwargs={"slug": archive.slug}, follow=True, user=editor, ) assert response.status_code == 200 assert rs1.display_sets.count() == 2 assert sorted( list(rs1.display_sets.values_list("values", flat=True)) ) == sorted([civ1.pk, civ2.pk]) assert rs2.display_sets.count() == 0 response = get_view_for_user( viewname="archives:items-reader-study-update", client=client, method=client.post, data={"items": [ai1.pk, ai2.pk], "reader_study": rs2.pk}, reverse_kwargs={"slug": archive.slug}, follow=True, user=editor, ) assert response.status_code == 200 assert rs2.display_sets.count() == 0 ai1.values.add(civ3) ai2.values.add(civ4) response = get_view_for_user( viewname="archives:items-reader-study-update", client=client, method=client.post, data={"items": [ai1.pk, ai2.pk], "reader_study": rs1.pk}, reverse_kwargs={"slug": archive.slug}, follow=True, user=editor, ) assert response.status_code == 200 assert rs1.display_sets.count() == 4 assert sorted( sorted(list(ds.values.values_list("pk", flat=True))) for ds in rs1.display_sets.all() ) == sorted([[civ1.pk], [civ2.pk], [civ1.pk, civ3.pk], [civ2.pk, civ4.pk]])
def test_archive_items_to_reader_study_update(client, settings): settings.task_eager_propagates = (True, ) settings.task_always_eager = (True, ) archive = ArchiveFactory() rs1 = ReaderStudyFactory(use_display_sets=True) rs2 = ReaderStudyFactory(use_display_sets=False) editor, user = UserFactory(), UserFactory() archive.add_user(user) archive.add_editor(editor) rs1.add_editor(editor) rs2.add_editor(editor) im1, im2, im3, im4 = ImageFactory.create_batch(4) overlay = ComponentInterface.objects.get(slug="generic-overlay") image = ComponentInterface.objects.get(slug="generic-medical-image") civ1, civ2, civ3, civ4 = ( ComponentInterfaceValueFactory(interface=image, image=im1), ComponentInterfaceValueFactory(interface=image, image=im2), ComponentInterfaceValueFactory(interface=overlay, image=im3), ComponentInterfaceValueFactory(interface=overlay, image=im4), ) ai1 = ArchiveItemFactory(archive=archive) ai2 = ArchiveItemFactory(archive=archive) ai1.values.add(civ1) ai2.values.add(civ2) response = get_view_for_user( viewname="archives:items-reader-study-update", client=client, reverse_kwargs={"slug": archive.slug}, user=user, ) assert response.status_code == 200 assert str(rs1.pk) not in response.rendered_content assert str(rs2.pk) not in response.rendered_content response = get_view_for_user( viewname="archives:items-reader-study-update", client=client, reverse_kwargs={"slug": archive.slug}, follow=True, user=editor, ) assert response.status_code == 200 assert str(rs1.pk) in response.rendered_content assert str(rs2.pk) not in response.rendered_content assert im1.name in response.rendered_content assert im2.name in response.rendered_content assert im3.name not in response.rendered_content assert im4.name not in response.rendered_content ai1.values.add(civ3) ai2.values.add(civ4) response = get_view_for_user( viewname="archives:items-reader-study-update", client=client, reverse_kwargs={"slug": archive.slug}, follow=True, user=editor, ) assert response.status_code == 200 assert f"{im1.name}, {im3.name}" in response.rendered_content assert f"{im2.name}, {im4.name}" in response.rendered_content