|
8 | 8 | # Ensure environment variables are mocked before importing from src files |
9 | 9 | with patch.dict("os.environ", MOCK_ENVIRONMENT_DICT): |
10 | 10 | from models.errors import VaccineTypePermissionsError |
11 | | - from supplier_permissions import validate_vaccine_type_permissions |
| 11 | + from supplier_permissions import ( |
| 12 | + validate_permissions_for_extended_attributes_files, |
| 13 | + validate_vaccine_type_permissions, |
| 14 | + ) |
12 | 15 |
|
13 | 16 |
|
14 | 17 | class TestSupplierPermissions(TestCase): |
@@ -63,3 +66,84 @@ def test_validate_vaccine_type_permissions(self): |
63 | 66 | str(context.exception), |
64 | 67 | f"Initial file validation failed: TEST_SUPPLIER does not have permissions for {vaccine_type}", |
65 | 68 | ) |
| 69 | + |
| 70 | + def test_validate_permissions_for_extended_attributes_files_success(self): |
| 71 | + """Supplier with COVID CUD permissions should be accepted and identifier returned.""" |
| 72 | + with patch( |
| 73 | + "supplier_permissions.get_supplier_permissions_from_cache", |
| 74 | + return_value=["COVID.CUDS", "FLU.CRUDS"], |
| 75 | + ): |
| 76 | + result = validate_permissions_for_extended_attributes_files("COVID", "X8E5B") |
| 77 | + self.assertEqual(result, "X8E5B_COVID") |
| 78 | + |
| 79 | + def test_validate_permissions_for_extended_attributes_files_fail_no_covid(self): |
| 80 | + """Supplier without any COVID permissions should raise VaccineTypePermissionsError.""" |
| 81 | + with patch( |
| 82 | + "supplier_permissions.get_supplier_permissions_from_cache", |
| 83 | + return_value=["FLU.CRUDS"], |
| 84 | + ): |
| 85 | + with self.assertRaises(VaccineTypePermissionsError) as context: |
| 86 | + validate_permissions_for_extended_attributes_files("COVID", "X8E5B") |
| 87 | + self.assertEqual( |
| 88 | + str(context.exception), |
| 89 | + "Initial file validation failed: X8E5B does not have permissions for COVID", |
| 90 | + ) |
| 91 | + |
| 92 | + def test_validate_permissions_for_extended_attributes_files_fail_partial_ops(self): |
| 93 | + """Supplier with only partial COVID permissions (e.g., C only) should raise error as CUD required.""" |
| 94 | + # Note: Implementation checks only the first matching COVID entry's operation string. |
| 95 | + # Therefore, entries like COVID.CRUD (which includes C, U, D letters) will pass. |
| 96 | + # The following cases should fail because the first COVID entry lacks at least one of C/U/D. |
| 97 | + partial_permission_cases = [ |
| 98 | + ["COVID.C"], |
| 99 | + ["COVID.U"], |
| 100 | + ["COVID.D"], |
| 101 | + ["COVID.CU"], |
| 102 | + ["COVID.UD"], |
| 103 | + ["COVID.CD"], |
| 104 | + ["COVID.S"], # status only |
| 105 | + ] |
| 106 | + |
| 107 | + for permissions in partial_permission_cases: |
| 108 | + with self.subTest(permissions=permissions): |
| 109 | + with patch( |
| 110 | + "supplier_permissions.get_supplier_permissions_from_cache", |
| 111 | + return_value=permissions, |
| 112 | + ): |
| 113 | + with self.assertRaises(VaccineTypePermissionsError) as context: |
| 114 | + validate_permissions_for_extended_attributes_files("COVID", "X8E5B") |
| 115 | + self.assertEqual( |
| 116 | + str(context.exception), |
| 117 | + "Initial file validation failed: X8E5B does not have permissions for COVID", |
| 118 | + ) |
| 119 | + |
| 120 | + def test_validate_permissions_for_extended_attributes_files_multiple_entries(self): |
| 121 | + """Multiple COVID permission entries should pass only if the first matching COVID entry contains CUD.""" |
| 122 | + # Case: First entry has CUDS -> success |
| 123 | + with patch( |
| 124 | + "supplier_permissions.get_supplier_permissions_from_cache", |
| 125 | + return_value=["COVID.CUDS", "COVID.C"], |
| 126 | + ): |
| 127 | + result = validate_permissions_for_extended_attributes_files("COVID", "RAVS") |
| 128 | + self.assertEqual(result, "RAVS_COVID") |
| 129 | + |
| 130 | + # Case: First entry lacks CUD (even if later one has CUDS) -> fail |
| 131 | + with patch( |
| 132 | + "supplier_permissions.get_supplier_permissions_from_cache", |
| 133 | + return_value=["COVID.C", "COVID.CUDS"], |
| 134 | + ): |
| 135 | + with self.assertRaises(VaccineTypePermissionsError) as context: |
| 136 | + validate_permissions_for_extended_attributes_files("COVID", "RAVS") |
| 137 | + self.assertEqual( |
| 138 | + str(context.exception), |
| 139 | + "Initial file validation failed: RAVS does not have permissions for COVID", |
| 140 | + ) |
| 141 | + |
| 142 | + def test_validate_permissions_for_extended_attributes_files_crud_passes(self): |
| 143 | + """COVID.CRUD contains C, U, D letters and should be accepted by the current implementation.""" |
| 144 | + with patch( |
| 145 | + "supplier_permissions.get_supplier_permissions_from_cache", |
| 146 | + return_value=["COVID.CRUD"], |
| 147 | + ): |
| 148 | + result = validate_permissions_for_extended_attributes_files("COVID", "X8E5B") |
| 149 | + self.assertEqual(result, "X8E5B_COVID") |
0 commit comments