Skip to content

Commit 859a6d8

Browse files
committed
feat: add state legislative districts support
- Add StateLegislativeDistrict model - Add state_legislative_districts and state_legislative_districts_next to GeocodioFields - Add unit and integration tests for state legislative districts
1 parent b826f82 commit 859a6d8

File tree

2 files changed

+68
-3
lines changed

2 files changed

+68
-3
lines changed

tests/e2e/test_api.py

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,4 +178,47 @@ def test_integration_batch_geocode(client):
178178
assert components.suffix == "Ave"
179179
assert components.city == "Denver"
180180
assert components.state == "CO"
181-
assert components.zip == "80203"
181+
assert components.zip == "80203"
182+
183+
184+
def test_integration_with_state_legislative_districts(client):
185+
"""Test real API call with state legislative district fields."""
186+
# Test address
187+
address = "1600 Pennsylvania Ave NW, Washington, DC"
188+
189+
# Request additional fields
190+
response = client.geocode(
191+
address,
192+
fields=["stateleg", "stateleg-next"]
193+
)
194+
195+
# Verify response structure
196+
assert response is not None
197+
assert len(response.results) > 0
198+
result = response.results[0]
199+
200+
# Verify fields data
201+
fields = result.fields
202+
assert fields is not None
203+
204+
# Check state legislative districts
205+
if fields.state_legislative_districts:
206+
district = fields.state_legislative_districts[0]
207+
assert district.name is not None
208+
assert isinstance(district.district_number, int)
209+
assert district.chamber in ["house", "senate"]
210+
if district.ocd_id:
211+
assert isinstance(district.ocd_id, str)
212+
if district.proportion:
213+
assert isinstance(district.proportion, float)
214+
215+
# Check upcoming state legislative districts
216+
if fields.state_legislative_districts_next:
217+
district = fields.state_legislative_districts_next[0]
218+
assert district.name is not None
219+
assert isinstance(district.district_number, int)
220+
assert district.chamber in ["house", "senate"]
221+
if district.ocd_id:
222+
assert isinstance(district.ocd_id, str)
223+
if district.proportion:
224+
assert isinstance(district.proportion, float)

tests/test_models.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22
from geocodio.models import (
33
AddressComponents, Timezone, CongressionalDistrict,
4-
GeocodioFields, GeocodingResult, GeocodingResponse, Location
4+
GeocodioFields, GeocodingResult, GeocodingResponse, Location, StateLegislativeDistrict
55
)
66

77

@@ -88,4 +88,26 @@ def test_geocoding_result_without_fields():
8888
assert result.fields is None
8989
assert result.address_components.city == "Arlington"
9090
assert result.location.lat == 38.886672
91-
assert result.location.lng == -77.094735
91+
assert result.location.lng == -77.094735
92+
93+
94+
def test_state_legislative_district_extras():
95+
# Test that extra fields are stored in extras
96+
data = {
97+
"name": "Virginia House District 8",
98+
"district_number": 8,
99+
"chamber": "house",
100+
"ocd_id": "ocd-division/country:us/state:va/sldl:8",
101+
"proportion": 1.0,
102+
"extra_field": "extra value"
103+
}
104+
105+
district = StateLegislativeDistrict.from_api(data)
106+
107+
assert district.name == "Virginia House District 8"
108+
assert district.district_number == 8
109+
assert district.chamber == "house"
110+
assert district.ocd_id == "ocd-division/country:us/state:va/sldl:8"
111+
assert district.proportion == 1.0
112+
assert district.get_extra("extra_field") == "extra value"
113+
assert district.get_extra("nonexistent", "default") == "default"

0 commit comments

Comments
 (0)