1- from io import BytesIO
2-
3- import pandas as pd
41import pytest
52from adit_radis_shared .accounts .factories import UserFactory
63from adit_radis_shared .common .utils .auth_utils import add_user_to_group
7- from django .core .files .uploadedfile import SimpleUploadedFile
4+ from django .conf import LazySettings
5+ from django .test import Client
86from django .urls import reverse
97from procrastinate .contrib .django .models import ProcrastinateJob
108from pytest_django .asserts import assertTemplateUsed
119
12- from adit .batch_transfer .utils .testing_helpers import create_batch_transfer_group
13- from adit .core .factories import DicomServerFactory
10+ from adit .batch_transfer .utils .testing_helpers import create_batch_transfer_group , create_form_data
1411from adit .core .models import DicomServer
1512from adit .core .utils .auth_utils import grant_access
1613
1714from ..models import BatchTransferJob
1815
1916
20- # Somehow the form data must be always generated from scratch (maybe cause of the
21- # SimpleUploadedFile) otherwise tests fail.
22- @pytest .fixture
23- def form_data (db ):
24- buffer = BytesIO ()
25- data = pd .DataFrame (
26- [
27- ["1001" , "1.2.840.113845.11.1000000001951524609.20200705182951.2689481" , "WSOHMP4N" ],
28- ["1002" , "1.2.840.113845.11.1000000001951524609.20200705170836.2689469" , "C2XJQ2AR" ],
29- ["1003" , "1.2.840.113845.11.1000000001951524609.20200705172608.2689471" , "KRS8CZ3S" ],
30- ],
31- columns = ["PatientID" , "StudyInstanceUID" , "Pseudonym" ], # type: ignore
32- )
33- data .to_excel (buffer , index = False ) # type: ignore
34-
35- return {
36- "source" : DicomServerFactory .create ().pk ,
37- "destination" : DicomServerFactory .create ().pk ,
38- "project_name" : "Apollo project" ,
39- "project_description" : "Fly to the moon" ,
40- "ethics_application_id" : "12345" ,
41- "batch_file" : SimpleUploadedFile (
42- name = "sample_sheet.xlsx" ,
43- content = buffer .getvalue (),
44- content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ,
45- ),
46- }
47-
48-
4917@pytest .mark .django_db
50- def test_user_must_be_logged_in_to_access_view (client ):
18+ def test_user_must_be_logged_in_to_access_view (client : Client ):
5119 response = client .get (reverse ("batch_transfer_job_create" ))
5220 assert response .status_code == 302
5321 response = client .post (reverse ("batch_transfer_job_create" ))
5422 assert response .status_code == 302
5523
5624
5725@pytest .mark .django_db
58- def test_user_must_have_permission_to_access_view (client ):
26+ def test_user_must_have_permission_to_access_view (client : Client ):
5927 user = UserFactory .create ()
6028 client .force_login (user )
6129 response = client .get (reverse ("batch_transfer_job_create" ))
@@ -65,7 +33,7 @@ def test_user_must_have_permission_to_access_view(client):
6533
6634
6735@pytest .mark .django_db
68- def test_logged_in_user_with_permission_can_access_form (client ):
36+ def test_logged_in_user_with_permission_can_access_form (client : Client ):
6937 user = UserFactory .create ()
7038 group = create_batch_transfer_group ()
7139 add_user_to_group (user , group )
@@ -75,13 +43,15 @@ def test_logged_in_user_with_permission_can_access_form(client):
7543 assertTemplateUsed (response , "batch_transfer/batch_transfer_job_form.html" )
7644
7745
78- def test_batch_job_created_and_enqueued_with_auto_verify (client , settings , form_data ):
46+ @pytest .mark .django_db
47+ def test_batch_job_created_and_enqueued_with_auto_verify (client : Client , settings : LazySettings ):
7948 settings .START_BATCH_TRANSFER_UNVERIFIED = True
8049
8150 user = UserFactory .create ()
8251 group = create_batch_transfer_group ()
8352 add_user_to_group (user , group )
8453
54+ form_data = create_form_data ()
8555 source_server = DicomServer .objects .get (pk = form_data ["source" ])
8656 destination_server = DicomServer .objects .get (pk = form_data ["destination" ])
8757 grant_access (group , source_server , source = True )
@@ -95,13 +65,17 @@ def test_batch_job_created_and_enqueued_with_auto_verify(client, settings, form_
9565 assert ProcrastinateJob .objects .count () == 3
9666
9767
98- def test_batch_job_created_and_not_enqueued_without_auto_verify (client , settings , form_data ):
68+ @pytest .mark .django_db
69+ def test_batch_job_created_and_not_enqueued_without_auto_verify (
70+ client : Client , settings : LazySettings
71+ ):
9972 settings .START_BATCH_TRANSFER_UNVERIFIED = False
10073
10174 user = UserFactory .create ()
10275 group = create_batch_transfer_group ()
10376 add_user_to_group (user , group )
10477
78+ form_data = create_form_data ()
10579 source_server = DicomServer .objects .get (pk = form_data ["source" ])
10680 destination_server = DicomServer .objects .get (pk = form_data ["destination" ])
10781 grant_access (group , source_server , source = True )
@@ -115,11 +89,13 @@ def test_batch_job_created_and_not_enqueued_without_auto_verify(client, settings
11589 assert ProcrastinateJob .objects .count () == 0
11690
11791
118- def test_job_cant_be_created_with_missing_fields (client , form_data ):
92+ @pytest .mark .django_db
93+ def test_job_cant_be_created_with_missing_fields (client : Client ):
11994 user = UserFactory .create ()
12095 group = create_batch_transfer_group ()
12196 add_user_to_group (user , group )
12297 client .force_login (user )
98+ form_data = create_form_data ()
12399 for key_to_exclude in form_data :
124100 invalid_form_data = form_data .copy ()
125101 del invalid_form_data [key_to_exclude ]
0 commit comments