@@ -260,13 +260,11 @@ def test_transform_records_template_keyerror_handled(
260260 create_populate_module : Any ,
261261) -> None :
262262 mod = create_populate_module
263- raw_items = [
264- {"primary_key" : {"S" : "pk1" }, "symptomGroupSymptomDiscriminators" : {"L" : []}}
265- ]
263+ raw_items = [{"id" : {"S" : "pk1" }, "symptomGroupSymptomDiscriminators" : {"L" : []}}]
266264 schema = {
267265 "primary_key_template" : "{primary_key}-{missing}" ,
268266 "doc_id_fields" : ["primary_key" ],
269- "top_level" : {"primary_key" : ["primary_key" ]},
267+ "top_level" : {"primary_key" : ["primary_key" , "id" ]},
270268 "nested" : {},
271269 }
272270 out = mod .transform_records (raw_items , schema )
@@ -475,3 +473,60 @@ def test_index_records_chunk_partial_failure_logs(
475473 assert total == 4
476474 assert success == 0
477475 assert any ("Bulk chunk had" in r .message for r in caplog .records )
476+
477+
478+ def test_main_passes_projection_to_scan (create_populate_module : Any ) -> None :
479+ mod = create_populate_module
480+ called = {}
481+
482+ def fake_scan (_client , table , attrs ):
483+ called ["table" ] = table
484+ called ["attrs" ] = attrs
485+ return []
486+
487+ with (
488+ patch (
489+ "populate_open_search_index.prepare_dynamodb_client" ,
490+ return_value = MagicMock (),
491+ ),
492+ patch ("populate_open_search_index.scan_dynamodb_table" , side_effect = fake_scan ),
493+ patch (
494+ "populate_open_search_index.SignedRequestsSession" , return_value = MagicMock ()
495+ ),
496+ ):
497+ rc = mod .main (["--endpoint" , "https://example" , "--final-index" , "triage_code" ])
498+ assert rc == 0
499+
500+ assert "attrs" in called
501+ assert "id" in called ["attrs" ]
502+ assert "symptomGroupSymptomDiscriminators" in called ["attrs" ]
503+
504+
505+ def test_transform_full_item_maps_id_and_nested (create_populate_module : Any ) -> None :
506+ """Use a representative DynamoDB item and verify transform_records produces the expected document shape."""
507+ mod = create_populate_module
508+ sample = {
509+ "id" : {"S" : "6f3d7dd4-e50b-5d8d-be2b-455f091b4df2" },
510+ "field" : {"S" : "document" },
511+ "active" : {"BOOL" : True },
512+ "symptomGroupSymptomDiscriminators" : {
513+ "L" : [
514+ {"M" : {"sd" : {"N" : "4052" }, "sg" : {"N" : "1006" }}},
515+ {"M" : {"sd" : {"N" : "4052" }, "sg" : {"N" : "1004" }}},
516+ ]
517+ },
518+ }
519+
520+ out = mod .transform_records ([sample ])
521+ assert isinstance (out , list )
522+ assert len (out ) == 1
523+ doc = out [0 ]
524+ # primary_key should be built from id alias
525+ assert "primary_key" in doc
526+ assert doc ["primary_key" ] == "6f3d7dd4-e50b-5d8d-be2b-455f091b4df2"
527+ # nested field name determined by mapping; expect list with two items
528+ nested = doc .get (mod .NESTED_COLLECTION_FIELD )
529+ assert isinstance (nested , list )
530+ assert len (nested ) == 2
531+ assert nested [0 ]["sg" ] == 1006
532+ assert nested [0 ]["sd" ] == 4052
0 commit comments