Skip to content

Commit db58787

Browse files
committed
Tests for webservices and models
1 parent 604c1f3 commit db58787

File tree

2 files changed

+406
-0
lines changed

2 files changed

+406
-0
lines changed

tests/models_test.py

Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
import sys
5+
sys.path.append('..')
6+
7+
import geoip2.models
8+
import unittest
9+
10+
11+
class TestModels(unittest.TestCase):
12+
13+
def test_omni_full(self):
14+
raw = {
15+
'city': {
16+
'confidence': 76,
17+
'geoname_id': 9876,
18+
'name': {'en': 'Minneapolis'},
19+
},
20+
'continent': {
21+
'continent_code': 'NA',
22+
'geoname_id': 42,
23+
'name': {'en': 'North America'},
24+
},
25+
'country': {
26+
'confidence': 99,
27+
'geoname_id': 1,
28+
'iso_3166_1_alpha_2': 'US',
29+
'iso_3166_1_alpha_3': 'USA',
30+
'name': {'en': 'United States of America'},
31+
},
32+
'location': {
33+
'accuracy_radius': 1500,
34+
'latitude': 44.98,
35+
'longitude': 93.2636,
36+
'metro_code': 765,
37+
'postal_code': '55401',
38+
'postal_confidence': 33,
39+
'time_zone': 'America/Chicago',
40+
},
41+
'region': {
42+
'confidence': 88,
43+
'geoname_id': 574635,
44+
'iso_3166_2': 'MN',
45+
'name': {'en': 'Minnesota'},
46+
},
47+
'registered_country': {
48+
'geoname_id': 2,
49+
'iso_3166_1_alpha_2': 'CA',
50+
'iso_3166_1_alpha_3': 'CAN',
51+
'name': {'en': 'Canada'},
52+
},
53+
'traits': {
54+
'autonomous_system_number': 1234,
55+
'autonomous_system_organization': 'AS Organization',
56+
'domain': 'example.com',
57+
'ip_address': '1.2.3.4',
58+
'is_anonymous_proxy': 0,
59+
'is_transparent_proxy': 1,
60+
'is_us_military': 1,
61+
'isp': 'Comcast',
62+
'network_speed': 'cable/DSL',
63+
'organization': 'Blorg',
64+
'user_type': 'college',
65+
},
66+
}
67+
68+
model = geoip2.models.Omni(raw)
69+
self.assertEqual(type(model), geoip2.models.Omni,
70+
'geoip2.models.Omni object')
71+
self.assertEqual(type(model.city), geoip2.records.City,
72+
'geoip2.records.City object')
73+
self.assertEqual(type(model.continent), geoip2.records.Continent,
74+
'geoip2.records.Continent object')
75+
self.assertEqual(type(model.country), geoip2.records.Country,
76+
'geoip2.records.Country object')
77+
self.assertEqual(type(model.registered_country),
78+
geoip2.records.Country,
79+
'geoip2.records.Country object')
80+
self.assertEqual(type(model.location), geoip2.records.Location,
81+
'geoip2.records.Location object')
82+
self.assertEqual(type(model.region), geoip2.records.Region,
83+
'geoip2.records.Regin object')
84+
self.assertEqual(type(model.traits), geoip2.records.Traits,
85+
'geoip2.records.Traits object')
86+
self.assertEqual(model.raw, raw, 'raw method returns raw input')
87+
88+
def test_omni_min(self):
89+
model = geoip2.models.Omni({'traits': {'ip_address': '5.6.7.8'}})
90+
self.assertEqual(type(model), geoip2.models.Omni,
91+
'geoip2.models.Omni object')
92+
self.assertEqual(type(model.city), geoip2.records.City,
93+
'geoip2.records.City object')
94+
self.assertEqual(type(model.continent), geoip2.records.Continent,
95+
'geoip2.records.Continent object')
96+
self.assertEqual(type(model.country), geoip2.records.Country,
97+
'geoip2.records.Country object')
98+
self.assertEqual(type(model.registered_country),
99+
geoip2.records.Country,
100+
'geoip2.records.Country object')
101+
self.assertEqual(type(model.location), geoip2.records.Location,
102+
'geoip2.records.Location object')
103+
self.assertEqual(type(model.region), geoip2.records.Region,
104+
'geoip2.records.Regin object')
105+
self.assertEqual(type(model.traits), geoip2.records.Traits,
106+
'geoip2.records.Traits object')
107+
108+
def test_city_full(self):
109+
raw = {
110+
'continent': {
111+
'continent_code': 'NA',
112+
'geoname_id': 42,
113+
'name': {'en': 'North America'},
114+
},
115+
'country': {
116+
'geoname_id': 1,
117+
'iso_3166_1_alpha_2': 'US',
118+
'iso_3166_1_alpha_3': 'USA',
119+
'name': {'en': 'United States of America'},
120+
},
121+
'registered_country': {
122+
'geoname_id': 2,
123+
'iso_3166_1_alpha_2': 'CA',
124+
'iso_3166_1_alpha_3': 'CAN',
125+
'name': {'en': 'Canada'},
126+
},
127+
'traits': {
128+
'ip_address': '1.2.3.4',
129+
'is_satellite_provider': True,
130+
},
131+
}
132+
model = geoip2.models.City(raw)
133+
self.assertEqual(type(model), geoip2.models.City,
134+
'geoip2.models.City object')
135+
self.assertEqual(type(model.city), geoip2.records.City,
136+
'geoip2.records.City object')
137+
self.assertEqual(type(model.continent), geoip2.records.Continent,
138+
'geoip2.records.Continent object')
139+
self.assertEqual(type(model.country), geoip2.records.Country,
140+
'geoip2.records.Country object')
141+
self.assertEqual(type(model.registered_country),
142+
geoip2.records.Country,
143+
'geoip2.records.Country object')
144+
self.assertEqual(type(model.location), geoip2.records.Location,
145+
'geoip2.records.Location object')
146+
self.assertEqual(type(model.region), geoip2.records.Region,
147+
'geoip2.records.Regin object')
148+
self.assertEqual(type(model.traits), geoip2.records.Traits,
149+
'geoip2.records.Traits object')
150+
self.assertEqual(model.raw, raw, 'raw method returns raw input')
151+
self.assertEqual(model.continent.geoname_id, 42,
152+
'continent geoname_id is 42')
153+
self.assertEqual(model.continent.continent_code, 'NA',
154+
'continent continent_code is NA')
155+
self.assertEqual(model.continent.names, {'en': 'North America'},
156+
'continent names is correct')
157+
self.assertEqual(model.continent.name, 'North America',
158+
'continent name is correct')
159+
self.assertEqual(model.country.geoname_id, 1,
160+
'country geoname_id is 1')
161+
self.assertEqual(model.country.iso_3166_1_alpha_2, 'US',
162+
'country iso_3166_1_alpha_2 is US')
163+
self.assertEqual(model.country.iso_3166_1_alpha_3, 'USA',
164+
'country iso_3166_1_alpha_3 is USA')
165+
self.assertEqual(model.country.names,
166+
{'en': 'United States of America'},
167+
'country names is correct')
168+
self.assertEqual(model.country.name, 'United States of America',
169+
'country name is correct')
170+
self.assertEqual(model.country.confidence, None,
171+
'country confidence is None')
172+
self.assertEqual(model.registered_country.iso_3166_1_alpha_2, 'CA',
173+
'registered_country iso_3166_1_alpha_2 is CA')
174+
self.assertEqual(model.registered_country.iso_3166_1_alpha_3, 'CAN',
175+
'registered_country iso_3166_1_alpha_3 is CAN')
176+
self.assertEqual(model.registered_country.names,
177+
{'en': 'Canada'},
178+
'registered_country names is correct')
179+
self.assertEqual(model.registered_country.name,
180+
'Canada',
181+
'registered_country name is correct')
182+
self.assertEqual(model.traits.is_anonymous_proxy, False,
183+
'traits is_anonymous_proxy returns False by default')
184+
self.assertEqual(model.traits.is_transparent_proxy, False,
185+
'traits is_anonymous_proxy returns False by default')
186+
self.assertEqual(model.traits.is_satellite_provider, True,
187+
'traits is_setellite_provider is True')
188+
self.assertEqual(model.raw, raw, 'raw method produces raw output')
189+
190+
def test_names(self):
191+
raw = {
192+
'continent': {
193+
'continent_code': 'NA',
194+
'geoname_id': 42,
195+
'name': {
196+
'en': 'North America',
197+
'zh-CN': '北美洲',
198+
},
199+
},
200+
'country': {
201+
'geoname_id': 1,
202+
'iso_3166_1_alpha_2': 'US',
203+
'iso_3166_1_alpha_3': 'USA',
204+
'name': {
205+
'en': 'United States of America',
206+
'fr': 'États-Unis',
207+
'zh-CN': '美国',
208+
},
209+
},
210+
'traits': {
211+
'ip_address': '1.2.3.4',
212+
},
213+
}
214+
215+
model = geoip2.models.Country(raw, languages=['fr', 'zh-CN', 'en'])
216+
self.assertEqual(model.continent.name, '北美洲',
217+
'continent name is in Chinese (no French available)')
218+
self.assertEqual(model.country.name, 'États-Unis',
219+
'country name is in French')
220+
221+
model = geoip2.models.Country(raw, languages=['fr', 'de'])
222+
self.assertEqual(model.continent.name, None,
223+
'continent name is undef (no fr or de available)')
224+
self.assertEqual(model.country.name, 'États-Unis',
225+
'country name is in French')
226+
227+
model = geoip2.models.Country(raw, languages=['de'])
228+
self.assertEqual(model.continent.name, None,
229+
'continent name is undef (no German available)')
230+
self.assertEqual(model.country.name, None,
231+
'country name is in None (no German available)')
232+
233+
234+
if __name__ == '__main__':
235+
unittest.main()

0 commit comments

Comments
 (0)