@@ -184,6 +184,49 @@ def test_validate_barcode_meta_pass(self):
184
184
bc_valid = sample_repo ._validate_barcode_meta ("Cheek" , bc_meta )
185
185
self .assertNotEqual (bc_valid , False )
186
186
187
+ # Test each scenario where only one field is present to confirm
188
+ # that any other field can be nullable
189
+ bc_meta = {
190
+ "sample_site_last_washed_date" : "01/10/2025" ,
191
+ "sample_site_last_washed_time" : "" ,
192
+ "sample_site_last_washed_product" : ""
193
+ }
194
+ exp = {
195
+ "sample_site_last_washed_date" : datetime .datetime (
196
+ 2025 , 1 , 10 ),
197
+ "sample_site_last_washed_time" : None ,
198
+ "sample_site_last_washed_product" : None
199
+ }
200
+ bc_valid = sample_repo ._validate_barcode_meta ("Cheek" , bc_meta )
201
+ self .assertEqual (bc_valid , exp )
202
+
203
+ bc_meta = {
204
+ "sample_site_last_washed_date" : "" ,
205
+ "sample_site_last_washed_time" : "9:30 AM" ,
206
+ "sample_site_last_washed_product" : ""
207
+ }
208
+ exp = {
209
+ "sample_site_last_washed_date" : None ,
210
+ "sample_site_last_washed_time" : datetime .datetime (
211
+ 1900 , 1 , 1 , 9 , 30 ),
212
+ "sample_site_last_washed_product" : None
213
+ }
214
+ bc_valid = sample_repo ._validate_barcode_meta ("Cheek" , bc_meta )
215
+ self .assertEqual (bc_valid , exp )
216
+
217
+ bc_meta = {
218
+ "sample_site_last_washed_date" : "" ,
219
+ "sample_site_last_washed_time" : "" ,
220
+ "sample_site_last_washed_product" : "Face cleanser"
221
+ }
222
+ exp = {
223
+ "sample_site_last_washed_date" : None ,
224
+ "sample_site_last_washed_time" : None ,
225
+ "sample_site_last_washed_product" : "Face cleanser"
226
+ }
227
+ bc_valid = sample_repo ._validate_barcode_meta ("Cheek" , bc_meta )
228
+ self .assertEqual (bc_valid , exp )
229
+
187
230
# Confirm that empty dicts pass, regardless of site
188
231
bc_meta = {}
189
232
bc_valid = sample_repo ._validate_barcode_meta ("Stool" , bc_meta )
@@ -206,6 +249,24 @@ def test_validate_barcode_meta_fail(self):
206
249
bc_valid = sample_repo ._validate_barcode_meta ("Stool" , bc_meta )
207
250
self .assertFalse (bc_valid )
208
251
252
+ # Try using an invalid value for the date
253
+ bc_meta = {
254
+ "sample_site_last_washed_date" : "Cookie monster" ,
255
+ "sample_site_last_washed_time" : "" ,
256
+ "sample_site_last_washed_product" : "Face cleanser"
257
+ }
258
+ bc_valid = sample_repo ._validate_barcode_meta ("Cheek" , bc_meta )
259
+ self .assertEqual (bc_valid , False )
260
+
261
+ # Try using an invalid value for the time
262
+ bc_meta = {
263
+ "sample_site_last_washed_date" : "" ,
264
+ "sample_site_last_washed_time" : "Rosemary focaccia" ,
265
+ "sample_site_last_washed_product" : "Face cleanser"
266
+ }
267
+ bc_valid = sample_repo ._validate_barcode_meta ("Cheek" , bc_meta )
268
+ self .assertEqual (bc_valid , False )
269
+
209
270
def test_update_barcode_meta_via_update_info (self ):
210
271
# We're going to use a stable sample and override_locked to test
211
272
# the barcode meta update via update_info()
0 commit comments