|
11 | 11 |
|
12 | 12 | with patch("os.environ", MOCK_ENVIRONMENT_DICT): |
13 | 13 | from errors import NoOperationPermissions, InvalidHeaders |
14 | | - from file_level_validation import validate_content_headers, validate_action_flag_permissions |
| 14 | + from file_level_validation import validate_content_headers, get_permitted_operations |
15 | 15 |
|
16 | 16 |
|
17 | 17 | test_file = MockFileDetails.rsv_emis |
@@ -43,80 +43,56 @@ def test_validate_content_headers(self): |
43 | 43 | with self.assertRaises(InvalidHeaders): |
44 | 44 | validate_content_headers(test_data) |
45 | 45 |
|
46 | | - def test_validate_action_flag_permissions(self): |
47 | | - """ |
48 | | - Tests that validate_action_flag_permissions returns True if supplier has permissions to perform at least one |
49 | | - of the requested CRUD operations for the given vaccine type, and False otherwise |
50 | | - """ |
| 46 | + def test_get_permitted_operations(self): |
51 | 47 | # Set up test file content. Note that ValidFileContent has action flags in lower case |
52 | | - valid_file_content = ValidMockFileContent.with_new_and_update |
53 | | - valid_content_new_and_update_lowercase = valid_file_content |
54 | | - valid_content_new_and_update_uppercase = valid_file_content.replace("new", "NEW").replace("update", "UPDATE") |
55 | | - valid_content_new_and_update_mixedcase = valid_file_content.replace("new", "New").replace("update", "uPdAte") |
56 | | - valid_content_new_and_delete_lowercase = valid_file_content.replace("update", "delete") |
57 | | - valid_content_update_and_delete_lowercase = valid_file_content.replace("new", "delete").replace( |
58 | | - "update", "UPDATE" |
59 | | - ) |
60 | 48 |
|
61 | 49 | # Case: Supplier has permissions to perform at least one of the requested operations |
62 | 50 | # Test case tuples are stuctured as (vaccine_type, vaccine_permissions, file_content, expected_output) |
63 | 51 | test_cases = [ |
64 | 52 | # FLU, full permissions, lowercase action flags |
65 | | - ("FLU", ["FLU.CRUD"], valid_content_new_and_update_lowercase, {"CREATE", "UPDATE", "DELETE"}), |
| 53 | + ("FLU", ["FLU.CRUD"], {"CREATE", "UPDATE", "DELETE"}), |
66 | 54 | # FLU, partial permissions, uppercase action flags |
67 | | - ("FLU", ["FLU.C"], valid_content_new_and_update_uppercase, {"CREATE"}), |
| 55 | + ("FLU", ["FLU.C"], {"CREATE"}), |
68 | 56 | # FLU, full permissions, mixed case action flags |
69 | | - ("FLU", ["FLU.CRUD"], valid_content_new_and_update_mixedcase, {"CREATE", "UPDATE", "DELETE"}), |
| 57 | + ("FLU", ["FLU.CRUD"], {"CREATE", "UPDATE", "DELETE"}), |
70 | 58 | # FLU, partial permissions (create) |
71 | | - ("FLU", ["FLU.D", "FLU.C"], valid_content_new_and_update_lowercase, {"CREATE", "DELETE"}), |
| 59 | + ("FLU", ["FLU.D", "FLU.C"], {"CREATE", "DELETE"}), |
72 | 60 | # FLU, partial permissions (update) |
73 | | - ("FLU", ["FLU.U"], valid_content_new_and_update_lowercase, {"UPDATE"}), |
| 61 | + ("FLU", ["FLU.U"], {"UPDATE"}), |
74 | 62 | # FLU, partial permissions (delete) |
75 | | - ("FLU", ["FLU.D"], valid_content_new_and_delete_lowercase, {"DELETE"}), |
| 63 | + ("FLU", ["FLU.D"], {"DELETE"}), |
76 | 64 | # COVID19, full permissions |
77 | | - ("COVID19", ["COVID19.CRUD"], valid_content_new_and_delete_lowercase, {"CREATE", "UPDATE", "DELETE"}), |
| 65 | + ("COVID19", ["COVID19.CRUD"], {"CREATE", "UPDATE", "DELETE"}), |
78 | 66 | # COVID19, partial permissions |
79 | | - ("COVID19", ["COVID19.U"], valid_content_update_and_delete_lowercase, {"UPDATE"}), |
| 67 | + ("COVID19", ["COVID19.U"], {"UPDATE"}), |
80 | 68 | # RSV, full permissions |
81 | | - ("RSV", ["RSV.CRUD"], valid_content_new_and_delete_lowercase, {"CREATE", "UPDATE", "DELETE"}), |
| 69 | + ("RSV", ["RSV.CRUD"], {"CREATE", "UPDATE", "DELETE"}), |
82 | 70 | # RSV, partial permissions |
83 | | - ("RSV", ["RSV.U"], valid_content_update_and_delete_lowercase, {"UPDATE"}), |
| 71 | + ("RSV", ["RSV.U"], {"UPDATE"}), |
84 | 72 | # RSV, full permissions, mixed case action flags |
85 | | - ("RSV", ["RSV.CRUD"], valid_content_new_and_update_mixedcase, {"CREATE", "UPDATE", "DELETE"}), |
| 73 | + ("RSV", ["RSV.CRUD"], {"CREATE", "UPDATE", "DELETE"}), |
86 | 74 | ] |
87 | 75 |
|
88 | | - for vaccine_type, vaccine_permissions, file_content, expected_output in test_cases: |
| 76 | + for vaccine_type, vaccine_permissions, expected_output in test_cases: |
89 | 77 | with self.subTest(f"Vaccine_type {vaccine_type} - permissions {vaccine_permissions}"): |
90 | 78 | self.assertEqual( |
91 | | - validate_action_flag_permissions("TEST_SUPPLIER", vaccine_type, vaccine_permissions, file_content), |
| 79 | + get_permitted_operations("TEST_SUPPLIER", vaccine_type, vaccine_permissions), |
92 | 80 | expected_output, |
93 | 81 | ) |
94 | 82 |
|
95 | 83 | # Case: Supplier has no permissions to perform any of the requested operations |
96 | 84 | # Test case tuples are stuctured as (vaccine_type, vaccine_permissions, file_content) |
97 | 85 | invalid_cases = [ |
98 | | - # FLU, no permissions |
99 | | - ("FLU", ["FLU.U", "COVID19.CRUDS"], valid_content_new_and_delete_lowercase), |
100 | 86 | # COVID19, no permissions |
101 | | - ("COVID19", ["FLU.C", "FLU.U"], valid_content_update_and_delete_lowercase), |
102 | | - # RSV, no permissions |
103 | | - ("RSV", ["FLU.C", "FLU.U"], valid_content_update_and_delete_lowercase), |
| 87 | + ("COVID19", ["FLU.CRUDS", "RSV.CUD"]), |
| 88 | + # RSV, no valid permissions |
| 89 | + ("RSV", ["FLU.C", "RSV.XYZ"]), |
104 | 90 | ] |
105 | 91 |
|
106 | | - for vaccine_type, vaccine_permissions, file_content in invalid_cases: |
| 92 | + for vaccine_type, vaccine_permissions in invalid_cases: |
107 | 93 | with self.subTest(): |
108 | 94 | with self.assertRaises(NoOperationPermissions): |
109 | | - validate_action_flag_permissions("TEST_SUPPLIER", vaccine_type, vaccine_permissions, file_content) |
110 | | - |
111 | | - no_flag_cases = [ |
112 | | - ("FLU", ["FLU.C"], valid_file_content.replace("new", "").replace("update", "")), |
113 | | - ("COVID19", ["COVID19.CRUD"], valid_file_content.replace("new", "INVALID").replace("update", "")), |
114 | | - ] |
115 | | - |
116 | | - for vaccine_type, permissions, file_content in no_flag_cases: |
117 | | - with self.subTest(f"{vaccine_type} with invalid or missing ACTION_FLAGs"): |
118 | | - result = validate_action_flag_permissions("TEST_SUPPLIER", vaccine_type, permissions, file_content) |
119 | | - self.assertEqual(result, set()) |
| 95 | + get_permitted_operations("TEST_SUPPLIER", vaccine_type, vaccine_permissions) |
120 | 96 |
|
121 | 97 |
|
122 | 98 | if __name__ == "__main__": |
|
0 commit comments