summaryrefslogtreecommitdiff
path: root/chimere/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/tests.py')
-rw-r--r--chimere/tests.py132
1 files changed, 107 insertions, 25 deletions
diff --git a/chimere/tests.py b/chimere/tests.py
index 3a3144e..e06b073 100644
--- a/chimere/tests.py
+++ b/chimere/tests.py
@@ -9,7 +9,7 @@ test_path = os.path.abspath(__file__)
test_dir_path = os.path.dirname(test_path) + os.sep
from django.conf import settings
-from django.contrib.auth.models import User
+from django.contrib.auth.models import User, Group
from django.contrib.gis.geos import GEOSGeometry
from django.contrib.messages.storage.fallback import FallbackStorage
from django.core.files import File
@@ -19,27 +19,12 @@ from django.test import TestCase
from django.test.client import Client
from chimere.admin import managed_modified, MarkerAdmin
-from chimere.models import Area, Icon, Importer, Category, SubCategory, Marker,\
- Route, News
-from chimere.forms import MarkerForm, AreaAdminForm
+from chimere.models import Icon, Importer, Category, SubCategory, Marker,\
+ Route, News, Map, MapUsers, MapGroups, PropertyModel
+from chimere.forms import MarkerForm, MapAdminForm
from chimere.templatetags.chimere_tags import display_news
from chimere.utils import ShapefileManager
-def areas_setup():
- area_1 = Area.objects.create(name='area 1', urn='area-1', order=1,
- available=True,
- upper_left_corner='SRID=4326;POINT(-4.907753 48.507656)',
- lower_right_corner='SRID=4326;POINT(-4.049447 48.279688)')
- area_2 = Area.objects.create(name='area 2', urn='area-2', order=2,
- available=True,
- upper_left_corner='SRID=4326;POINT(-3 47.5)',
- lower_right_corner='SRID=4326;POINT(-2.5 47)')
- area_3 = Area.objects.create(name='area 3', urn='area-3', order=3,
- available=True,
- upper_left_corner='SRID=4326;POINT(-1.5 1.5)',
- lower_right_corner='SRID=4326;POINT(1.5 -1.5)')
- return [area_1, area_2, area_3]
-
def subcategory_setup():
category = Category.objects.create(name='Main category',
available=True,
@@ -130,6 +115,48 @@ def route_setup(sub_categories=[]):
routes.append(route_2)
return routes
+def map_setup():
+ maps = []
+ maps.append(Map.objects.create(name='Map 1', available=True, order=1,
+ upper_left_corner='SRID=4326;POINT(-4.907753 48.507656)',
+ lower_right_corner='SRID=4326;POINT(-4.049447 48.279688)',
+ urn='map-1', default=False, public_read=True,
+ public_propose=True, public_write=False))
+ maps.append(Map.objects.create(name='Map 2', available=True, order=2,
+ upper_left_corner='SRID=4326;POINT(-3 47.5)',
+ lower_right_corner='SRID=4326;POINT(-2.5 47)',
+ urn='map-2', default=False, public_read=True,
+ public_propose=False, public_write=False))
+ maps.append(Map.objects.create(name='Map 3', available=True, order=3,
+ upper_left_corner='SRID=4326;POINT(-1.5 1.5)',
+ lower_right_corner='SRID=4326;POINT(1.5 -1.5)',
+ urn='map-3', default=False, public_read=False,
+ public_propose=False, public_write=False))
+ return maps
+
+def propertymodel_setup():
+ pms = []
+ pms.append(PropertyModel.objects.create(name='Address', order=10, available=False,
+ mandatory=False, slug='address', type='T'))
+ pms.append(PropertyModel.objects.create(name='City', order=20, available=False,
+ mandatory=False, slug='town', type='T'))
+ return pms
+
+def users_setup():
+ adminuser = User.objects.create_superuser('admin',
+ 'admin@test.com',
+ 'pass')
+ users = [adminuser]
+ users.append(User.objects.create_user('user1', 'user1@test.com',
+ 'pass'))
+ users.append(User.objects.create_user('user2', 'user2@test.com',
+ 'pass'))
+ groups = [Group.objects.create(name='groupname')]
+ users[2].groups.add(groups[0])
+ return users, groups
+
+areas_setup = users_setup
+
class ImporterTest:
def test_get(self):
nb_by_cat = {}
@@ -300,6 +327,21 @@ class GeoRSSImporterTest(TestCase, ImporterTest):
self.marker_importers = [(importer1, 1), (importer2, 32)]
+class CSVImporterTest(TestCase, ImporterTest):
+ def setUp(self):
+ subcategories = subcategory_setup()
+ pm = propertymodel_setup()
+ importer1 = Importer.objects.create(importer_type='CSV',
+ source=test_dir_path+'tests/test.csv')
+ importer1.categories.add(subcategories[0])
+ self.old_settings = settings.CHIMERE_NOMINATIM_FIELDS
+ settings.CHIMERE_NOMINATIM_FIELDS = {'street':'address',
+ 'city':'town', 'country':u'Great Britain'}
+ self.marker_importers = [(importer1, 2)]
+
+ def tearDown(self):
+ settings.CHIMERE_NOMINATIM_FIELDS = self.old_settings
+
class HtmlXsltImporterTest(TestCase, ImporterTest):
def setUp(self):
subcategories = subcategory_setup()
@@ -384,7 +426,7 @@ class MarkerFormTest(TestCase):
form = MarkerForm(data)
self.assertEqual(form.is_valid(), False)
-class AreaTest(TestCase):
+class MapTest(TestCase):
def setUp(self):
self.areas = areas_setup()
@@ -395,7 +437,7 @@ class AreaTest(TestCase):
response = self.client.get('/%s/' % area_1.urn)
self.assertRedirects(response, '/')
-class AreaAdminFormTest(TestCase):
+class MapAdminFormTest(TestCase):
def setUp(self):
self.areas = areas_setup()
@@ -405,7 +447,7 @@ class AreaAdminFormTest(TestCase):
area_1.save()
area_2.default = True
area_2.save()
- area_1 = Area.objects.get(urn=area_1.urn)
+ area_1 = Map.objects.get(urn=area_1.urn)
self.assertEqual(area_1.default, False)
def test_area_creation(self):
@@ -420,12 +462,12 @@ class AreaAdminFormTest(TestCase):
# order already given
data = base_data.copy()
data['order'] = self.areas[0].order
- form = AreaAdminForm(data)
+ form = MapAdminForm(data)
self.assertEqual(form.is_valid(), False)
# update an already existing area
data = base_data.copy()
data['order'] = self.areas[0].order
- form = AreaAdminForm(data, instance=self.areas[0])
+ form = MapAdminForm(data, instance=self.areas[0])
self.assertEqual(form.is_valid(), True)
# empty area
data = base_data.copy()
@@ -433,7 +475,7 @@ class AreaAdminFormTest(TestCase):
'upper_left_lon': 0,
'lower_right_lat': 0,
'lower_right_lon': 0})
- form = AreaAdminForm(data)
+ form = MapAdminForm(data)
self.assertEqual(form.is_valid(), False)
class DynamicCategoryTest(TestCase):
@@ -569,3 +611,43 @@ class RouteTest(TestCase):
route='SRID=4326;LINESTRING (30 10, 10 30, 40 40)',
has_associated_marker=False)
self.assertEqual(Marker.objects.filter(route=route_2).count(), 0)
+
+class PermissionTest(TestCase):
+ def setUp(self):
+ self.maps = map_setup()
+ self.users, self.groups = users_setup()
+ MapUsers.objects.create(map=self.maps[2], user=self.users[1], read=True,
+ propose=False, write=False)
+ MapGroups.objects.create(map=self.maps[2], group=self.groups[0],
+ read=True, propose=True, write=True)
+
+ def test_rights(self):
+ self.client.login(username=self.users[0].username, password='pass')
+ for urn, can_view, can_propose in [('map-1', True, True),
+ ('map-2', True, False),
+ ('map-3', False, False)]:
+ self.check_right(urn, can_view, can_propose, self.users[0].username)
+ self.client.login(username=self.users[1].username, password='pass')
+ for urn, can_view, can_propose in [('map-1', True, True),
+ ('map-2', True, False),
+ ('map-3', True, False)]:
+ self.check_right(urn, can_view, can_propose, self.users[1].username)
+ self.client.login(username=self.users[2].username, password='pass')
+ for urn, can_view, can_propose in [('map-1', True, True),
+ ('map-2', True, False),
+ ('map-3', True, True)]:
+ self.check_right(urn, can_view, can_propose, self.users[2].username)
+
+ def check_right(self, urn, can_view, can_propose, username):
+ url = reverse('chimere:index', args=[urn])
+ response = self.client.get(url)
+ status_code = 200 if can_view else 302
+ self.assertEqual(status_code, response.status_code,
+ msg='index for %s, %s: %s got where %s is attended' % (
+ username, urn, response.status_code, status_code))
+ url = reverse('chimere:edit', args=[urn+'/'])
+ status_code = 200 if can_propose else 302
+ response = self.client.get(url)
+ self.assertEqual(status_code, response.status_code,
+ msg='edit for %s, %s: %s got where %s is attended' % (
+ username, urn, response.status_code, status_code))