diff options
Diffstat (limited to 'chimere/tests.py')
-rw-r--r-- | chimere/tests.py | 132 |
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)) |