|
1 | 1 | import logging |
2 | 2 |
|
3 | | -from folio_migration_tools.migration_tasks.user_transformer import UserTransformer |
| 3 | +from folio_migration_tools.migration_tasks.user_transformer import ( |
| 4 | + UserTransformer, |
| 5 | + remove_empty_addresses, |
| 6 | + find_primary_addresses, |
| 7 | +) |
4 | 8 | from folio_uuid.folio_namespaces import FOLIONamespaces |
5 | 9 |
|
6 | 10 | LOGGER = logging.getLogger(__name__) |
@@ -121,3 +125,80 @@ def test_clean_user_no_valid_address_data(): |
121 | 125 | } |
122 | 126 | UserTransformer.clean_user(folio_user, "id") |
123 | 127 | assert "addresses" not in folio_user["personal"] |
| 128 | + |
| 129 | + |
| 130 | +def test_remove_empty_addresses_removes_empty(): |
| 131 | + folio_user = { |
| 132 | + "personal": { |
| 133 | + "addresses": [ |
| 134 | + {"id": "1", "addressTypeId": "type1", "primaryAddress": True}, |
| 135 | + {"id": "2", "addressLine1": "123 Main St", "primaryAddress": False}, |
| 136 | + {"id": "3", "addressLine2": "Apt 4", "addressTypeId": "type2"}, |
| 137 | + {"id": "4", "primaryAddress": False, "addressTypeId": "type3"}, |
| 138 | + ] |
| 139 | + } |
| 140 | + } |
| 141 | + result = remove_empty_addresses(folio_user) |
| 142 | + # Only address 2 and 3 have fields other than id, addressTypeId, primaryAddress |
| 143 | + assert len(result) == 2 |
| 144 | + assert any(a["id"] == "2" for a in result) |
| 145 | + assert any(a["id"] == "3" for a in result) |
| 146 | + |
| 147 | + |
| 148 | +def test_remove_empty_addresses_no_addresses(): |
| 149 | + folio_user = {"personal": {}} |
| 150 | + result = remove_empty_addresses(folio_user) |
| 151 | + assert result == [] |
| 152 | + |
| 153 | + |
| 154 | +def test_remove_empty_addresses_all_valid(): |
| 155 | + folio_user = { |
| 156 | + "personal": { |
| 157 | + "addresses": [ |
| 158 | + {"id": "1", "addressLine1": "A", "primaryAddress": True}, |
| 159 | + {"id": "2", "addressLine2": "B", "primaryAddress": False}, |
| 160 | + ] |
| 161 | + } |
| 162 | + } |
| 163 | + result = remove_empty_addresses(folio_user) |
| 164 | + assert len(result) == 2 |
| 165 | + |
| 166 | + |
| 167 | +def test_find_primary_addresses_sets_missing_to_false(): |
| 168 | + addresses = [ |
| 169 | + {"addressLine1": "A"}, |
| 170 | + {"addressLine1": "B", "primaryAddress": True}, |
| 171 | + {"addressLine1": "C", "primaryAddress": "True"}, |
| 172 | + {"addressLine1": "D", "primaryAddress": "False"}, |
| 173 | + ] |
| 174 | + primary = find_primary_addresses(addresses) |
| 175 | + assert len(primary) == 2 |
| 176 | + assert addresses[0]["primaryAddress"] is False |
| 177 | + assert addresses[3]["primaryAddress"] is False |
| 178 | + |
| 179 | + |
| 180 | +def test_find_primary_addresses_handles_bool_and_str(): |
| 181 | + addresses = [ |
| 182 | + {"addressLine1": "A", "primaryAddress": True}, |
| 183 | + {"addressLine1": "B", "primaryAddress": "true"}, |
| 184 | + {"addressLine1": "C", "primaryAddress": False}, |
| 185 | + {"addressLine1": "D", "primaryAddress": "False"}, |
| 186 | + ] |
| 187 | + primary = find_primary_addresses(addresses) |
| 188 | + assert len(primary) == 2 |
| 189 | + for addr in addresses: |
| 190 | + if addr["addressLine1"] in ["A", "B"]: |
| 191 | + assert addr["primaryAddress"] is True or addr["primaryAddress"] == "true" |
| 192 | + else: |
| 193 | + assert addr["primaryAddress"] is False |
| 194 | + |
| 195 | + |
| 196 | +def test_find_primary_addresses_all_missing(): |
| 197 | + addresses = [ |
| 198 | + {"addressLine1": "A"}, |
| 199 | + {"addressLine1": "B"}, |
| 200 | + ] |
| 201 | + primary = find_primary_addresses(addresses) |
| 202 | + assert len(primary) == 0 |
| 203 | + for addr in addresses: |
| 204 | + assert addr["primaryAddress"] is False |
0 commit comments