Skip to content
This repository has been archived by the owner on Mar 15, 2018. It is now read-only.

Commit

Permalink
clean up carrier/region handling in latecustomization (bug 1216756)
Browse files Browse the repository at this point in the history
  • Loading branch information
Allen Short committed Oct 22, 2015
1 parent 7f6ba98 commit 5ebc2ec
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 4 deletions.
55 changes: 55 additions & 0 deletions mkt/latecustomization/tests/test_views.py
Expand Up @@ -92,6 +92,61 @@ def test_list_mcc(self):
eq_(len(data['objects']), 6)
self.check_list_data(data, apps, extensions)

def test_invalid_mcc(self):
apps, extensions = self.create_apps_extensions()
res = self.anon.get(reverse('api-v2:late-customization-list'),
{'mcc': 9999,
'mnc': 2})
eq_(res.status_code, 400)

def test_invalid_carrier(self):
apps, extensions = self.create_apps_extensions()
res = self.anon.get(reverse('api-v2:late-customization-list'),
{'carrier': 'bananaphone',
'region': 'de'})
eq_(res.status_code, 400)

def test_invalid_region(self):
apps, extensions = self.create_apps_extensions()
res = self.anon.get(reverse('api-v2:late-customization-list'),
{'carrier': 'deutsche_telekom',
'region': 'xx'})
eq_(res.status_code, 400)

def test_list_spn(self):
ap1 = make_packaged_app()
LateCustomizationItem.objects.create(
app=ap1, region=mkt.regions.REGIONS_DICT['de'].id,
carrier=mkt.carriers.CARRIER_MAP['congstar'].id)
ap2 = make_packaged_app()
LateCustomizationItem.objects.create(
app=ap2, region=mkt.regions.REGIONS_DICT['de'].id,
carrier=mkt.carriers.CARRIER_MAP['deutsche_telekom'].id)

res1 = self.anon.get(reverse('api-v2:late-customization-list'),
{'mcc': 262,
'mnc': 1,
'spn': 'congstar'})
eq_(res1.status_code, 200)
data = json.loads(res1.content)
eq_(len(data['objects']), 1)
eq_(data['objects'][0]['id'], ap1.pk)

res2 = self.anon.get(reverse('api-v2:late-customization-list'),
{'mcc': 262,
'mnc': 1})
eq_(res1.status_code, 200)
data = json.loads(res2.content)
eq_(len(data['objects']), 1)
eq_(data['objects'][0]['id'], ap2.pk)

def test_invalid_spn(self):
res1 = self.anon.get(reverse('api-v2:late-customization-list'),
{'mcc': 262,
'mnc': 1,
'spn': 'bananaphone'})
eq_(res1.status_code, 400)

def test_create(self):
OperatorPermission.objects.create(user=self.user, region=14, carrier=4)
ap = make_packaged_app()
Expand Down
22 changes: 18 additions & 4 deletions mkt/latecustomization/views.py
Expand Up @@ -53,16 +53,30 @@ def get_carrier_region(self, request):
elif 'mnc' in data and 'mcc' in data:
try:
carrier = MOBILE_CODES[int(data['mcc'])][int(data['mnc'])]
if isinstance(carrier, dict):
carrier = carrier.get(data.get('spn', '__default'))
if carrier is None:
raise ParseError('Invalid mcc/mnc/spn triplet')
region = REGIONS_BY_MCC[int(data['mcc'])]
except (KeyError, ValueError):
raise ParseError("Invalid mnc/mcc pair")
else:
raise ParseError("Both 'region' and 'carrier' or both "
"'mnc' and 'mcc' parameters must be provided")
carrier = (carrier if isinstance(carrier, (int, long)) else
CARRIER_MAP[carrier].id)
region = (region if isinstance(region, (int, long)) else
REGIONS_DICT[region].id)
try:
carrier = int(carrier)
except ValueError:
c = CARRIER_MAP.get(carrier)
if c is None:
raise ParseError("No carrier " + repr(carrier))
carrier = c.id
try:
region = int(region)
except ValueError:
r = REGIONS_DICT.get(region)
if r is None:
raise ParseError("No region " + repr(region))
region = r.id
return carrier, region

def list(self, request, *args, **kwargs):
Expand Down

0 comments on commit 5ebc2ec

Please sign in to comment.