#!/usr/bin/env python # -*- coding: utf-8 -*- import datetime import lxml.etree import os test_path = os.path.abspath(__file__) test_dir_path = os.path.dirname(test_path) + os.sep from django.conf import settings from django.core.urlresolvers import reverse from django.test import TestCase from chimere.models import Area, Icon, Importer, Category, SubCategory, Marker,\ Route from chimere.utils import ShapefileManager def area_setup(): area_1 = Area.objects.create(name='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)') return area_1 def subcategory_setup(): category = Category.objects.create(name='Main category', available=True, order=1, description='') icon = Icon.objects.create(name='Default icon', image='icons/marker.png', height=25, width=21) subcategory_1 = SubCategory.objects.create(category=category, name='Subcategory 1', available=True, icon=icon, order=1, item_type='M',) subcategory_2 = SubCategory.objects.create(category=category, name='Subcategory 2', available=True, icon=icon, order=1, item_type='M',) return [subcategory_1, subcategory_2] def marker_setup(sub_categories=[]): if not sub_categories: sub_categories = subcategory_setup() current_date = datetime.datetime.now() markers = [] marker_1 = Marker.objects.create(name="Marker 1", status='A', point='SRID=4326;POINT(-4.5 48.4)', available_date=current_date) marker_1.categories.add(sub_categories[0]) markers.append(marker_1) marker_2 = Marker.objects.create(name="Marker 2", status='A', point='SRID=4326;POINT(-3.5 48.4)', available_date=current_date) marker_2.categories.add(sub_categories[1]) markers.append(marker_2) marker_3 = Marker.objects.create(name="Marker 3", status='A', point='SRID=4326;POINT(-4.5 48.45)', available_date=current_date - datetime.timedelta(days=60)) marker_3.categories.add(sub_categories[1]) markers.append(marker_3) return markers class ImporterTest: def test_get(self): nb_by_cat = {} for importer, awaited_nb in self.marker_importers: nb, nb_updated, res = importer.manager.get() if awaited_nb == None: continue self.assertEqual(nb, awaited_nb) self.assertEqual(nb_updated, 0) for cat in importer.categories.all(): if cat not in nb_by_cat: nb_by_cat[cat] = 0 nb_by_cat[cat] += nb for cat in nb_by_cat: nb = max([Marker.objects.filter(categories__pk=cat.pk).count(), Route.objects.filter(categories__pk=cat.pk).count()]) self.assertEqual(nb_by_cat[cat], nb) # update for importer, awaited_nb in self.marker_importers: nb, nb_updated, res = importer.manager.get() if awaited_nb == None: continue self.assertEqual(nb, 0) class KMLImporterTest(TestCase, ImporterTest): def setUp(self): subcategory_1, subcategory_2 = subcategory_setup() importer1 = Importer.objects.create(importer_type='KML', source=test_dir_path+'tests/sample.kml', filtr="Category 1") importer1.categories.add(subcategory_1) importer2 = Importer.objects.create(importer_type='KML', source=test_dir_path+'tests/sample.kml', filtr="Subcategory 1") importer2.categories.add(subcategory_1) importer2.categories.add(subcategory_2) importer3 = Importer.objects.create(importer_type='KML', source=test_path+'tests/sample.kml', filtr="Subcategory 3") importer3.categories.add(subcategory_2) importer4 = Importer.objects.create(importer_type='KML', source=test_dir_path+'tests/sample.kml.zip', zipped=True) importer4.categories.add(subcategory_1) self.marker_importers = [(importer1, 1), (importer2, 2), (importer3, 0), (importer4, 4)] class ShapefileImporterTest(TestCase, ImporterTest): def setUp(self): subcategory_1, subcategory_2 = subcategory_setup() importer = Importer.objects.create(importer_type='SHP', source=test_dir_path+'tests/sample_nodes.shp.zip', zipped=True) importer.categories.add(subcategory_1) importer2 = Importer.objects.create(importer_type='SHP', source=test_dir_path+'tests/sample_ways.shp.zip', zipped=True) importer2.categories.add(subcategory_2) self.marker_importers = [(importer, 29), (importer2, 5),] self.markers = marker_setup() def test_export(self): filename, zip_stream = ShapefileManager.export(Marker.objects.all()) class OSMImporterTest(TestCase, ImporterTest): def setUp(self): subcategory_1, subcategory_2 = subcategory_setup() markers = marker_setup() importer1 = Importer.objects.create(importer_type='OSM', source=test_dir_path+'tests/sample_nodes.osm') importer1.categories.add(subcategory_1) importer2 = Importer.objects.create(importer_type='OSM', source=test_dir_path+'tests/sample_ways.osm') importer2.categories.add(subcategory_2) self.marker_importers = [(importer1, 19), (importer2, 8)] class FeedsTest(TestCase): def setUp(self): self.area = area_setup() self.markers = marker_setup() def test_rss(self): # global url = reverse('chimere:feeds-global') response = self.client.get(url) self.assertEqual(200, response.status_code) doc = lxml.etree.fromstring(response.content) self.assertEqual(int(doc.xpath('count(//item)')), len(self.markers))