예제 #1
0
    def test_update_cache_version_wp_as_main_wp(self):
        waypoint1 = Waypoint(waypoint_type='summit')
        waypoint2 = Waypoint(waypoint_type='summit')
        waypoint3 = Waypoint(waypoint_type='summit')
        waypoint_unrelated = Waypoint(waypoint_type='summit')
        route = Route(main_waypoint=waypoint1, activities=['skitouring'])
        self.session.add_all(
            [waypoint1, waypoint2, waypoint3, waypoint_unrelated, route])
        self.session.flush()

        self.session.add(Association.create(waypoint1, route))
        self.session.add(Association.create(waypoint2, route))
        self.session.add(Association.create(waypoint3, waypoint2))
        self.session.flush()

        update_cache_version(waypoint1)
        cache_version_wp1 = self.session.query(CacheVersion).get(
            waypoint1.document_id)
        cache_version_wp2 = self.session.query(CacheVersion).get(
            waypoint2.document_id)
        cache_version_wp3 = self.session.query(CacheVersion).get(
            waypoint3.document_id)
        cache_version_route = self.session.query(CacheVersion).get(
            route.document_id)
        cache_version_untouched = self.session.query(CacheVersion).get(
            waypoint_unrelated.document_id)

        self.assertEqual(cache_version_wp1.version, 3)
        self.assertEqual(cache_version_wp2.version, 2)
        self.assertEqual(cache_version_wp3.version, 2)
        self.assertEqual(cache_version_route.version, 2)
        self.assertEqual(cache_version_untouched.version, 1)
예제 #2
0
    def test_geometry_update_optimization_4326(self):
        lat = 46.0
        geom1 = 'SRID=4326;POINT(' + str(lat) + ' 6.0)'
        waypoint_db = Waypoint(
            document_id=1, waypoint_type='summit', elevation=2203,
            geometry=DocumentGeometry(
                document_id=1, geom=geom1
            )
        )

        waypoint_in = Waypoint(
            document_id=1, waypoint_type='summit', elevation=1234,
            geometry=DocumentGeometry(
                geom='SRID=4326;POINT(' + str(lat + 10**(-8)) + ' 6.0)')
        )
        waypoint_db.update(waypoint_in)
        self.assertEqual(waypoint_db.geometry.geom, geom1)

        waypoint_in = Waypoint(
            document_id=1, waypoint_type='summit', elevation=1234,
            geometry=DocumentGeometry(
                geom='SRID=4326;POINT(' + str(lat + 10**(-7)) + ' 6.0)')
        )
        waypoint_db.update(waypoint_in)
        self.assertNotEqual(waypoint_db.geometry.geom, geom1)
예제 #3
0
    def test_update_cache_version_for_map(self):
        waypoint = Waypoint(waypoint_type='summit')
        waypoint_unrelated = Waypoint(waypoint_type='summit')
        topo_map = TopoMap()
        self.session.add_all([waypoint, waypoint_unrelated, topo_map])
        self.session.flush()

        self.session.add(
            TopoMapAssociation(document_id=waypoint.document_id,
                               topo_map_id=topo_map.document_id))
        self.session.flush()

        update_cache_version_for_map(topo_map)

        cache_version_waypoint = self.session.query(CacheVersion).get(
            waypoint.document_id)
        cache_version_untouched = self.session.query(CacheVersion).get(
            waypoint_unrelated.document_id)
        cache_version_map = self.session.query(CacheVersion).get(
            topo_map.document_id)

        self.assertEqual(cache_version_waypoint.version, 2)
        self.assertEqual(cache_version_untouched.version, 1)
        # the cache key of the map is also not updated!
        self.assertEqual(cache_version_map.version, 1)
예제 #4
0
    def test_update_cache_version_wp_with_associations(self):
        waypoint1 = Waypoint(waypoint_type='summit')
        waypoint2 = Waypoint(waypoint_type='summit')
        waypoint3 = Waypoint(waypoint_type='summit')
        waypoint_unrelated = Waypoint(waypoint_type='summit')
        self.session.add_all(
            [waypoint1, waypoint2, waypoint3, waypoint_unrelated])
        self.session.flush()

        self.session.add(Association.create(waypoint1, waypoint2))
        self.session.add(Association.create(waypoint3, waypoint1))
        self.session.flush()

        update_cache_version(waypoint1)
        cache_version1 = self.session.query(CacheVersion).get(
            waypoint1.document_id)
        cache_version2 = self.session.query(CacheVersion).get(
            waypoint1.document_id)
        cache_version3 = self.session.query(CacheVersion).get(
            waypoint1.document_id)
        cache_version_untouched = self.session.query(CacheVersion).get(
            waypoint_unrelated.document_id)

        self.assertEqual(cache_version1.version, 2)
        self.assertEqual(cache_version2.version, 2)
        self.assertEqual(cache_version3.version, 2)
        self.assertEqual(cache_version_untouched.version, 1)
예제 #5
0
    def test_update_cache_version_associations_removed_wp(self):
        waypoint1 = Waypoint(waypoint_type='summit')
        waypoint2 = Waypoint(waypoint_type='summit')
        waypoint3 = Waypoint(waypoint_type='summit')
        waypoint_unrelated = Waypoint(waypoint_type='summit')
        self.session.add_all(
            [waypoint1, waypoint2, waypoint3, waypoint_unrelated])
        self.session.flush()

        update_cache_version_associations([], [{
            'parent_id': waypoint1.document_id,
            'parent_type': WAYPOINT_TYPE,
            'child_id': waypoint2.document_id,
            'child_type': WAYPOINT_TYPE
        }, {
            'parent_id': waypoint3.document_id,
            'parent_type': WAYPOINT_TYPE,
            'child_id': waypoint1.document_id,
            'child_type': WAYPOINT_TYPE
        }])

        cache_version1 = self.session.query(CacheVersion).get(
            waypoint1.document_id)
        cache_version2 = self.session.query(CacheVersion).get(
            waypoint2.document_id)
        cache_version3 = self.session.query(CacheVersion).get(
            waypoint3.document_id)
        cache_version_untouched = self.session.query(CacheVersion).get(
            waypoint_unrelated.document_id)

        self.assertEqual(cache_version1.version, 2)
        self.assertEqual(cache_version2.version, 2)
        self.assertEqual(cache_version3.version, 2)
        self.assertEqual(cache_version_untouched.version, 1)
예제 #6
0
    def test_update_cache_version_for_area(self):
        waypoint = Waypoint(waypoint_type='summit')
        waypoint_unrelated = Waypoint(waypoint_type='summit')
        area = Area()
        self.session.add_all([waypoint, waypoint_unrelated, area])
        self.session.flush()

        self.session.add(
            AreaAssociation(document_id=waypoint.document_id,
                            area_id=area.document_id))
        self.session.flush()

        update_cache_version_for_area(area)

        cache_version_waypoint = self.session.query(CacheVersion).get(
            waypoint.document_id)
        cache_version_untouched = self.session.query(CacheVersion).get(
            waypoint_unrelated.document_id)
        cache_version_area = self.session.query(CacheVersion).get(
            area.document_id)

        self.assertEqual(cache_version_waypoint.version, 2)
        self.assertEqual(cache_version_untouched.version, 1)
        # the cache key of the area is also not updated!
        self.assertEqual(cache_version_area.version, 1)
예제 #7
0
    def setUp(self):  # noqa
        super(TestSitemapXml, self).setUp()
        self._prefix = '/sitemaps.xml'
        self.ui_url = 'https://www.camptocamp.org'
        self.schema_url = '{http://www.sitemaps.org/schemas/sitemap/0.9}'

        self.waypoint1 = Waypoint(
            waypoint_type='summit',
            elevation=2000,
            locales=[WaypointLocale(lang='fr', title='Dent de Crolles')])
        self.session.add(self.waypoint1)
        self.waypoint2 = Waypoint(waypoint_type='summit',
                                  elevation=4985,
                                  locales=[
                                      WaypointLocale(lang='en',
                                                     title='Mont Blanc'),
                                      WaypointLocale(lang='fr',
                                                     title='Mont Blanc')
                                  ])
        self.session.add(self.waypoint2)
        self.route = Route(activities=['skitouring'],
                           elevation_max=1500,
                           elevation_min=700,
                           locales=[
                               RouteLocale(lang='fr',
                                           title='Mont Blanc du ciel',
                                           title_prefix='Mont Blanc')
                           ])
        self.session.add(self.route)
        self.session.flush()
예제 #8
0
    def test_update_cache_version_route(self):
        route1 = Route(activities=['skitouring'])
        route2 = Route(activities=['skitouring'])
        waypoint1 = Waypoint(waypoint_type='summit')
        waypoint2 = Waypoint(waypoint_type='summit')
        waypoint_unrelated = Waypoint(waypoint_type='summit')
        self.session.add_all(
            [waypoint1, waypoint2, waypoint_unrelated, route1, route2])
        self.session.flush()

        self.session.add(Association.create(waypoint1, route1))
        self.session.add(Association.create(route2, route1))
        self.session.add(Association.create(waypoint2, waypoint1))
        self.session.flush()

        update_cache_version(route1)
        cache_version_route1 = self.session.query(CacheVersion).get(
            route1.document_id)
        cache_version_route2 = self.session.query(CacheVersion).get(
            route2.document_id)
        cache_version_wp1 = self.session.query(CacheVersion).get(
            waypoint1.document_id)
        cache_version_wp2 = self.session.query(CacheVersion).get(
            waypoint2.document_id)
        cache_version_untouched = self.session.query(CacheVersion).get(
            waypoint_unrelated.document_id)

        self.assertEqual(cache_version_route1.version, 2)
        self.assertEqual(cache_version_route2.version, 2)
        self.assertEqual(cache_version_wp1.version, 3)
        self.assertEqual(cache_version_wp2.version, 2)
        self.assertEqual(cache_version_untouched.version, 1)
    def setUp(self):  # noqa
        super(BaseProtectTest, self).setUp()

        self.waypoint = Waypoint(waypoint_type='summit', elevation=2203)

        self.locale = WaypointLocale(lang='en',
                                     title='Mont Granier',
                                     description='...')
        self.waypoint.locales.append(self.locale)

        self.waypoint.geometry = DocumentGeometry(
            geom='SRID=3857;POINT(635956 5723604)')
        self.session.add(self.waypoint)

        self.waypoint2 = Waypoint(protected=True,
                                  waypoint_type='summit',
                                  elevation=2203)

        self.locale2 = WaypointLocale(lang='en',
                                      title='Mont Granier2',
                                      description='...')
        self.waypoint2.locales.append(self.locale2)

        self.waypoint2.geometry = DocumentGeometry(
            geom='SRID=3857;POINT(635956 5723604)')
        self.session.add(self.waypoint2)

        self.session.flush()
예제 #10
0
    def setUp(self):  # noqa
        super(BaseProtectTest, self).setUp()
        contributor_id = self.global_userids['contributor']

        self.waypoint = Waypoint(waypoint_type='summit', elevation=2203)

        self.locale = WaypointLocale(lang='en',
                                     title='Mont Granier',
                                     description='...')
        self.waypoint.locales.append(self.locale)

        self.waypoint.geometry = DocumentGeometry(
            geom='SRID=3857;POINT(635956 5723604)')
        self.session.add(self.waypoint)
        self.session.flush()

        DocumentRest.create_new_version(self.waypoint, contributor_id)

        self.waypoint2 = Waypoint(protected=True,
                                  waypoint_type='summit',
                                  elevation=2203)

        self.locale2 = WaypointLocale(lang='en',
                                      title='Mont Granier2',
                                      description='...')
        self.waypoint2.locales.append(self.locale2)

        self.waypoint2.geometry = DocumentGeometry(
            geom='SRID=3857;POINT(635956 5723604)')
        self.session.add(self.waypoint2)
        self.session.flush()

        DocumentRest.create_new_version(self.waypoint2, contributor_id)

        self.session.flush()
예제 #11
0
    def setUp(self):  # noqa
        super(TestSitemapRest, self).setUp()
        self._prefix = '/sitemaps'

        self.waypoint1 = Waypoint(
            waypoint_type='summit',
            elevation=2000,
            locales=[WaypointLocale(lang='fr', title='Dent de Crolles')])
        self.session.add(self.waypoint1)
        self.waypoint2 = Waypoint(waypoint_type='summit',
                                  elevation=4985,
                                  locales=[
                                      WaypointLocale(lang='en',
                                                     title='Mont Blanc'),
                                      WaypointLocale(lang='fr',
                                                     title='Mont Blanc')
                                  ])
        self.session.add(self.waypoint2)
        self.route = Route(activities=['skitouring'],
                           elevation_max=1500,
                           elevation_min=700,
                           locales=[
                               RouteLocale(lang='fr',
                                           title='Mont Blanc du ciel',
                                           title_prefix='Mont Blanc')
                           ])
        self.session.add(self.route)
        self.session.flush()
예제 #12
0
    def _add_test_data(self):
        self.article1 = Article(categories=['site_info'],
                                activities=['hiking'],
                                article_type='collab')
        self.locale_en = DocumentLocale(lang='en', title='Lac d\'Annecy')
        self.locale_fr = DocumentLocale(lang='fr', title='Lac d\'Annecy')

        self.article1.locales.append(self.locale_en)
        self.article1.locales.append(self.locale_fr)

        self.session.add(self.article1)
        self.session.flush()

        user_id = self.global_userids['contributor']
        DocumentRest.create_new_version(self.article1, user_id)
        self.article1_version = self.session.query(DocumentVersion). \
            filter(DocumentVersion.document_id == self.article1.document_id). \
            filter(DocumentVersion.lang == 'en').first()

        self.article2 = Article(categories=['site_info'],
                                activities=['hiking'],
                                article_type='collab')
        self.session.add(self.article2)
        self.article3 = Article(categories=['site_info'],
                                activities=['hiking'],
                                article_type='collab')
        self.session.add(self.article3)
        self.article4 = Article(categories=['site_info'],
                                activities=['hiking'],
                                article_type='personal')
        self.article4.locales.append(
            DocumentLocale(lang='en', title='Lac d\'Annecy'))
        self.article4.locales.append(
            DocumentLocale(lang='fr', title='Lac d\'Annecy'))
        self.session.add(self.article4)
        self.session.flush()

        DocumentRest.create_new_version(self.article4, user_id)
        self.article4_version = self.session.query(DocumentVersion). \
            filter(DocumentVersion.document_id == self.article4.document_id). \
            filter(DocumentVersion.lang == 'en').first()

        self.waypoint1 = Waypoint(waypoint_type='summit', elevation=2203)
        self.session.add(self.waypoint1)
        self.waypoint2 = Waypoint(
            waypoint_type='climbing_outdoor',
            elevation=2,
            rock_types=[],
            geometry=DocumentGeometry(geom='SRID=3857;POINT(635956 5723604)'))
        self.session.add(self.waypoint2)
        self.session.flush()

        self.session.add(
            Association.create(parent_document=self.article1,
                               child_document=self.article4))
        self.session.add(
            Association.create(parent_document=self.article3,
                               child_document=self.article1))
        self.session.flush()
예제 #13
0
    def _add_test_data(self):
        self.waypoint = Waypoint(waypoint_type='summit', elevation=2203)
        self.locale_en = WaypointLocale(lang='en',
                                        title='Mont Granier',
                                        description='...',
                                        access='yep')
        self.waypoint.locales.append(self.locale_en)
        self.waypoint.geometry = DocumentGeometry(
            geom='SRID=3857;POINT(635956 5723604)')
        self.session.add(self.waypoint)

        self.waypoint_with_topic = Waypoint(waypoint_type='summit',
                                            elevation=2203)
        document_topic = DocumentTopic(topic_id=1)
        self.locale_en_with_topic = WaypointLocale(
            lang='en',
            title='Mont Granier',
            description='...',
            access='yep',
            document_topic=document_topic)
        self.waypoint_with_topic.locales.append(self.locale_en_with_topic)
        self.waypoint_with_topic.geometry = DocumentGeometry(
            geom='SRID=3857;POINT(635956 5723604)')
        self.session.add(self.waypoint_with_topic)

        self.image = Image(filename='image.jpg',
                           activities=['paragliding'],
                           height=1500,
                           image_type='collaborative')
        self.image_locale_en = DocumentLocale(lang='en',
                                              title='',
                                              description='')
        self.image.locales.append(self.image_locale_en)
        self.image.geometry = DocumentGeometry(
            geom='SRID=3857;POINT(635956 5723604)')
        self.session.add(self.image)

        self.outing = Outing(activities=['skitouring'],
                             date_start=datetime.date(2016, 1, 1),
                             date_end=datetime.date(2016, 1, 1),
                             locales=[
                                 OutingLocale(
                                     lang='en',
                                     title='Mont Granier / skitouring')
                             ])
        self.session.add(self.outing)
        self.session.flush()

        for user_id in (self.global_userids['contributor'],
                        self.global_userids['contributor2']):
            self.session.add(
                Association(parent_document_id=user_id,
                            parent_document_type=USERPROFILE_TYPE,
                            child_document_id=self.outing.document_id,
                            child_document_type=OUTING_TYPE))

        self.session.flush()
예제 #14
0
    def _add_test_data(self):
        self.waypoint1 = Waypoint(
            waypoint_type='summit', elevation=2203)
        self.session.add(self.waypoint1)

        self.waypoint2 = Waypoint(
            waypoint_type='summit', elevation=200)
        self.session.add(self.waypoint2)

        self.route1 = Route(activities=['skitouring'])
        self.session.add(self.route1)
        self.session.flush()
예제 #15
0
    def setUp(self):  # noqa
        BaseTestCase.setUp(self)

        self.waypoint1 = Waypoint(waypoint_type='summit')
        self.waypoint2 = Waypoint(waypoint_type='summit')
        self.route1 = Route(activities=['hiking'])
        self.route2 = Route(activities=['hiking'])
        self.user_profile1 = UserProfile()
        self.user_profile2 = UserProfile()
        self.session.add_all([
            self.waypoint1, self.waypoint2, self.route1, self.route2,
            self.user_profile1, self.user_profile2
        ])
        self.session.flush()
예제 #16
0
    def setUp(self):  # noqa
        BaseTestCase.setUp(self)

        self.area1 = Area(
            area_type='range',
            geometry=DocumentGeometry(
                geom_detail=
                'SRID=3857;POLYGON((668518.249382151 5728802.39591739,668518.249382151 5745465.66808356,689156.247019149 5745465.66808356,689156.247019149 5728802.39591739,668518.249382151 5728802.39591739))'
            )  # noqa
        )
        self.session.add(self.area1)
        self.session.flush()
        self.area2 = Area(
            area_type='range',
            redirects_to=self.area1.document_id,
            geometry=DocumentGeometry(
                geom_detail=
                'SRID=3857;POLYGON((668518.249382151 5728802.39591739,668518.249382151 5745465.66808356,689156.247019149 5745465.66808356,689156.247019149 5728802.39591739,668518.249382151 5728802.39591739))'
            )  # noqa
        )

        # wp inside the area
        self.waypoint1 = Waypoint(
            waypoint_type='summit',
            geometry=DocumentGeometry(
                geom='SRID=3857;POINT(677461.381691516 5740879.44638645)'))
        # wp outside the area
        self.waypoint2 = Waypoint(
            waypoint_type='summit',
            geometry=DocumentGeometry(
                geom='SRID=3857;POINT(693666.031687976 5741108.7574713)'))
        # wp without geometry
        self.waypoint3 = Waypoint(waypoint_type='summit')
        # wp with empty geometry
        self.waypoint4 = Waypoint(waypoint_type='summit',
                                  geometry=DocumentGeometry())
        self.session.add_all([
            self.area2, self.waypoint1, self.waypoint2, self.waypoint3,
            self.waypoint4
        ])
        self.session.flush()

        # wp inside the area, but with `redirects_to` (should be ignored)
        self.waypoint5 = Waypoint(
            waypoint_type='summit',
            redirects_to=self.waypoint1.document_id,
            geometry=DocumentGeometry(
                geom='SRID=3857;POINT(677461.381691516 5740879.44638645)'))
        self.session.add(self.waypoint5)
예제 #17
0
    def test_geometry_update_skip_optimization(self):
        geom1 = 'SRID=3857;POINT(445278.0 334111.0)'
        waypoint_db = Waypoint(
            document_id=1, waypoint_type='summit', elevation=2203,
            geometry=DocumentGeometry(
                document_id=1, geom=geom1
            )
        )

        waypoint_in = Waypoint(
            document_id=1, waypoint_type='summit', elevation=1234,
            geometry=None
        )
        waypoint_db.update(waypoint_in)
        self.assertEqual(waypoint_db.geometry.geom, geom1)
예제 #18
0
    def test_update_cache_version_user_document_version(self):
        """ Test that a document is invalidated if a user name of a user that
         edited one of the document versions is changed.
        """
        waypoint = Waypoint(waypoint_type='summit',
                            elevation=2203,
                            locales=[
                                WaypointLocale(lang='en',
                                               title='...',
                                               description='...')
                            ])

        user_profile = UserProfile()
        user = User(name='test_user',
                    username='******',
                    email='*****@*****.**',
                    forum_username='******',
                    password='******',
                    email_validated=True,
                    profile=user_profile)
        self.session.add_all([waypoint, user_profile, user])
        self.session.flush()

        DocumentRest.create_new_version(waypoint, user.id)

        update_cache_version(user_profile)
        cache_version_user_profile = self.session.query(CacheVersion).get(
            user_profile.document_id)
        cache_version_waypoint = self.session.query(CacheVersion).get(
            waypoint.document_id)

        self.assertEqual(cache_version_waypoint.version, 2)
        self.assertEqual(cache_version_user_profile.version, 2)
예제 #19
0
    def test_process_task(self):
        """Tests that the syncer listens to messages and sends changes to
        ElasticSearch.
        """
        waypoint = Waypoint(
            document_id=51251,
            waypoint_type='summit', elevation=2000,
            geometry=DocumentGeometry(
                geom='SRID=3857;POINT(635956 5723604)'),
            locales=[
                WaypointLocale(
                    lang='fr', title='Mont Granier',
                    description='...',
                    summary='Le Mont [b]Granier[/b]')
            ])
        self.session.add(waypoint)
        self.session.flush()
        user_id = self.global_userids['contributor']
        DocumentRest.create_new_version(waypoint, user_id)
        self.session.flush()

        t = transaction.begin()
        notify_es_syncer(self.queue_config)
        t.commit()

        syncer = SyncWorker(
            self.queue_config.connection, self.queue_config.queue,
            session=self.session)
        next(syncer.consume(limit=1))

        index = elasticsearch_config['index']
        doc = SearchWaypoint.get(id=51251, index=index)
        self.assertEqual(doc['title_fr'], 'Mont Granier')
        self.assertEqual(doc['summary_fr'], 'Le Mont  Granier ')
        self.assertEqual(doc['doc_type'], 'w')
예제 #20
0
    def test_version_concurrent_edit(self):
        """Test that a `StaleDataError` is thrown when trying to update a
        waypoint with an old version number.
        """
        waypoint1 = Waypoint(
            waypoint_type='summit', elevation=2203,
            locales=[
                WaypointLocale(
                    lang='en', title='A', description='abc')
            ]
        )

        # add the initial waypoint
        self.session.add(waypoint1)
        self.session.flush()
        self.session.expunge(waypoint1)
        version1 = waypoint1.version
        self.assertIsNotNone(version1)

        # change the waypoint
        waypoint2 = self.session.query(Waypoint).get(waypoint1.document_id)
        waypoint2.elevation = 1234
        self.session.merge(waypoint2)
        self.session.flush()
        version2 = waypoint2.version
        self.assertNotEqual(version1, version2)

        self.assertNotEqual(waypoint1.version, waypoint2.version)
        self.assertNotEqual(waypoint1.elevation, waypoint2.elevation)

        # then try to update the waypoint again with the old version
        waypoint1.elevation = 2345
        self.assertRaises(StaleDataError, self.session.merge, waypoint1)
예제 #21
0
    def _add_test_data(self):
        self.map1 = TopoMap(editor='IGN', scale='25000', code='3431OT')

        self.locale_en = DocumentLocale(lang='en', title='Lac d\'Annecy')
        self.locale_fr = DocumentLocale(lang='fr', title='Lac d\'Annecy')

        self.map1.locales.append(self.locale_en)
        self.map1.locales.append(self.locale_fr)

        self.map1.geometry = DocumentGeometry(
            geom_detail='SRID=3857;POLYGON((611774 5706934,611774 5744215,'
            '642834 5744215,642834 5706934,611774 5706934))')

        self.session.add(self.map1)
        self.session.flush()

        user_id = self.global_userids['contributor']
        DocumentRest.create_new_version(self.map1, user_id)

        self.map2 = TopoMap(editor='IGN', scale='25000', code='3432OT')
        self.session.add(self.map2)
        self.map3 = TopoMap(editor='IGN', scale='25000', code='3433OT')
        self.session.add(self.map3)
        self.map4 = TopoMap(editor='IGN', scale='25000', code='3434OT')
        self.map4.locales.append(
            DocumentLocale(lang='en', title='Lac d\'Annecy'))
        self.map4.locales.append(
            DocumentLocale(lang='fr', title='Lac d\'Annecy'))
        self.session.add(self.map4)
        self.session.flush()

        self.waypoint1 = Waypoint(
            waypoint_type='summit',
            geometry=DocumentGeometry(
                geom='SRID=3857;POINT(677461.381691516 5740879.44638645)'))
        self.waypoint2 = Waypoint(
            waypoint_type='summit',
            geometry=DocumentGeometry(
                geom='SRID=3857;POINT(693666.031687976 5741108.7574713)'))
        route_geom = 'SRID=3857;LINESTRING(668518 5728802, 668528 5728812)'
        self.route = Route(activities=['skitouring'],
                           geometry=DocumentGeometry(geom_detail=route_geom))

        self.session.add_all([self.waypoint1, self.waypoint2, self.route])
        self.session.add(
            TopoMapAssociation(document=self.waypoint2, topo_map=self.map1))
        self.session.flush()
예제 #22
0
    def setUp(self):  # noqa
        super(TestSearchRest, self).setUp()
        self._prefix = '/search'

        self.waypoint1 = Waypoint(
            document_id=534681,
            waypoint_type='summit',
            elevation=2000,
            geometry=DocumentGeometry(geom='SRID=3857;POINT(635956 5723604)'),
            locales=[
                WaypointLocale(lang='fr',
                               title='Dent de Crolles',
                               description='...',
                               summary='La Dent de Crolles'),
                WaypointLocale(lang='en',
                               title='Dent de Crolles',
                               description='...',
                               summary='The Dent de Crolles')
            ])
        self.session.add(self.waypoint1)
        self.session.add(
            Waypoint(document_id=534682,
                     waypoint_type='summit',
                     elevation=4985,
                     geometry=DocumentGeometry(
                         geom='SRID=3857;POINT(635956 5723604)'),
                     locales=[
                         WaypointLocale(lang='en',
                                        title='Mont Blanc',
                                        description='...',
                                        summary='The heighest point in Europe')
                     ]))
        self.session.add(
            Route(document_id=534683,
                  activities=['skitouring'],
                  elevation_max=1500,
                  elevation_min=700,
                  locales=[
                      RouteLocale(lang='fr',
                                  title='Mont Blanc du ciel',
                                  description='...',
                                  summary='Ski')
                  ]))
        self.session.flush()
        fill_index(self.session)
        # make sure the search index is built
        force_search_index()
예제 #23
0
    def test_update(self):
        waypoint_db = Waypoint(document_id=1,
                               waypoint_type='summit',
                               elevation=2203,
                               version=123,
                               locales=[
                                   WaypointLocale(id=2,
                                                  culture='en',
                                                  title='A',
                                                  description='abc',
                                                  version=345),
                                   WaypointLocale(id=3,
                                                  culture='fr',
                                                  title='B',
                                                  description='bcd',
                                                  version=678),
                               ],
                               geometry=DocumentGeometry(
                                   id=4, geom='SRID=3857;POINT(1 2)'))
        waypoint_in = Waypoint(
            document_id=1,
            waypoint_type='summit',
            elevation=1234,
            version=123,
            locales=[
                WaypointLocale(id=2,
                               culture='en',
                               title='C',
                               description='abc',
                               version=345),
                WaypointLocale(culture='es', title='D', description='efg'),
            ],
            geometry=DocumentGeometry(geom='SRID=3857;POINT(3 4)'))
        waypoint_db.update(waypoint_in)
        self.assertEqual(waypoint_db.elevation, waypoint_in.elevation)
        self.assertEqual(len(waypoint_db.locales), 3)

        locale_en = waypoint_db.get_locale('en')
        locale_fr = waypoint_db.get_locale('fr')
        locale_es = waypoint_db.get_locale('es')

        self.assertEqual(locale_en.title, 'C')
        self.assertEqual(locale_fr.title, 'B')
        self.assertEqual(locale_es.title, 'D')

        self.assertEqual(waypoint_db.geometry.geom, 'SRID=3857;POINT(3 4)')
예제 #24
0
    def test_array_handling_non_empty(self):
        waypoint = Waypoint(
            waypoint_type='summit', elevation=2203, rock_types=['basalte'])
        self.session.add(waypoint)
        self.session.flush()

        self.session.refresh(waypoint)
        self.assertEqual(waypoint.rock_types, ['basalte'])
예제 #25
0
    def test_array_handling_none(self):
        waypoint = Waypoint(
            waypoint_type='summit', elevation=2203, rock_types=None)
        self.session.add(waypoint)
        self.session.flush()

        self.session.refresh(waypoint)
        self.assertEqual(waypoint.rock_types, None)
예제 #26
0
    def _add_test_data(self):
        self.area1 = Area(area_type='range')

        self.locale_en = DocumentLocale(lang='en', title='Chartreuse')
        self.locale_fr = DocumentLocale(lang='fr', title='Chartreuse')

        self.area1.locales.append(self.locale_en)
        self.area1.locales.append(self.locale_fr)

        self.area1.geometry = DocumentGeometry(
            geom_detail=
            'SRID=3857;POLYGON((668518.249382151 5728802.39591739,668518.249382151 5745465.66808356,689156.247019149 5745465.66808356,689156.247019149 5728802.39591739,668518.249382151 5728802.39591739))'  # noqa
        )

        self.session.add(self.area1)
        self.session.flush()

        user_id = self.global_userids['contributor']
        DocumentRest.create_new_version(self.area1, user_id)

        self.area2 = Area(area_type='range')
        self.session.add(self.area2)
        self.area3 = Area(area_type='range')
        self.session.add(self.area3)
        self.area4 = Area(area_type='admin_limits')
        self.area4.locales.append(DocumentLocale(lang='en', title='Isère'))
        self.area4.locales.append(DocumentLocale(lang='fr', title='Isère'))
        self.session.add(self.area4)

        self.waypoint1 = Waypoint(
            waypoint_type='summit',
            geometry=DocumentGeometry(
                geom='SRID=3857;POINT(677461.381691516 5740879.44638645)'))
        self.waypoint2 = Waypoint(
            waypoint_type='summit',
            geometry=DocumentGeometry(
                geom='SRID=3857;POINT(693666.031687976 5741108.7574713)'))
        route_geom = 'SRID=3857;LINESTRING(668518 5728802, 668528 5728812)'
        self.route = Route(activities=['skitouring'],
                           geometry=DocumentGeometry(geom_detail=route_geom))

        self.session.add_all([self.waypoint1, self.waypoint2, self.route])
        self.session.add(
            AreaAssociation(document=self.waypoint2, area=self.area1))
        self.session.flush()
예제 #27
0
    def test_update_cache_version_associations_removed_route_outing(self):
        waypoint1 = Waypoint(waypoint_type='summit')
        waypoint2 = Waypoint(waypoint_type='summit')
        waypoint3 = Waypoint(waypoint_type='summit')
        waypoint_unrelated = Waypoint(waypoint_type='summit')
        route = Route(activities=['skitouring'])
        outing = Outing(activities=['skitouring'],
                        date_start=datetime.date(2016, 2, 1),
                        date_end=datetime.date(2016, 2, 1))
        self.session.add_all([
            waypoint1, waypoint2, waypoint3, waypoint_unrelated, route, outing
        ])
        self.session.flush()

        self.session.add(Association.create(waypoint1, route))
        self.session.add(Association.create(waypoint2, waypoint1))
        self.session.add(Association.create(waypoint3, waypoint2))
        self.session.flush()

        update_cache_version_associations([], [{
            'parent_id': route.document_id,
            'parent_type': ROUTE_TYPE,
            'child_id': outing.document_id,
            'child_type': OUTING_TYPE
        }])

        cache_version1 = self.session.query(CacheVersion).get(
            waypoint1.document_id)
        cache_version2 = self.session.query(CacheVersion).get(
            waypoint2.document_id)
        cache_version3 = self.session.query(CacheVersion).get(
            waypoint3.document_id)
        cache_version_route = self.session.query(CacheVersion).get(
            route.document_id)
        cache_version_outing = self.session.query(CacheVersion).get(
            outing.document_id)
        cache_version_untouched = self.session.query(CacheVersion).get(
            waypoint_unrelated.document_id)

        self.assertEqual(cache_version1.version, 2)
        self.assertEqual(cache_version2.version, 2)
        self.assertEqual(cache_version3.version, 2)
        self.assertEqual(cache_version_route.version, 2)
        self.assertEqual(cache_version_outing.version, 2)
        self.assertEqual(cache_version_untouched.version, 1)
예제 #28
0
    def test_trigger_create_cache_version(self):
        waypoint = Waypoint(waypoint_type='summit')
        self.session.add(waypoint)
        self.session.flush()

        cache_version = self.session.query(CacheVersion).get(
            waypoint.document_id)
        self.assertIsNotNone(cache_version)
        self.assertIsNotNone(cache_version.version)
        self.assertIsNotNone(cache_version.last_updated)
예제 #29
0
 def setUp(self):  # noqa
     BaseTestCase.setUp(self)
     self.user1 = self.session.query(User).get(
         self.global_userids['contributor'])
     self.user2 = self.session.query(User).get(
         self.global_userids['contributor2'])
     self.waypoint = Waypoint(waypoint_type='summit')
     self.session.add(self.waypoint)
     self.area1 = Area(area_type='range')
     self.area2 = Area(area_type='range')
     self.session.add_all([self.waypoint, self.area1, self.area2])
     self.session.flush()
예제 #30
0
    def test_update_cache_version_single_wp(self):
        waypoint = Waypoint(waypoint_type='summit')
        waypoint_unrelated = Waypoint(waypoint_type='summit')
        self.session.add_all([waypoint, waypoint_unrelated])
        self.session.flush()

        cache_version = self.session.query(CacheVersion).get(
            waypoint.document_id)
        cache_version.last_updated = datetime.datetime(2016, 1, 1, 12, 1, 0)
        self.session.flush()
        current_version = cache_version.version
        current_last_updated = cache_version.last_updated

        update_cache_version(waypoint)
        self.session.refresh(cache_version)
        self.assertEqual(cache_version.version, current_version + 1)
        self.assertNotEqual(cache_version.last_updated, current_last_updated)

        cache_version_untouched = self.session.query(CacheVersion).get(
            waypoint_unrelated.document_id)
        self.assertEqual(cache_version_untouched.version, 1)