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")
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
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()
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()
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()
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')
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)
def sync_es(self): self.assertNotifiedEs() sync_es(self.session)
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)
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)
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)