Exemple #1
0
    def test_register_search_index(self):
        """Tests that user accounts are only indexed once they are confirmed.
        """
        request_body = {
            "username": "******",
            "forum_username": "******",
            "name": "Max Mustermann",
            "password": "******",
            "email": "*****@*****.**",
        }
        url = self._prefix + "/register"

        body = self.app_post_json(url, request_body, status=200).json
        self.assertIn("id", body)
        user_id = body.get("id")

        # check that the profile is not inserted in the search index
        sync_es(self.session)
        search_doc = search_documents[USERPROFILE_TYPE].get(id=user_id, index=elasticsearch_config["index"], ignore=404)
        self.assertIsNone(search_doc)

        # Simulate confirmation email validation
        nonce = self.extract_nonce("validate_register_email")
        url_api_validation = "/users/validate_register_email/%s" % nonce
        self.app_post_json(url_api_validation, {}, status=200)

        # check that the profile is inserted in the index after confirmation
        self.sync_es()
        search_doc = search_documents[USERPROFILE_TYPE].get(id=user_id, index=elasticsearch_config["index"])
        self.assertIsNotNone(search_doc)

        self.assertIsNotNone(search_doc["doc_type"])
        self.assertEqual(search_doc["title_fr"], "Max Mustermann testf")
Exemple #2
0
    def test_register_search_index(self, _send_email):
        """Tests that user accounts are only indexed once they are confirmed.
        """
        request_body = {
            'username': '******',
            'forum_username': '******',
            'name': 'Max Mustermann',
            'password': '******',
            'email': '*****@*****.**'
        }
        url = self._prefix + '/register'

        body = self.app_post_json(url, request_body, status=200).json
        self.assertIn('id', body)
        user_id = body.get('id')

        # check that the profile is not inserted in the search index
        sync_es(self.session)
        search_doc = search_documents[USERPROFILE_TYPE].get(
            id=user_id, index=elasticsearch_config['index'], ignore=404)
        self.assertIsNone(search_doc)

        # Simulate confirmation email validation
        nonce = self.extract_nonce(_send_email, 'validate_register_email')
        url_api_validation = '/users/validate_register_email/%s' % nonce
        self.app_post_json(url_api_validation, {}, status=200)

        # check that the profile is inserted in the index after confirmation
        self.sync_es()
        search_doc = search_documents[USERPROFILE_TYPE].get(
            id=user_id, index=elasticsearch_config['index'])
        self.assertIsNotNone(search_doc)

        self.assertIsNotNone(search_doc['doc_type'])
        self.assertEqual(search_doc['title_fr'], 'Max Mustermann testf')
 def _check_es_index(self):
     sync_es(self.session)
     search_doc = SearchUser.get(id=self.profile1.document_id,
                                 index=elasticsearch_config['index'])
     self.assertEqual(search_doc['doc_type'], self.profile1.type)
     self.assertEqual(search_doc['title_en'], 'Contributor contributor')
     self.assertEqual(search_doc['title_fr'], 'Contributor contributor')
     return search_doc
 def _check_es_index(self):
     sync_es(self.session)
     search_doc = SearchUser.get(
         id=self.profile1.document_id,
         index=elasticsearch_config['index'])
     self.assertEqual(search_doc['doc_type'], self.profile1.type)
     self.assertEqual(search_doc['title_en'], 'contributor Contributor')
     self.assertEqual(search_doc['title_fr'], 'contributor Contributor')
     return search_doc
Exemple #5
0
 def sync(self):
     session = self.session if self.session else self.session_factory()
     try:
         sync_es(session, self.batch_size)
         session.commit()
     except Exception:
         session.rollback()
         raise
     finally:
         session.close()
Exemple #6
0
 def sync(self):
     session = self.session if self.session else self.session_factory()
     try:
         sync_es(session, self.batch_size)
         session.commit()
     except:
         session.rollback()
         raise
     finally:
         session.close()
Exemple #7
0
 def sync(self):
     session = self.session if self.session else self.session_factory()
     try:
         sync_es(session)
         session.commit()
     except:
         session.rollback()
         raise
     finally:
         session.close()
Exemple #8
0
    def test_register_search_index(self):
        """Tests that user accounts are only indexed once they are confirmed.
        """
        request_body = {
            'username': '******', 'forum_username': '******',
            'name': 'Max Mustermann',
            'password': '******',
            'email': '*****@*****.**'
        }
        url = self._prefix + '/register'

        body = self.app_post_json(url, request_body, status=200).json
        self.assertIn('id', body)
        user_id = body.get('id')

        # check that the profile is not inserted in the search index
        sync_es(self.session)
        search_doc = search_documents[USERPROFILE_TYPE].get(
            id=user_id,
            index=elasticsearch_config['index'], ignore=404)
        self.assertIsNone(search_doc)

        # Simulate confirmation email validation
        nonce = self.extract_nonce('validate_register_email')
        url_api_validation = '/users/validate_register_email/%s' % nonce
        self.app_post_json(url_api_validation, {}, status=200)

        # check that the profile is inserted in the index after confirmation
        self.sync_es()
        search_doc = search_documents[USERPROFILE_TYPE].get(
            id=user_id,
            index=elasticsearch_config['index'])
        self.assertIsNotNone(search_doc)

        self.assertIsNotNone(search_doc['doc_type'])
        self.assertEqual(search_doc['title_fr'], 'test Max Mustermann')
Exemple #9
0
    def put_success_new_lang(
            self, request_body, document, user='******', check_es=True):
        """Test updating a document by adding a new locale.
        """
        response = self.app_put_json(
            self._prefix + '/' + str(document.document_id), request_body,
            status=403)

        headers = self.add_authorization_header(username=user)
        self.app_put_json(
            self._prefix + '/' + str(document.document_id), request_body,
            headers=headers, status=200)

        response = self.app.get(
            self._prefix + '/' + str(document.document_id), headers=headers,
            status=200)
        self.assertEqual(response.content_type, 'application/json')

        body = response.json
        document_id = body.get('document_id')
        # document version does not change!
        self.assertEquals(body.get('version'), document.version)
        self.assertEquals(body.get('document_id'), document_id)

        # check that the document was updated correctly
        self.session.expire_all()
        document = self.session.query(self._model).get(document_id)
        self.assertEquals(len(document.locales), 3)

        # check that no new archive_document was created
        archive_count = self.session.query(self._model_archive). \
            filter(
                getattr(self._model_archive, 'document_id') == document_id). \
            count()
        self.assertEqual(archive_count, 1)

        # check that one new archive_document_locale was created
        archive_locale_count = \
            self.session.query(self._model_archive_locale). \
            filter(
                document_id == getattr(
                    self._model_archive_locale, 'document_id')
            ). \
            count()
        self.assertEqual(archive_locale_count, 3)

        # check that one new version was created
        versions = document.versions
        self.assertEqual(len(versions), 3)

        # version with lang 'en'
        version_en = self.get_latest_version('en', versions)
        self.assertEqual(version_en.lang, 'en')

        meta_data_en = version_en.history_metadata

        # version with lang 'fr'
        version_fr = self.get_latest_version('fr', versions)
        self.assertEqual(version_fr.lang, 'fr')

        meta_data_fr = version_fr.history_metadata
        self.assertIs(meta_data_en, meta_data_fr)

        archive_document_en = version_en.document_archive
        archive_document_fr = version_fr.document_archive
        self.assertIs(archive_document_en, archive_document_fr)

        # version with lang 'es'
        version_es = self.get_latest_version('es', versions)
        self.assertEqual(version_es.lang, 'es')

        meta_data_es = version_es.history_metadata
        self.assertIsNot(meta_data_en, meta_data_es)

        archive_document_es = version_es.document_archive
        self.assertIs(archive_document_es, archive_document_fr)

        # check updates to the search index
        if check_es:
            sync_es(self.session)
            search_doc = search_documents[self._doc_type].get(
                id=document.document_id,
                index=elasticsearch_config['index'])

            self.assertEqual(search_doc['doc_type'], document.type)
            self.assertEqual(
                search_doc['title_en'], document.get_locale('en').title)
            self.assertEqual(
                search_doc['title_fr'], document.get_locale('fr').title)
            self.assertEqual(
                search_doc['title_es'], document.get_locale('es').title)

        return (body, document)
Exemple #10
0
 def sync_es(self):
     self.assertNotifiedEs()
     sync_es(self.session)
Exemple #11
0
    def put_success_figures_only(
            self, request_body, document, user='******', check_es=True):
        """Test updating a document with changes to the figures only.
        """
        response = self.app_put_json(
            self._prefix + '/' + str(document.document_id), request_body,
            status=403)

        headers = self.add_authorization_header(username=user)
        self.app_put_json(
            self._prefix + '/' + str(document.document_id), request_body,
            headers=headers, status=200)

        response = self.app.get(
            self._prefix + '/' + str(document.document_id), headers=headers,
            status=200)
        self.assertEqual(response.content_type, 'application/json')

        body = response.json
        document_id = body.get('document_id')
        self.assertNotEquals(
            body.get('version'), document.version)
        self.assertEquals(body.get('document_id'), document_id)

        # check that the document was updated correctly
        self.session.expire_all()
        document = self.session.query(self._model).get(document_id)
        self.assertEquals(len(document.locales), 2)

        # check that a new archive_document was created
        archive_count = self.session.query(self._model_archive). \
            filter(
                getattr(self._model_archive, 'document_id') == document_id). \
            count()
        self.assertEqual(archive_count, 2)

        # check that no new archive_document_locale was created
        archive_locale_count = \
            self.session.query(self._model_archive_locale). \
            filter(
                document_id == getattr(
                    self._model_archive_locale, 'document_id')
            ). \
            count()
        self.assertEqual(archive_locale_count, 2)

        # check that new versions were created
        versions = document.versions
        self.assertEqual(len(versions), 4)

        # version with lang 'en'
        version_en = self.get_latest_version('en', versions)

        self.assertEqual(version_en.lang, 'en')

        meta_data_en = version_en.history_metadata
        self.assertEqual(meta_data_en.comment, 'Changing figures')
        self.assertIsNotNone(meta_data_en.written_at)

        # version with lang 'fr'
        version_fr = self.get_latest_version('fr', versions)

        self.assertEqual(version_fr.lang, 'fr')

        meta_data_fr = version_fr.history_metadata
        self.assertIs(meta_data_en, meta_data_fr)

        archive_document_en = version_en.document_archive
        archive_document_fr = version_fr.document_archive
        self.assertIs(archive_document_en, archive_document_fr)

        # check updates to the search index
        sync_es(self.session)
        search_doc = search_documents[self._doc_type].get(
            id=document.document_id,
            index=elasticsearch_config['index'])

        self.assertEqual(search_doc['doc_type'], document.type)

        if isinstance(document, Route) and document.main_waypoint_id:
            locale_en = document.get_locale('en')
            title = locale_en.title_prefix + ' : ' + locale_en.title
            self.assertEqual(search_doc['title_en'], title)

            locale_fr = document.get_locale('fr')
            title = locale_fr.title_prefix + ' : ' + locale_fr.title
            self.assertEqual(search_doc['title_fr'], title)
        elif check_es:
            self.assertEqual(
                search_doc['title_en'], document.get_locale('en').title)
            self.assertEqual(
                search_doc['title_fr'], document.get_locale('fr').title)

        return (body, document)
Exemple #12
0
 def sync_es(self):
     queue = self.queue_config.queue(self.queue_config.connection)
     self.assertIsNotNone(queue.get(), 'no sync. notification sent for ES')
     sync_es(self.session)
Exemple #13
0
    def put_success_lang_only(self,
                              request_body,
                              document,
                              user='******',
                              check_es=True):
        """Test updating a document with only changes to a locale.
        """
        response = self.app_put_json(self._prefix + '/' +
                                     str(document.document_id),
                                     request_body,
                                     status=403)

        headers = self.add_authorization_header(username=user)
        self.app_put_json(self._prefix + '/' + str(document.document_id),
                          request_body,
                          headers=headers,
                          status=200)

        response = self.app.get(self._prefix + '/' + str(document.document_id),
                                headers=headers,
                                status=200)
        self.assertEqual(response.content_type, 'application/json')

        body = response.json
        document_id = body.get('document_id')
        # document version does not change!
        self.assertEqual(body.get('version'), document.version)
        self.assertEqual(body.get('document_id'), document_id)

        # check that the document was updated correctly
        self.session.expire_all()
        document = self.session.query(self._model).get(document_id)
        self.assertEqual(len(document.locales), 2)

        # check that no new archive_document was created
        archive_count = self.session.query(self._model_archive). \
            filter(
                getattr(self._model_archive, 'document_id') == document_id). \
            count()
        self.assertEqual(archive_count, 1)

        # check that one new archive_document_locale was created
        archive_locale_count = \
            self.session.query(self._model_archive_locale). \
            filter(
                document_id == getattr(
                    self._model_archive_locale, 'document_id')
            ). \
            count()
        self.assertEqual(archive_locale_count, 3)

        # check that one new version was created
        versions = document.versions
        self.assertEqual(len(versions), 3)

        # version with lang 'en'
        version_en = self.get_latest_version('en', versions)

        self.assertEqual(version_en.lang, 'en')

        meta_data_en = version_en.history_metadata
        self.assertEqual(meta_data_en.comment, 'Changing lang')
        self.assertIsNotNone(meta_data_en.written_at)

        # version with lang 'fr'
        version_fr = self.get_latest_version('fr', versions)

        self.assertEqual(version_fr.lang, 'fr')

        meta_data_fr = version_fr.history_metadata
        self.assertIsNot(meta_data_en, meta_data_fr)

        archive_waypoint_en = version_en.document_archive
        archive_waypoint_fr = version_fr.document_archive
        self.assertIs(archive_waypoint_en, archive_waypoint_fr)

        # check updates to the search index
        if check_es:
            sync_es(self.session)
            search_doc = search_documents[self._doc_type].get(
                id=document.document_id, index=elasticsearch_config['index'])

            self.assertEqual(search_doc['doc_type'], document.type)
            self.assertEqual(search_doc['title_en'],
                             document.get_locale('en').title)
            self.assertEqual(search_doc['title_fr'],
                             document.get_locale('fr').title)

        return (body, document)
Exemple #14
0
 def sync_es(self):
     self.assertNotifiedEs()
     sync_es(self.session)
Exemple #15
0
 def sync_es(self):
     queue = self.queue_config.queue(self.queue_config.connection)
     self.assertIsNotNone(queue.get(), 'no sync. notification sent for ES')
     sync_es(self.session)