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)) | 
