1- import os
21import json
3- import tempfile
4- import subprocess
5- from pathlib import Path
6- import pytest
72
83import boto3
4+ import pytest
95from moto import mock_aws
106
11- from scripts .manual_uploads .manual_s3_dynamo_upload import run_upload , map_dynamo_type
7+ from scripts .manual_uploads .manual_s3_dynamo_upload import map_dynamo_type , run_upload
128
139
1410@pytest .fixture
1511def test_data_dir (tmp_path ):
1612 # {"NHS_NUMBER": "C456", "ATTRIBUTE_TYPE": "COHORTS", "COHORT_MEMBERSHIPS": [{"COHORT_LABEL": "under_75", "DATE_JOINED": "2025-01-01"},{"COHORT_LABEL": "over_75", "DATE_JOINED": "2025-01-01"}], "ACTION_FLAG": "ADD", "HASH": "fake_hash_delete_sim", "sync_time": "2025-05-01 12:00:00"}
1713 data = [
18- {"NHS_NUMBER" : "1234567890" , "ATTRIBUTE_TYPE" : "COHORTS" , "COHORT_MEMBERSHIPS" : [{"COHORT_LABEL" : "under_75" , "DATE_JOINED" : "2025-01-01" }]},
19- {"NHS_NUMBER" : "2345678901" , "ATTRIBUTE_TYPE" : "COHORTS" , "COHORT_MEMBERSHIPS" : [{"COHORT_LABEL" : "over_75" , "DATE_JOINED" : "2025-01-01" }]},
20- {"NHS_NUMBER" : "3456789012" , "ATTRIBUTE_TYPE" : "COHORTS" , "COHORT_MEMBERSHIPS" : [{"COHORT_LABEL" : "16+_covid" , "DATE_JOINED" : "2025-01-01" }]}
14+ {
15+ "NHS_NUMBER" : "1234567890" ,
16+ "ATTRIBUTE_TYPE" : "COHORTS" ,
17+ "COHORT_MEMBERSHIPS" : [{"COHORT_LABEL" : "under_75" , "DATE_JOINED" : "2025-01-01" }],
18+ },
19+ {
20+ "NHS_NUMBER" : "2345678901" ,
21+ "ATTRIBUTE_TYPE" : "COHORTS" ,
22+ "COHORT_MEMBERSHIPS" : [{"COHORT_LABEL" : "over_75" , "DATE_JOINED" : "2025-01-01" }],
23+ },
24+ {
25+ "NHS_NUMBER" : "3456789012" ,
26+ "ATTRIBUTE_TYPE" : "COHORTS" ,
27+ "COHORT_MEMBERSHIPS" : [{"COHORT_LABEL" : "16+_covid" , "DATE_JOINED" : "2025-01-01" }],
28+ },
2129 ]
2230 file_path = tmp_path / "test.json"
2331 with open (file_path , "w" ) as f :
@@ -36,36 +44,41 @@ def test_script_cli_end_to_end(test_data_dir):
3644 dynamo_table = f"api-{ env } -datastore"
3745
3846 s3 = boto3 .client ("s3" , region_name = region )
39- s3 .create_bucket (
40- Bucket = s3_bucket ,
41- CreateBucketConfiguration = {"LocationConstraint" : region }
42- )
47+ s3 .create_bucket (Bucket = s3_bucket , CreateBucketConfiguration = {"LocationConstraint" : region })
4348
4449 dynamodb = boto3 .client ("dynamodb" , region_name = region )
4550 dynamodb .create_table (
4651 TableName = dynamo_table ,
4752 KeySchema = [
4853 {"AttributeName" : "NHS_NUMBER" , "KeyType" : "HASH" },
49- {"AttributeName" : "ATTRIBUTE_TYPE" , "KeyType" : "RANGE" }
54+ {"AttributeName" : "ATTRIBUTE_TYPE" , "KeyType" : "RANGE" },
5055 ],
5156 AttributeDefinitions = [
5257 {"AttributeName" : "NHS_NUMBER" , "AttributeType" : "S" },
53- {"AttributeName" : "ATTRIBUTE_TYPE" , "AttributeType" : "S" }
58+ {"AttributeName" : "ATTRIBUTE_TYPE" , "AttributeType" : "S" },
5459 ],
55- BillingMode = "PAY_PER_REQUEST"
60+ BillingMode = "PAY_PER_REQUEST" ,
5661 )
5762
5863 # Act
59- run_upload ([
60- "--env" , env ,
61- "--upload-s3" , str (data_dir ),
62- "--upload-dynamo" , str (data_dir ),
63- "--region" , region ,
64- "--s3-bucket" , s3_bucket ,
65- "--dynamo-table" , dynamo_table
66- ])
64+ run_upload (
65+ [
66+ "--env" ,
67+ env ,
68+ "--upload-s3" ,
69+ str (data_dir ),
70+ "--upload-dynamo" ,
71+ str (data_dir ),
72+ "--region" ,
73+ region ,
74+ "--s3-bucket" ,
75+ s3_bucket ,
76+ "--dynamo-table" ,
77+ dynamo_table ,
78+ ]
79+ )
6780
68- key = f "manual-uploads/test.json"
81+ key = "manual-uploads/test.json"
6982 obj = s3 .get_object (Bucket = s3_bucket , Key = key )
7083 body = obj ["Body" ].read ().decode ("utf-8" )
7184 uploaded_s3_data = [json .loads (line ) for line in body .splitlines () if line .strip ()]
@@ -74,7 +87,7 @@ def test_script_cli_end_to_end(test_data_dir):
7487 for expected_item in expected_data :
7588 key = {
7689 "NHS_NUMBER" : {"S" : expected_item ["NHS_NUMBER" ]},
77- "ATTRIBUTE_TYPE" : {"S" : expected_item ["ATTRIBUTE_TYPE" ]}
90+ "ATTRIBUTE_TYPE" : {"S" : expected_item ["ATTRIBUTE_TYPE" ]},
7891 }
7992 response = dynamodb .get_item (TableName = dynamo_table , Key = key )
8093 item = response .get ("Item" )
0 commit comments