passerelle/tests/test_arcgis_nancy.py

83 lines
2.5 KiB
Python

import os
import pytest
import mock
from django.core.urlresolvers import reverse
from django.contrib.contenttypes.models import ContentType
from passerelle.apps.arcgis.models import ArcGIS
from passerelle.compat import json_loads
from passerelle.base.models import ApiUser, AccessRight
TEST_BASE_DIR = os.path.join(os.path.dirname(__file__), 'data', 'nancy_arcgis')
def get_file_content(filename):
with open(os.path.join(TEST_BASE_DIR, filename), 'rb') as fd:
return fd.read()
class MockedRequestsResponse(mock.Mock):
def json(self):
return json_loads(self.content)
@pytest.fixture
def setup(db):
api = ApiUser.objects.create(username='all',
keytype='', key='')
arcgis = ArcGIS.objects.create(base_url='https://example.net/layer/0', slug='test')
obj_type = ContentType.objects.get_for_model(arcgis)
AccessRight.objects.create(codename='can_access', apiuser=api,
resource_type=obj_type, resource_pk=arcgis.pk)
return arcgis
@pytest.fixture
def url():
return reverse('generic-endpoint', kwargs={
'connector': 'arcgis', 'slug': 'test', 'endpoint': 'district'})
def test_get_district_parameters_error(app, setup, url):
resp = app.get(url, params={'lon': 'lon', 'lat': 'lat'}, status=400)
assert resp.json['err_desc'] == '<lon> and <lat> must be floats'
@mock.patch('passerelle.utils.Request.get')
def test_get_district(mocked_get, app, setup, url):
mocked_get.return_value = MockedRequestsResponse(
content=get_file_content('sigresponse.json'),
status_code=200)
resp = app.get(url, params={'lon': 6.172122, 'lat': 48.673836}, status=200)
data = resp.json['data']
assert data['id'] == 4
assert data['text'] == 'HAUSSONVILLE / BLANDAN / MON DESERT / SAURUPT'
@mock.patch('passerelle.utils.Request.get')
def test_get_all_district(mocked_get, app, setup, url):
mocked_get.return_value = MockedRequestsResponse(
content=get_file_content('all_districts.json'),
status_code=200)
resp = app.get(url, status=200)
data = resp.json['data']
assert len(data) == 7
@mock.patch('passerelle.utils.Request.get')
def test_no_district(mocked_get, app, setup, url):
mocked_get.return_value = MockedRequestsResponse(
content='{"features": []}',
status_code=200)
resp = app.get(url, status=200)
assert resp.json['err'] == 1
assert resp.json['err_class'] == 'passerelle.utils.jsonresponse.APIError'
assert resp.json['err_desc'] == 'No features found.'