@@ -57,6 +57,56 @@ class RegionDataConsistencyTest < ActiveSupport::TestCase
57
57
end
58
58
end
59
59
60
+ test "If a country has zip_prefixes, then every province has at least one prefix" do
61
+ Regions . all . select ( &:country? ) . each do |country |
62
+ next unless country . zones &.any? { |zone | zone . zip_prefixes . present? }
63
+
64
+ zones = country . zones . select do |zone |
65
+ zone . zip_prefixes . blank? && # zone has no prefixes
66
+ zone . parents . size == 1 # zone is not a shared zone, e.g. a special territory
67
+ end
68
+
69
+ # IT-OT (Olbia-Tempio) no longer exists, and was absorbed into IT-SS (Sassari).
70
+ # We need to add proper support for "deprecation" of zones.
71
+ # In the mean time, we have removed all prefixes from OT intentionally.
72
+ if country . legacy_code == "IT"
73
+ zones . reject! { |z | z . legacy_code == "OT" }
74
+ end
75
+
76
+ # IC (Canary Islands) are not defined outside of world.yml
77
+ # Ceuta is listed with code EA in world.yml, but may actually be CE. TBD.
78
+ if country . legacy_code == "ES"
79
+ zones . reject! { |zone | zone . iso_code == "IC" || zone . iso_code == "EA" }
80
+ end
81
+
82
+ assert_empty zones , "#{ country . legacy_name } has no prefix(es) for #{ zones . map ( &:legacy_code ) . join ( ", " ) } "
83
+ end
84
+ end
85
+
86
+ test "The first province listed for each of the zips_crossing_provinces must be where that prefix resolves" do
87
+ Regions . all . select ( &:country? ) . each do |country |
88
+ country . zips_crossing_provinces &.each do |zip , province_codes |
89
+ mapped_province = country . zone ( zip :)
90
+
91
+ assert_equal province_codes . first , mapped_province &.legacy_code , "Expected first province code for zip #{ zip } "
92
+ end
93
+ end
94
+ end
95
+
96
+ test "If a zip has two provinces, then both must be neighbours of each other" do
97
+ Regions . all . select ( &:country? ) . each do |country |
98
+ country . zips_crossing_provinces &.each do |zip , province_codes |
99
+ neighbours = province_codes . map do |zone_code |
100
+ country . zone ( code : zone_code ) &.neighbours
101
+ end . flatten . uniq
102
+
103
+ province_codes . each do |zone_code |
104
+ assert_includes neighbours , zone_code , "zip #{ zip } missing neighbour #{ zone_code } "
105
+ end
106
+ end
107
+ end
108
+ end
109
+
60
110
test "country codes match expected formats" do
61
111
Regions . all . select ( &:country? ) . each do |country |
62
112
assert_match ( /^([A-Z]{2})$/ , country . iso_code , "alpha2 for #{ country . legacy_name } " )
0 commit comments