def test_add_document(self): self.assert401("/api/1.0/documents/add", data={}, method="POST") self.assert403("/api/1.0/documents/add", data={}, method="POST", **STU1_USER) r = self.get("/api/1.0/documents") self.assertEqual(0, len(json_loads(r.data)["data"])) self.post_with_auth( "/api/1.0/documents/add", data={"data": { "title": "Title1", "subtitle": "Subtitle1" }}, **PROF1_USER) r = self.get("/api/1.0/documents") self.assertEqual(1, len(json_loads(r.data)["data"])) self.post_with_auth( "/api/1.0/documents/add", data={"data": { "title": "Title1", "subtitle": "Subtitle1" }}, **ADMIN_USER) r = self.get("/api/1.0/documents") self.assertEqual(2, len(json_loads(r.data)["data"]))
def test_get_current_user(self): self.assert401("/api/1.0/user") r = self.get_with_auth("/api/1.0/user", **ADMIN_USER) self.assertEqual("AdminJulien", json_loads(r.data)["data"][0]["username"]) r = self.get_with_auth("/api/1.0/user", **PROF1_USER) self.assertEqual("Professeur1", json_loads(r.data)["data"][0]["username"])
def test_change_documents_closing_date(self): self.load_fixtures(self.FIXTURES) self.assert401("/api/1.0/documents/20/close", data={}, method="POST") self.assert403("/api/1.0/documents/20/close", data={}, method="POST", **STU1_USER) self.assert403("/api/1.0/documents/20/close", data={}, method="POST", **PROF2_USER) r = self.post_with_auth("/api/1.0/documents/20/close", data={"data": { "closing_date": "15/10/2087" }}, **PROF1_USER) self.assertEqual('2087-10-15 00:00:00', json_loads(r.data)["data"]["date_closing"]) r = self.post_with_auth("/api/1.0/documents/20/close", data={"data": {}}, **ADMIN_USER) self.assertIsNone(json_loads(r.data)["data"]["date_closing"])
def test_change_document_whitelist(self): self.load_fixtures(self.FIXTURES) self.assert401("/api/1.0/documents/20/whitelist", data={}, method="POST") self.assert403("/api/1.0/documents/20/whitelist", data={}, method="POST", **STU1_USER) self.assert403("/api/1.0/documents/20/whitelist", data={}, method="POST", **PROF2_USER) r = self.post_with_auth("/api/1.0/documents/20/whitelist", data={"data": { "whitelist_id": 1 }}, **PROF1_USER) self.assertEqual(1, json_loads(r.data)["data"]["whitelist"]["id"]) r = self.post_with_auth("/api/1.0/documents/20/whitelist", data={"data": {}}, **ADMIN_USER) self.assertIsNone(json_loads(r.data)["data"]["whitelist"])
def test_list_document(self): self.post_with_auth( "/api/1.0/documents/add", data={"data": { "title": "Title1", "subtitle": "Subtitle1" }}, **PROF1_USER) r = self.get("/api/1.0/documents") self.assertEqual(1, len(json_loads(r.data)["data"])) self.post_with_auth( "/api/1.0/documents/add", data={"data": { "title": "Title2", "subtitle": "Subtitle2" }}, **ADMIN_USER) self.post_with_auth( "/api/1.0/documents/add", data={"data": { "title": "Title3", "subtitle": "Subtitle3" }}, **ADMIN_USER) r = self.get("/api/1.0/documents") self.assertEqual(3, len(json_loads(r.data)["data"])) self.delete_with_auth("/api/1.0/documents/3", **ADMIN_USER) r = self.get("/api/1.0/documents") self.assertEqual(2, len(json_loads(r.data)["data"]))
def test_get_institutions(self): self.assert404("/api/1.0/institutions/100") r = self.assert200('/api/1.0/institutions') r = json_loads(r.data)["data"] self.assertEqual(15, len(r)) r = self.assert200('/api/1.0/institutions/12') r = json_loads(r.data)["data"] self.assertEqual("Collection privée", r[0]["name"])
def test_get_traditions(self): self.assert404("/api/1.0/traditions/tradi") r = self.assert200('/api/1.0/traditions') r = json_loads(r.data)["data"] self.assertEqual(7, len(r)) r = self.assert200('/api/1.0/traditions/cartulaire') r = json_loads(r.data)["data"] self.assertEqual("cartulaire", r[0]["id"])
def test_get_countries(self): self.assert404("/api/1.0/countries/100") r = self.assert200('/api/1.0/countries') r = json_loads(r.data)["data"] self.assertEqual(4, len(r)) r = self.assert200('/api/1.0/countries/1') r = json_loads(r.data)["data"] self.assertEqual("France", r[0]["label"])
def test_get_acte_types(self): self.assert404("/api/1.0/acte-types/100") r = self.assert200('/api/1.0/acte-types') r = json_loads(r.data)["data"] self.assertEqual(21, len(r)) r = self.assert200('/api/1.0/acte-types/19') r = json_loads(r.data)["data"] self.assertEqual(19, r[0]["id"])
def test_get_speech_part_types(self): self.assert404("/api/1.0/speech-part-types/100") r = self.assert200('/api/1.0/speech-part-types') r = json_loads(r.data)["data"] self.assertEqual(10, len(r)) r = self.assert200('/api/1.0/speech-part-types/10') r = json_loads(r.data)["data"] self.assertEqual(10, r[0]["id"])
def test_get_languages(self): self.assert404("/api/1.0/languages/azaza") r = self.assert200('/api/1.0/languages') r = json_loads(r.data)["data"] self.assertEqual(3, len(r)) r = self.assert200('/api/1.0/languages/fre') r = json_loads(r.data)["data"] self.assertEqual("fre", r[0]["code"])
def test_get_commentary_types(self): self.assert404("/api/1.0/commentary-types/100") r = self.assert200('/api/1.0/commentary-types') r = json_loads(r.data)["data"] self.assertEqual(6, len(r)) r = self.assert200('/api/1.0/commentary-types/2') r = json_loads(r.data)["data"] self.assertEqual(2, r[0]["id"])
def test_get_editors(self): self.assert404("/api/1.0/editors/100") r = self.assert200('/api/1.0/editors') r = json_loads(r.data)["data"] self.assertEqual(1, len(r)) r = self.assert200('/api/1.0/editors/1') r = json_loads(r.data)["data"] self.assertEqual(1, r[0]["id"])
def test_get_districts(self): self.assert404("/api/1.0/districts/100") self.assert404("/api/1.0/districts/from-country/100") r = self.assert200('/api/1.0/districts/from-country/1') r = json_loads(r.data)["data"] self.assertEqual(20, len(r)) r = self.assert200('/api/1.0/districts/8/from-country/1') r = json_loads(r.data)["data"] self.assertEqual("Limousin", r[0]["label"])
def test_get_transcriptions_reference(self): self.load_fixtures(TestTranscriptionsAPI.FIXTURES) # doc without transcription self.assert404("/api/1.0/documents/21/transcriptions") self.assert404("/api/1.0/documents/21/transcriptions", **STU1_USER) self.assert404("/api/1.0/documents/21/transcriptions", **PROF1_USER) # access a validated transcription self.load_fixtures(TestTranscriptionsAPI.FIXTURES_PROF) self.load_fixtures(TestTranscriptionsAPI.FIXTURES_STU1) self.assert200("/api/1.0/documents/21/validate-transcription", **PROF1_USER) r = self.assert200("/api/1.0/documents/21/transcriptions", **PROF1_USER) r = json_loads(r.data)['data'] self.assertEqual( '<p>Om<ex>n</ex>ib<ex>us</ex> p<ex>re</ex>sentes litt<ex>er</ex>as inspectur<ex>is</ex></p>', r['content']) self.assertEqual(21, r['doc_id']) self.assertEqual(4, r['user_id']) self.assertEqual(3, len(r['notes'])) # test that notes ptr return the expected text fragment from the transcription expected_fragments = ['Om', 'n', 'ib'] for i, note in enumerate(r['notes']): self.assertPtr(r['content'], note['ptr_start'], note['ptr_end'], expected_fragments[i]) # available to everybody self.assert200("/api/1.0/documents/21/transcriptions") self.assert200("/api/1.0/documents/21/transcriptions", **STU1_USER)
def test_clone_translation(self): self.load_fixtures(TestTranslationsAPI.FIXTURES) # access a validated transcription self.load_fixtures(TestTranslationsAPI.FIXTURES_PROF) self.assert200("/api/1.0/documents/21/transcriptions/from-user/4", **PROF1_USER) self.assert404( "/api/1.0/documents/21/transcriptions/clone/from-user/100", **PROF1_USER) self.assert404( "/api/1.0/documents/2132/transcriptions/clone/from-user/100", **PROF1_USER) # clone student 2 tr self.load_fixtures(TestTranslationsAPI.FIXTURES_STU2) self.assert200("/api/1.0/documents/21/transcriptions/from-user/7", **PROF1_USER) self.assert200( "/api/1.0/documents/21/transcriptions/clone/from-user/7", **PROF1_USER) # check the prof content is cloned from stu 2 r = self.assert200("/api/1.0/documents/21/transcriptions/from-user/4", **PROF1_USER) r = json_loads(r.data)['data'] self.assertEqual("transcription stu2", r["content"]) self.assertEqual('<p>NOTE 1 STU2</p>', r['notes'][0]['content']) self.assertEqual('<p>NOTE 2 STU2</p>', r['notes'][1]['content'])
def test_post_document(self): self.load_fixtures(self.FIXTURES) self.assert403("/api/1.0/documents", data={"data": {}}, method="POST", **STU1_USER) self.post_with_auth("/api/1.0/documents", data={ "data": { "title": "My new title", "subtitle": "My new subtitle", "argument": "<p>L’infante Urra</p>", "creation": 1400, "creation_lab": "1400", "copy_year": "[1409-1420 ca.]", "copy_cent": 15, "institution_id": 1, "pressmark": "J 340, n° 21", "editor_id": [1, 2], "country_id": [1, 2, 3], "district_id": [1, 2, 3], "acte_type_id": [1], "language_code": "fro", "tradition_id": [1], "linked_document_id": [20] } }, **ADMIN_USER) resp = self.get("/api/1.0/documents/21") r = json_loads(resp.data) self.assertEqual(21, r["data"]["id"]) self.assertEqual(1, r["data"]["user_id"])
def test_get_whitelist(self): self.assert404("/api/1.0/whitelists/100", **PROF1_USER) self.assert403("/api/1.0/whitelists/1", **STU1_USER) self.assert401("/api/1.0/whitelists/1") r = self.get_with_auth("/api/1.0/whitelists/1", **PROF1_USER) self.assertEqual("Master 1 TNAH 2018", json_loads(r.data)["data"][0]["label"])
def test_delete_alignment_for_user(self): self.assert403( "/api/1.0/documents/21/transcriptions/alignments/from-user/5", method="DELETE", **STU2_USER) self.assert401( "/api/1.0/documents/21/transcriptions/alignments/from-user/5", method="DELETE") self.assert404( "/api/1.0/documents/21/transcriptions/alignments/from-user/5", method="DELETE", **STU1_USER) self.load_fixtures(TestAlignmentTranslationAPI.FIXTURES) self.load_fixtures( TestAlignmentTranslationAPI.FIXTURES_TRANSLATION_STU1) self.assert200("/api/1.0/documents/21/validate-transcription", **PROF1_USER) self.load_fixtures(TestAlignmentTranslationAPI.FIXTURES_ALIGNMENT_STU1) r = self.assert200( "/api/1.0/documents/21/transcriptions/alignments/from-user/5", **PROF1_USER) r = json_loads(r.data)['data'] self.assertEqual(5, len(r)) self.assert200( "/api/1.0/documents/21/transcriptions/alignments/from-user/5", method="DELETE", **STU1_USER) r = self.assert200( "/api/1.0/documents/21/transcriptions/alignments/from-user/5", **PROF1_USER) r = json_loads(r.data)['data'] self.assertEqual(0, len(r)) self.load_fixtures(TestAlignmentTranslationAPI.FIXTURES_ALIGNMENT_STU1) self.assert200( "/api/1.0/documents/21/transcriptions/alignments/from-user/5", method="DELETE", **PROF1_USER) r = self.assert200( "/api/1.0/documents/21/transcriptions/alignments/from-user/5", **PROF1_USER) r = json_loads(r.data)['data'] self.assertEqual(0, len(r))
def test_api_post_country(self): self.assert401("/api/1.0/countries", data={"data": [{}]}, method="POST") self.assert403("/api/1.0/countries", data={"data": [{}]}, method="POST", **STU1_USER) self.assert400("/api/1.0/countries", data={"data": [{ "champ bidon": 100 }]}, method="POST", **ADMIN_USER) self.assert200("/api/1.0/countries", data={ "data": [{ "id": 500, "label": "ACTE-TYPT-500", "ref": "DESC-500" }] }, method="POST", **ADMIN_USER) r = self.assert200('/api/1.0/countries/500') r = json_loads(r.data)["data"] self.assertEqual(500, r[0]["id"]) # post conflicting data self.assert400("/api/1.0/countries", data={ "data": [{ "id": 500, "label": "ACTE-TYPT-500", "ref": "DESC-500" }] }, method="POST", **ADMIN_USER) # post multiple data self.assert200("/api/1.0/countries", data={ "data": [{ "id": 501, "label": "ACTE-TYPT-501", "ref": "DESC-501" }, { "id": 502, "label": "ACTE-TYPT-502", "ref": "DESC-502" }] }, method="POST", **PROF1_USER) self.assert200('/api/1.0/countries/501') self.assert200('/api/1.0/countries/502')
def test_get_user_from_id(self): self.assert401("/api/1.0/users/1") self.assert404("/api/1.0/users/100", **ADMIN_USER) self.assert403("/api/1.0/users/100", **STU1_USER) r = self.assert401("/api/1.0/users/1") r = self.get_with_auth("/api/1.0/users/4", **PROF1_USER) self.assertEqual("Professeur1", json_loads(r.data)["data"][0]["username"])
def test_get_document(self): self.load_fixtures(self.FIXTURES) # document not found self.assert404("/api/1.0/documents/999") # document found resp = self.get("/api/1.0/documents/20") self.assertEqual(20, json_loads(resp.data)["data"]["id"])
def test_api_post_speech_part_type(self): self.assert401("/api/1.0/speech-part-types", data={"data": [{}]}, method="POST") self.assert403("/api/1.0/speech-part-types", data={"data": [{}]}, method="POST", **STU1_USER) self.assert400("/api/1.0/speech-part-types", data={"data": [{ "champ bidon": 100 }]}, method="POST", **ADMIN_USER) self.assert200("/api/1.0/speech-part-types", data={ "data": [{ "id": 500, "label": "SPEECH-PART-TYPT-500", "lang_code": "fre" }] }, method="POST", **ADMIN_USER) r = self.assert200('/api/1.0/speech-part-types/500') r = json_loads(r.data)["data"] self.assertEqual(500, r[0]["id"]) self.assert400("/api/1.0/speech-part-types", data={ "data": [{ "id": 500, "label": "SPEECH-PART-TYPT-500", "lang_code": "fre" }] }, method="POST", **ADMIN_USER) # post multiple data self.assert200("/api/1.0/speech-part-types", data={ "data": [{ "id": 501, "label": "SPEECH-PART-TYPT-501", "lang_code": "fre" }, { "id": 502, "label": "SPEECH-PART-TYPT-502", "lang_code": "fre" }] }, method="POST", **PROF1_USER) self.assert200('/api/1.0/speech-part-types/501') self.assert200('/api/1.0/speech-part-types/502')
def test_api_post_district(self): self.assert401("/api/1.0/districts", data={"data": [{}]}, method="POST") self.assert403("/api/1.0/districts", data={"data": [{}]}, method="POST", **STU1_USER) self.assert409("/api/1.0/districts", data={"data": [{ "champ bidon": 100 }]}, method="POST", **ADMIN_USER) self.assert200("/api/1.0/districts", data={ "data": [{ "id": 500, "label": "DISTRICT-500", "country_id": 1 }] }, method="POST", **ADMIN_USER) r = self.assert200('/api/1.0/districts/500/from-country/1') r = json_loads(r.data)["data"] self.assertEqual(500, r[0]["id"]) # post conflicting data self.assert409("/api/1.0/districts", data={"data": [{ "id": 500, "label": "DISTRICT-500" }]}, method="POST", **ADMIN_USER) # post multiple data self.assert200("/api/1.0/districts", data={ "data": [{ "id": 501, "label": "DISTRICT-501", "country_id": 3 }, { "id": 502, "label": "DISTRICT-502", "country_id": 2 }] }, method="POST", **PROF1_USER) self.assert200('/api/1.0/districts/501/from-country/3') self.assert200('/api/1.0/districts/502/from-country/2')
def test_delete_languages(self): self.assert401("/api/1.0/languages", method="DELETE") self.assert403("/api/1.0/languages", method="DELETE", **STU1_USER) self.assert200("/api/1.0/languages/fre", method='DELETE', **ADMIN_USER) self.assert404("/api/1.0/languages/fre") r = self.assert200('/api/1.0/languages') r = json_loads(r.data)["data"] self.assertEqual(2, len(r))
def test_delete_traditions(self): self.assert401("/api/1.0/traditions", method="DELETE") self.assert403("/api/1.0/traditions", method="DELETE", **STU1_USER) self.delete_with_auth("/api/1.0/traditions/cartulaire", **ADMIN_USER) self.assert404("/api/1.0/traditions/cartulaire") r = self.assert200('/api/1.0/traditions') r = json_loads(r.data)["data"] self.assertEqual(6, len(r))
def test_add_role_to_user(self): self.assert401("/api/1.0/users/4/roles", data={"data": [{"name": "student"}]}, method="POST") self.assert403("/api/1.0/users/4/roles", data={"data": [{"name": "student"}]}, method="POST", **STU1_USER) resp = self.assert200("/api/1.0/users/4/roles", **ADMIN_USER) role_names = [role["name"] for role in json_loads(resp.data)["data"]] self.assertNotIn("student", role_names) self.assertIn("teacher", role_names) # add student role to user 4 self.post_with_auth("/api/1.0/users/4/roles", data={"data": [{"name": "student"}]}, **ADMIN_USER) resp = self.get_with_auth("/api/1.0/users/4/roles", **ADMIN_USER) role_names = [role["name"] for role in json_loads(resp.data)["data"]] self.assertIn("student", role_names) self.assertIn("teacher", role_names)
def test_delete_institutions(self): self.assert401("/api/1.0/institutions", method="DELETE") self.assert403("/api/1.0/institutions", method="DELETE", **STU1_USER) self.delete_with_auth("/api/1.0/institutions/10", **ADMIN_USER) self.assert404("/api/1.0/institutions/10") r = self.assert200('/api/1.0/institutions') r = json_loads(r.data)["data"] self.assertEqual(14, len(r))
def test_delete_acte_types(self): self.assert401("/api/1.0/acte-types", method="DELETE") self.assert403("/api/1.0/acte-types", method="DELETE", **STU1_USER) self.delete_with_auth("/api/1.0/acte-types/19", **ADMIN_USER) self.assert404("/api/1.0/acte-types/19") r = self.assert200('/api/1.0/acte-types') r = json_loads(r.data)["data"] self.assertEqual(20, len(r))
def test_delete_editors(self): self.assert401("/api/1.0/editors", method="DELETE") self.assert403("/api/1.0/editors", method="DELETE", **STU1_USER) self.delete_with_auth("/api/1.0/editors/1", **ADMIN_USER) self.assert404("/api/1.0/editors/1") r = self.assert200('/api/1.0/editors') r = json_loads(r.data)["data"] self.assertEqual(0, len(r))