| """Tests for address converter.""" |
|
|
| from src import convert_address, batch_convert, ConversionStatus, MappingType |
|
|
|
|
| class TestMergedWard: |
| """Test wards that were merged into new wards.""" |
|
|
| def test_phuc_xa_merged_to_hong_ha(self): |
| result = convert_address("Phường Phúc Xá, Quận Ba Đình, Thành phố Hà Nội") |
| assert result.status == ConversionStatus.SUCCESS |
| assert result.mapping_type == MappingType.MERGED |
| assert result.new.ward == "Phường Hồng Hà" |
| assert result.new.province == "Thành phố Hà Nội" |
|
|
| def test_an_binh_can_tho(self): |
| result = convert_address("Phường An Bình, Quận Ninh Kiều, Thành phố Cần Thơ") |
| assert result.status == ConversionStatus.SUCCESS |
| assert result.new.province == "Thành phố Cần Thơ" |
|
|
|
|
| class TestUnchangedWard: |
| """Test wards that remain unchanged.""" |
|
|
| def test_tan_loc_can_tho(self): |
| result = convert_address("Phường Tân Lộc, Quận Thốt Nốt, Thành phố Cần Thơ") |
| assert result.status == ConversionStatus.SUCCESS |
| assert result.mapping_type == MappingType.UNCHANGED |
| assert result.new.ward == "Phường Tân Lộc" |
|
|
|
|
| class TestRenamedWard: |
| """Test wards that were renamed.""" |
|
|
| def test_long_hoa_renamed(self): |
| result = convert_address("Phường Long Hòa, Quận Bình Thủy, Thành phố Cần Thơ") |
| assert result.status == ConversionStatus.SUCCESS |
| assert result.mapping_type == MappingType.RENAMED |
| assert result.new.ward == "Phường Long Tuyền" |
|
|
|
|
| class TestDividedWard: |
| """Test wards that were split into multiple new wards.""" |
|
|
| def test_divided_selects_default(self): |
| result = convert_address("Xã Tân Thạnh, Huyện Thới Lai, Thành phố Cần Thơ") |
| assert result.status == ConversionStatus.SUCCESS |
| assert result.mapping_type == MappingType.DIVIDED |
|
|
|
|
| class TestAbbreviations: |
| """Test address abbreviation expansion.""" |
|
|
| def test_p_q_tp(self): |
| result = convert_address("P. Phúc Xá, Q. Ba Đình, TP. Hà Nội") |
| assert result.status == ConversionStatus.SUCCESS |
| assert result.new.ward == "Phường Hồng Hà" |
| assert result.new.province == "Thành phố Hà Nội" |
|
|
| def test_tp_shorthand(self): |
| result = convert_address("P.Phúc Xá, Q.Ba Đình, TP.Hà Nội") |
| assert result.status == ConversionStatus.SUCCESS |
| assert result.new.province == "Thành phố Hà Nội" |
|
|
|
|
| class TestPartialAddress: |
| """Test partial addresses (province-only, no ward).""" |
|
|
| def test_province_only(self): |
| result = convert_address("Thành phố Hà Nội") |
| assert result.status == ConversionStatus.PARTIAL |
| assert result.new.province == "Thành phố Hà Nội" |
|
|
| def test_unknown_province(self): |
| result = convert_address("Tỉnh Không Tồn Tại") |
| assert result.status == ConversionStatus.NOT_FOUND |
|
|
|
|
| class TestWithStreet: |
| """Test addresses that include street information.""" |
|
|
| def test_street_preserved(self): |
| result = convert_address("123 Phố Hàng Bông, Phường Phúc Xá, Quận Ba Đình, Thành phố Hà Nội") |
| assert result.status == ConversionStatus.SUCCESS |
| assert "123" in result.converted |
| assert "Phường Hồng Hà" in result.converted |
|
|
|
|
| class TestBatchConvert: |
| """Test batch conversion.""" |
|
|
| def test_batch(self): |
| addresses = [ |
| "Phường Phúc Xá, Quận Ba Đình, Thành phố Hà Nội", |
| "Phường Tân Lộc, Quận Thốt Nốt, Thành phố Cần Thơ", |
| "Tỉnh Không Tồn Tại", |
| ] |
| results = batch_convert(addresses) |
| assert len(results) == 3 |
| assert results[0].status == ConversionStatus.SUCCESS |
| assert results[1].status == ConversionStatus.SUCCESS |
| assert results[2].status == ConversionStatus.NOT_FOUND |
|
|
|
|
| class TestProvinceMapping: |
| """Test province-level conversions (63 -> 34).""" |
|
|
| def test_ha_noi_stays(self): |
| result = convert_address("Thành phố Hà Nội") |
| assert result.new.province == "Thành phố Hà Nội" |
|
|
| def test_merged_province(self): |
| |
| result = convert_address("Tỉnh Hà Giang") |
| assert result.status == ConversionStatus.PARTIAL |
| assert result.new.province |
|
|