combo/tests/test_maps_manager.py

112 lines
4.4 KiB
Python

# -*- coding: utf-8 -*-
import pytest
import mock
from django.contrib.auth.models import User
from combo.apps.maps.models import MapLayer
pytestmark = pytest.mark.django_db
def login(app, username='admin', password='admin'):
login_page = app.get('/login/')
login_form = login_page.forms[0]
login_form['username'] = username
login_form['password'] = password
resp = login_form.submit()
assert resp.status_int == 302
return app
def test_access(app, admin_user):
app = login(app)
resp = app.get('/manage/', status=200)
assert '/manage/maps/' in resp.text
def test_add_layer(app, admin_user):
MapLayer.objects.all().delete()
app = login(app)
resp = app.get('/manage/maps/', status=200)
resp = resp.click('New')
resp.forms[0]['label'] = 'Test'
resp.forms[0]['geojson_url'] = 'http://example.net/geojson'
assert resp.form['marker_colour'].value == '#0000FF'
resp.forms[0]['marker_colour'] = '#FFFFFF'
resp.forms[0]['icon'] = 'bicycle'
assert resp.form['icon_colour'].value == '#000000'
resp.form['icon_colour'] = '#FFFFFF'
resp = resp.forms[0].submit()
assert resp.location.endswith('/manage/maps/')
assert MapLayer.objects.count() == 1
layer = MapLayer.objects.get()
assert layer.label == 'Test'
assert layer.slug == 'test'
def test_edit_layer(app, admin_user):
test_add_layer(app, admin_user)
app = login(app)
resp = app.get('/manage/maps/', status=200)
resp = resp.click('Test')
assert '<li><span class="icon-ambulance"><label' in resp.text
resp.forms[0]['geojson_url'] = 'http://example.net/new_geojson'
resp = resp.forms[0].submit()
assert resp.location.endswith('/manage/maps/')
assert MapLayer.objects.count() == 1
layer = MapLayer.objects.get()
assert layer.geojson_url == 'http://example.net/new_geojson'
def test_delete_layer(app, admin_user):
test_add_layer(app, admin_user)
app = login(app)
resp = app.get('/manage/maps/', status=200)
resp = resp.click('remove')
assert 'Are you sure you want to delete this?' in resp.text
resp = resp.forms[0].submit()
assert resp.location.endswith('/manage/maps/')
assert MapLayer.objects.count() == 0
@mock.patch('combo.apps.maps.models.requests.get')
def test_download_geojson(mock_request, app, admin_user):
test_add_layer(app, admin_user)
layer = MapLayer.objects.get()
mocked_response = mock.Mock()
mock_request.GET = {}
mocked_response.json.return_value = [{'type': 'Feature',
'geometry': {'type': 'Point',
'coordinates': [2.3233688436448574, 48.83369263315934]},
'properties': {'property': 'property value'}}]
mocked_response.ok.return_value = True
mock_request.return_value = mocked_response
geojson = layer.get_geojson(mock_request)
assert len(geojson) > 0
for item in geojson:
assert item['type'] == 'Feature'
assert item['geometry']['type'] == 'Point'
assert item['geometry']['coordinates'] == [2.3233688436448574, 48.83369263315934]
assert item['properties']['layer']['identifier'] == layer.slug
assert item['properties']['layer']['icon'] == 'bicycle'
assert item['properties']['layer']['label'] == 'Test'
assert item['properties']['layer']['colour'] == '#FFFFFF'
assert item['properties']['layer']['icon_colour'] == '#FFFFFF'
mocked_response.json.return_value = {'type': 'FeatureCollection',
'features': [{'geometry': {'type': 'Point',
'coordinates': [2.3233688436448574, 48.83369263315934]},
'properties': {'property': 'a random value',
'display_fields': [('foo', 'bar')]}}
]
}
mocked_response.ok.return_value = True
mock_request.return_value = mocked_response
geojson = layer.get_geojson(mock_request)
assert len(geojson) > 0
for item in geojson:
assert item['geometry']['type'] == 'Point'
assert item['geometry']['coordinates'] == [2.3233688436448574, 48.83369263315934]
assert item['properties']['layer']['identifier'] == layer.slug
assert item['properties']['layer']['icon'] == 'bicycle'
assert item['properties']['layer']['label'] == 'Test'
assert item['properties']['layer']['colour'] == '#FFFFFF'
assert item['properties']['layer']['icon_colour'] == '#FFFFFF'