@@ -24,154 +24,155 @@ def mock_env_vars():
2424 yield
2525
2626
27- class TestHandler :
27+ @patch ("lambdas.seed_sandbox.index.seed_sandbox_table" )
28+ @patch ("lambdas.seed_sandbox.index.delete_all_table_items" )
29+ def test_single_table_reset_success (
30+ mock_delete , mock_seed , mock_lambda_context , mock_env_vars
31+ ):
32+ mock_delete .return_value = 10
33+ mock_seed .return_value = {"successful" : 8 , "attempted" : 8 , "failed" : 0 }
34+
35+ result = handler ({}, mock_lambda_context )
36+
37+ assert result ["statusCode" ] == 200
38+ body = json .loads (result ["body" ])
39+ assert body ["message" ] == "Successfully reset 1 table(s)"
40+ assert body ["tables_processed" ] == 1
41+ assert body ["tables_succeeded" ] == 1
42+ assert body ["tables_failed" ] == 0
43+ assert len (body ["results" ]) == 1
44+ assert body ["results" ][0 ]["table_name" ] == "test-table"
45+ assert body ["results" ][0 ]["status" ] == "success"
46+ assert body ["results" ][0 ]["pointers_deleted" ] == 10
47+ assert body ["results" ][0 ]["pointers_created" ] == 8
48+
49+ mock_delete .assert_called_once_with (table_name = "test-table" )
50+ mock_seed .assert_called_once_with (
51+ table_name = "test-table" , pointers_per_type = 2 , force = True , write_csv = False
52+ )
53+
2854
29- @patch ("lambdas.seed_sandbox.index.seed_sandbox_table" )
30- @patch ("lambdas.seed_sandbox.index.delete_all_table_items" )
31- def test_single_table_reset_success (
32- self , mock_delete , mock_seed , mock_lambda_context , mock_env_vars
55+ @patch ("lambdas.seed_sandbox.index.seed_sandbox_table" )
56+ @patch ("lambdas.seed_sandbox.index.delete_all_table_items" )
57+ def test_multiple_table_reset_success (
58+ mock_delete , mock_seed , mock_lambda_context , mock_env_vars
59+ ):
60+ with patch .dict (
61+ "os.environ" ,
62+ {"TABLE_NAMES" : "table1,table2,table3" , "POINTERS_PER_TYPE" : "5" },
3363 ):
34- mock_delete .return_value = 10
35- mock_seed .return_value = {"successful" : 8 , "attempted" : 8 , "failed" : 0 }
64+ mock_delete .return_value = 15
65+ mock_seed .return_value = {"successful" : 20 , "attempted" : 20 , "failed" : 0 }
3666
3767 result = handler ({}, mock_lambda_context )
3868
3969 assert result ["statusCode" ] == 200
4070 body = json .loads (result ["body" ])
41- assert body ["message" ] == "Successfully reset 1 table(s)"
42- assert body ["tables_processed" ] == 1
43- assert body ["tables_succeeded" ] == 1
71+ assert body ["message" ] == "Successfully reset 3 table(s)"
72+ assert body ["tables_processed" ] == 3
73+ assert body ["tables_succeeded" ] == 3
4474 assert body ["tables_failed" ] == 0
45- assert len (body ["results" ]) == 1
46- assert body ["results" ][0 ]["table_name" ] == "test-table"
47- assert body ["results" ][0 ]["status" ] == "success"
48- assert body ["results" ][0 ]["pointers_deleted" ] == 10
49- assert body ["results" ][0 ]["pointers_created" ] == 8
50-
51- mock_delete .assert_called_once_with (table_name = "test-table" )
52- mock_seed .assert_called_once_with (
53- table_name = "test-table" , pointers_per_type = 2 , force = True , write_csv = False
54- )
55-
56- @patch ("lambdas.seed_sandbox.index.seed_sandbox_table" )
57- @patch ("lambdas.seed_sandbox.index.delete_all_table_items" )
58- def test_multiple_table_reset_success (
59- self , mock_delete , mock_seed , mock_lambda_context , mock_env_vars
75+ assert len (body ["results" ]) == 3
76+ assert all (r ["status" ] == "success" for r in body ["results" ])
77+
78+ assert mock_delete .call_count == 3
79+ assert mock_seed .call_count == 3
80+
81+
82+ @patch ("lambdas.seed_sandbox.index.seed_sandbox_table" )
83+ @patch ("lambdas.seed_sandbox.index.delete_all_table_items" )
84+ def test_partial_failure (mock_delete , mock_seed , mock_lambda_context ):
85+ with patch .dict (
86+ "os.environ" ,
87+ {"TABLE_NAMES" : "table1,table2,table3" , "POINTERS_PER_TYPE" : "2" },
6088 ):
61- with patch .dict (
62- "os.environ" ,
63- {"TABLE_NAMES" : "table1,table2,table3" , "POINTERS_PER_TYPE" : "5" },
64- ):
65- mock_delete .return_value = 15
66- mock_seed .return_value = {"successful" : 20 , "attempted" : 20 , "failed" : 0 }
67-
68- result = handler ({}, mock_lambda_context )
69-
70- assert result ["statusCode" ] == 200
71- body = json .loads (result ["body" ])
72- assert body ["message" ] == "Successfully reset 3 table(s)"
73- assert body ["tables_processed" ] == 3
74- assert body ["tables_succeeded" ] == 3
75- assert body ["tables_failed" ] == 0
76- assert len (body ["results" ]) == 3
77- assert all (r ["status" ] == "success" for r in body ["results" ])
78-
79- assert mock_delete .call_count == 3
80- assert mock_seed .call_count == 3
81-
82- @patch ("lambdas.seed_sandbox.index.seed_sandbox_table" )
83- @patch ("lambdas.seed_sandbox.index.delete_all_table_items" )
84- def test_partial_failure (self , mock_delete , mock_seed , mock_lambda_context ):
85- with patch .dict (
86- "os.environ" ,
87- {"TABLE_NAMES" : "table1,table2,table3" , "POINTERS_PER_TYPE" : "2" },
88- ):
89- # First and third tables succeed, second fails during delete
90- mock_delete .side_effect = [10 , Exception ("Access denied" ), 5 ]
91- mock_seed .side_effect = [
92- {"successful" : 8 , "attempted" : 8 , "failed" : 0 },
93- {"successful" : 8 , "attempted" : 8 , "failed" : 0 },
94- ]
95-
96- result = handler ({}, mock_lambda_context )
97-
98- assert result ["statusCode" ] == 207
99- body = json .loads (result ["body" ])
100- assert "Failed to reset 1 table(s): table2" in body ["message" ]
101- assert body ["tables_processed" ] == 3
102- assert body ["tables_succeeded" ] == 2
103- assert body ["tables_failed" ] == 1
104- assert len (body ["results" ]) == 3
105- assert body ["results" ][0 ]["status" ] == "success"
106- assert body ["results" ][1 ]["status" ] == "failed"
107- assert body ["results" ][1 ]["error" ] == "Access denied"
108- assert body ["results" ][2 ]["status" ] == "success"
109-
110- @patch ("lambdas.seed_sandbox.index.seed_sandbox_table" )
111- @patch ("lambdas.seed_sandbox.index.delete_all_table_items" )
112- def test_complete_failure (self , mock_delete , mock_seed , mock_lambda_context ):
113- with patch .dict (
114- "os.environ" , {"TABLE_NAMES" : "table1,table2" , "POINTERS_PER_TYPE" : "2" }
115- ):
116- mock_delete .side_effect = Exception ("Database error" )
117-
118- result = handler ({}, mock_lambda_context )
119-
120- assert result ["statusCode" ] == 500
121- body = json .loads (result ["body" ])
122- assert "Failed to reset 2 table(s)" in body ["message" ]
123- assert body ["tables_processed" ] == 2
124- assert body ["tables_succeeded" ] == 0
125- assert body ["tables_failed" ] == 2
126-
127- def test_missing_table_names_env_var (self , mock_lambda_context ):
128- with patch .dict ("os.environ" , {}, clear = True ):
129- result = handler ({}, mock_lambda_context )
130-
131- assert result ["statusCode" ] == 500
132- body = json .loads (result ["body" ])
133- assert body ["error" ] == "TABLE_NAMES environment variable is required"
134-
135- def test_empty_table_names (self , mock_lambda_context ):
136- with patch .dict ("os.environ" , {"TABLE_NAMES" : " " , "POINTERS_PER_TYPE" : "2" }):
137- result = handler ({}, mock_lambda_context )
138-
139- assert result ["statusCode" ] == 500
140- body = json .loads (result ["body" ])
141- assert body ["error" ] == "No valid table names provided in TABLE_NAMES"
142-
143- @patch ("lambdas.seed_sandbox.index.seed_sandbox_table" )
144- @patch ("lambdas.seed_sandbox.index.delete_all_table_items" )
145- def test_table_names_with_whitespace (
146- self , mock_delete , mock_seed , mock_lambda_context
89+ # First and third tables succeed, second fails during delete
90+ mock_delete .side_effect = [10 , Exception ("Access denied" ), 5 ]
91+ mock_seed .side_effect = [
92+ {"successful" : 8 , "attempted" : 8 , "failed" : 0 },
93+ {"successful" : 8 , "attempted" : 8 , "failed" : 0 },
94+ ]
95+
96+ result = handler ({}, mock_lambda_context )
97+
98+ assert result ["statusCode" ] == 207
99+ body = json .loads (result ["body" ])
100+ assert "Failed to reset 1 table(s): table2" in body ["message" ]
101+ assert body ["tables_processed" ] == 3
102+ assert body ["tables_succeeded" ] == 2
103+ assert body ["tables_failed" ] == 1
104+ assert len (body ["results" ]) == 3
105+ assert body ["results" ][0 ]["status" ] == "success"
106+ assert body ["results" ][1 ]["status" ] == "failed"
107+ assert body ["results" ][1 ]["error" ] == "Access denied"
108+ assert body ["results" ][2 ]["status" ] == "success"
109+
110+
111+ @patch ("lambdas.seed_sandbox.index.seed_sandbox_table" )
112+ @patch ("lambdas.seed_sandbox.index.delete_all_table_items" )
113+ def test_complete_failure (mock_delete , mock_seed , mock_lambda_context ):
114+ with patch .dict (
115+ "os.environ" , {"TABLE_NAMES" : "table1,table2" , "POINTERS_PER_TYPE" : "2" }
147116 ):
148- with patch .dict (
149- "os.environ" ,
150- {"TABLE_NAMES" : " table1 , table2 , " , "POINTERS_PER_TYPE" : "2" },
151- ):
152- mock_delete .return_value = 5
153- mock_seed .return_value = {"successful" : 4 , "attempted" : 4 , "failed" : 0 }
154-
155- result = handler ({}, mock_lambda_context )
156-
157- assert result ["statusCode" ] == 200
158- body = json .loads (result ["body" ])
159- assert body ["tables_processed" ] == 2
160- assert body ["results" ][0 ]["table_name" ] == "table1"
161- assert body ["results" ][1 ]["table_name" ] == "table2"
162-
163- @patch ("lambdas.seed_sandbox.index.seed_sandbox_table" )
164- @patch ("lambdas.seed_sandbox.index.delete_all_table_items" )
165- def test_seed_with_failures (
166- self , mock_delete , mock_seed , mock_lambda_context , mock_env_vars
117+ mock_delete .side_effect = Exception ("Database error" )
118+
119+ result = handler ({}, mock_lambda_context )
120+
121+ assert result ["statusCode" ] == 500
122+ body = json .loads (result ["body" ])
123+ assert "Failed to reset 2 table(s)" in body ["message" ]
124+ assert body ["tables_processed" ] == 2
125+ assert body ["tables_succeeded" ] == 0
126+ assert body ["tables_failed" ] == 2
127+
128+
129+ def test_missing_table_names_env_var (mock_lambda_context ):
130+ with patch .dict ("os.environ" , {}, clear = True ):
131+ result = handler ({}, mock_lambda_context )
132+
133+ assert result ["statusCode" ] == 500
134+ body = json .loads (result ["body" ])
135+ assert body ["error" ] == "TABLE_NAMES environment variable is required"
136+
137+
138+ def test_empty_table_names (mock_lambda_context ):
139+ with patch .dict ("os.environ" , {"TABLE_NAMES" : " " , "POINTERS_PER_TYPE" : "2" }):
140+ result = handler ({}, mock_lambda_context )
141+
142+ assert result ["statusCode" ] == 500
143+ body = json .loads (result ["body" ])
144+ assert body ["error" ] == "No valid table names provided in TABLE_NAMES"
145+
146+
147+ @patch ("lambdas.seed_sandbox.index.seed_sandbox_table" )
148+ @patch ("lambdas.seed_sandbox.index.delete_all_table_items" )
149+ def test_table_names_with_whitespace (mock_delete , mock_seed , mock_lambda_context ):
150+ with patch .dict (
151+ "os.environ" ,
152+ {"TABLE_NAMES" : " table1 , table2 , " , "POINTERS_PER_TYPE" : "2" },
167153 ):
168154 mock_delete .return_value = 5
169- mock_seed .return_value = {"successful" : 6 , "attempted" : 8 , "failed" : 2 }
155+ mock_seed .return_value = {"successful" : 4 , "attempted" : 4 , "failed" : 0 }
170156
171157 result = handler ({}, mock_lambda_context )
172158
173159 assert result ["statusCode" ] == 200
174160 body = json .loads (result ["body" ])
175- assert body ["results" ][0 ]["pointers_created" ] == 6
176- assert body ["results" ][0 ]["pointers_attempted" ] == 8
177- assert body ["results" ][0 ]["pointers_failed" ] == 2
161+ assert body ["tables_processed" ] == 2
162+ assert body ["results" ][0 ]["table_name" ] == "table1"
163+ assert body ["results" ][1 ]["table_name" ] == "table2"
164+
165+
166+ @patch ("lambdas.seed_sandbox.index.seed_sandbox_table" )
167+ @patch ("lambdas.seed_sandbox.index.delete_all_table_items" )
168+ def test_seed_with_failures (mock_delete , mock_seed , mock_lambda_context , mock_env_vars ):
169+ mock_delete .return_value = 5
170+ mock_seed .return_value = {"successful" : 6 , "attempted" : 8 , "failed" : 2 }
171+
172+ result = handler ({}, mock_lambda_context )
173+
174+ assert result ["statusCode" ] == 200
175+ body = json .loads (result ["body" ])
176+ assert body ["results" ][0 ]["pointers_created" ] == 6
177+ assert body ["results" ][0 ]["pointers_attempted" ] == 8
178+ assert body ["results" ][0 ]["pointers_failed" ] == 2
0 commit comments