@@ -51,6 +51,151 @@ def test_last_updated_within_three_minutes_return_false_when_last_updated_is_mor
5151 assert expected == actual
5252
5353
54+ def test_set_location_properties_with_file_location_sets_bucket_and_key ():
55+ data = {
56+ "id" : "test-id-123" ,
57+ "file_name" : "test.pdf" ,
58+ "nhs_number" : "9000000009" ,
59+ "file_location" : "s3://my-bucket/folder/9000000009/test-id-123" ,
60+ }
61+
62+ doc_ref = DocumentReference .model_validate (data )
63+
64+ assert doc_ref .s3_bucket_name == "my-bucket"
65+ assert doc_ref .s3_file_key == "folder/9000000009/test-id-123"
66+ assert doc_ref .file_location == "s3://my-bucket/folder/9000000009/test-id-123"
67+
68+
69+ def test_set_location_properties_with_FileLocation_pascal_case ():
70+ data = {
71+ "id" : "test-id-456" ,
72+ "file_name" : "test.pdf" ,
73+ "nhs_number" : "9000000009" ,
74+ "FileLocation" : "s3://another-bucket/path/to/file" ,
75+ }
76+
77+ doc_ref = DocumentReference .model_validate (data )
78+
79+ assert doc_ref .s3_bucket_name == "another-bucket"
80+ assert doc_ref .s3_file_key == "path/to/file"
81+ assert doc_ref .file_location == "s3://another-bucket/path/to/file"
82+
83+
84+ def test_set_location_properties_with_s3_bucket_name_builds_location ():
85+ data = {
86+ "id" : "test-id-789" ,
87+ "file_name" : "test.pdf" ,
88+ "nhs_number" : "9000000009" ,
89+ "s3_bucket_name" : "test-bucket" ,
90+ }
91+
92+ doc_ref = DocumentReference .model_validate (data )
93+
94+ assert doc_ref .s3_bucket_name == "test-bucket"
95+ assert doc_ref .s3_file_key == "9000000009/test-id-789"
96+ assert doc_ref .file_location == "s3://test-bucket/9000000009/test-id-789"
97+
98+
99+ def test_set_location_properties_with_s3_bucket_and_subfolder ():
100+ data = {
101+ "id" : "test-id-101" ,
102+ "file_name" : "test.pdf" ,
103+ "nhs_number" : "9000000009" ,
104+ "s3_bucket_name" : "test-bucket" ,
105+ "sub_folder" : "patients/archive" ,
106+ }
107+
108+ doc_ref = DocumentReference .model_validate (data )
109+
110+ assert doc_ref .s3_bucket_name == "test-bucket"
111+ assert doc_ref .s3_file_key == "patients/archive/9000000009/test-id-101"
112+ assert (
113+ doc_ref .file_location
114+ == "s3://test-bucket/patients/archive/9000000009/test-id-101"
115+ )
116+
117+
118+ def test_set_location_properties_with_s3_bucket_subfolder_and_doc_type ():
119+ data = {
120+ "id" : "test-id-202" ,
121+ "file_name" : "test.pdf" ,
122+ "nhs_number" : "9000000009" ,
123+ "s3_bucket_name" : "test-bucket" ,
124+ "sub_folder" : "patients/active" ,
125+ "doc_type" : "ARF" ,
126+ }
127+
128+ doc_ref = DocumentReference .model_validate (data )
129+
130+ assert doc_ref .s3_bucket_name == "test-bucket"
131+ assert doc_ref .s3_file_key == "patients/active/ARF/9000000009/test-id-202"
132+ assert (
133+ doc_ref .file_location
134+ == "s3://test-bucket/patients/active/ARF/9000000009/test-id-202"
135+ )
136+
137+
138+ def test_set_location_properties_with_explicit_s3_file_key ():
139+ data = {
140+ "id" : "test-id-303" ,
141+ "file_name" : "test.pdf" ,
142+ "nhs_number" : "9000000009" ,
143+ "s3_bucket_name" : "test-bucket" ,
144+ "s3_file_key" : "custom/path/to/file" ,
145+ }
146+
147+ doc_ref = DocumentReference .model_validate (data )
148+
149+ assert doc_ref .s3_bucket_name == "test-bucket"
150+ assert doc_ref .s3_file_key == "custom/path/to/file"
151+ assert doc_ref .file_location == "s3://test-bucket/9000000009/test-id-303"
152+
153+
154+ def test_set_location_properties_file_location_does_not_override_explicit_s3_key ():
155+ data = {
156+ "id" : "test-id-404" ,
157+ "file_name" : "test.pdf" ,
158+ "nhs_number" : "9000000009" ,
159+ "file_location" : "s3://bucket-one/old/path/file" ,
160+ "s3_file_key" : "new/path/file" ,
161+ }
162+
163+ doc_ref = DocumentReference .model_validate (data )
164+
165+ assert doc_ref .s3_bucket_name == "bucket-one"
166+ assert doc_ref .s3_file_key == "new/path/file"
167+
168+
169+ def test_set_location_properties_with_leading_slash_in_key ():
170+ data = {
171+ "id" : "test-id-505" ,
172+ "file_name" : "test.pdf" ,
173+ "nhs_number" : "9000000009" ,
174+ "s3_bucket_name" : "test-bucket" ,
175+ "s3_file_key" : "/leading/slash/path" ,
176+ }
177+
178+ doc_ref = DocumentReference .model_validate (data )
179+
180+ assert doc_ref .file_location == "s3://test-bucket/9000000009/test-id-505"
181+
182+
183+ def test_set_location_properties_complex_s3_location ():
184+ data = {
185+ "id" : "test-id-606" ,
186+ "file_name" : "test.pdf" ,
187+ "nhs_number" : "9000000009" ,
188+ "file_location" : "s3://prod-bucket/year/2024/month/10/patient/9000000009/test-id-606" ,
189+ }
190+
191+ doc_ref = DocumentReference .model_validate (data )
192+
193+ assert doc_ref .s3_bucket_name == "prod-bucket"
194+ assert doc_ref .s3_file_key == "year/2024/month/10/patient/9000000009/test-id-606"
195+ assert (
196+ doc_ref .file_location
197+ == "s3://prod-bucket/year/2024/month/10/patient/9000000009/test-id-606"
198+ )
54199def test_infer_doc_status_returns_deprecated_when_deleted ():
55200 MOCK_DOCUMENT_REFERENCE .deleted = "2023-10-30T10:25:00.000Z"
56201 MOCK_DOCUMENT_REFERENCE .uploaded = True
0 commit comments