From f589ed063e73f693c55cd07b68fc38f318dce969 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Fri, 2 Jul 2021 16:49:14 +0200 Subject: [PATCH] add contacttypes seed and endpoint --- data/seed_data/contacttypes.csv | 10 +++++++ ki/actions/seed.py | 28 +++++++++++++------ ki/routes.py | 8 +++++- ki/test/test_contacttypes_endpoint.py | 40 +++++++++++++++++++++++++++ ki/test/test_profile_endpoint.py | 6 ++-- 5 files changed, 80 insertions(+), 12 deletions(-) create mode 100644 data/seed_data/contacttypes.csv create mode 100644 ki/test/test_contacttypes_endpoint.py diff --git a/data/seed_data/contacttypes.csv b/data/seed_data/contacttypes.csv new file mode 100644 index 0000000..bfc5d83 --- /dev/null +++ b/data/seed_data/contacttypes.csv @@ -0,0 +1,10 @@ +id,name +1,E-Mail +2,Mobiltelefon +3,Festnetz +4,Matrix +5,Mastodon +6,Telegram +7,Jabber/XMPP +8,Web +9,Twitter diff --git a/ki/actions/seed.py b/ki/actions/seed.py index e889c89..272595c 100644 --- a/ki/actions/seed.py +++ b/ki/actions/seed.py @@ -5,7 +5,25 @@ from app import app, db from ki.models import Address, Contact, ContactType, Language, Skill, Profile, ProfileLanguage, ProfileSkill, User +def seed_contacttypes(): + contacttypes_seed_file_path = app.config["KI_DATA_DIR"] + "/seed_data/contacttypes.csv" + + logging.info("importing contacttypes") + + with open(contacttypes_seed_file_path) as file: + csv_reader = csv.DictReader(file) + + for contacttype in csv_reader: + id = int(contacttype["id"]) + db_contacttype = ContactType.query.get(id) + + if db_contacttype is None: + db.session.add(ContactType(id=int(contacttype["id"]), name=contacttype["name"])) + + def seed(dev: bool): + seed_contacttypes() + skill_seed_file_path = app.config["KI_DATA_DIR"] + "/seed_data/skills.csv" logging.info("importing skills") @@ -47,16 +65,10 @@ def seed(dev: bool): user=peter) db.session.add(peters_profile) - matrix_type = ContactType(name="Matrix") - db.session.add(matrix_type) - - matrix_contact = Contact(profile=peters_profile, contacttype=matrix_type, content="@peter:wtf-eg.de") + matrix_contact = Contact(profile=peters_profile, contacttype_id=4, content="@peter:wtf-eg.de") db.session.add(matrix_contact) - email_type = ContactType(name="E-Mail") - db.session.add(email_type) - - email_contact = Contact(profile=peters_profile, contacttype=email_type, content="peter@wtf-eg.de") + email_contact = Contact(profile=peters_profile, contacttype_id=1, content="peter@wtf-eg.de") db.session.add(email_contact) peters_address = Address(name="Peter Nichtlustig", diff --git a/ki/routes.py b/ki/routes.py index ac13884..51cec70 100644 --- a/ki/routes.py +++ b/ki/routes.py @@ -4,7 +4,7 @@ from functools import wraps from ki.auth import auth from ki.handlers import update_profile as update_profile_handler -from ki.models import Language, Skill, Token, User +from ki.models import ContactType, Language, Skill, Token, User from app import app @@ -133,6 +133,12 @@ def update_profile(user_id): return update_profile_handler(int(user_id)) +@app.route("/contacttypes") +@token_auth +def get_contacttypes(): + return handle_completion_request(ContactType, "contacttypes") + + @app.route("/skills") @token_auth def get_skills(): diff --git a/ki/test/test_contacttypes_endpoint.py b/ki/test/test_contacttypes_endpoint.py new file mode 100644 index 0000000..be79d14 --- /dev/null +++ b/ki/test/test_contacttypes_endpoint.py @@ -0,0 +1,40 @@ +import unittest + +from ki.test.ApiTest import ApiTest + + +class TestContactTypesEndpoint(ApiTest): + def test_skills_options(self): + response = self.client.options("/contacttypes") + self.assertEqual(response.status_code, 200) + self.assertIn("Access-Control-Allow-Origin", response.headers) + self.assertEqual(response.headers["Access-Control-Allow-Origin"], "*") + + def test_get_contacttypes_unauthorised(self): + response = self.client.get("/contacttypes?search=m") + self.assertEqual(response.status_code, 401) + + def test_get_contacttypes(self): + token = self.login("peter", "geheim")["token"] + + response = self.client.get("/contacttypes?search=m", headers={"Authorization": "Bearer " + token}) + self.assertEqual(response.status_code, 200) + self.assertEqual( + { + "contacttypes": [{ + "id": 5, + "name": "Mastodon" + }, { + "id": 4, + "name": "Matrix" + }, { + "id": 2, + "name": "Mobiltelefon" + }] + }, response.json) + self.assertIn("Access-Control-Allow-Origin", response.headers) + self.assertEqual(response.headers["Access-Control-Allow-Origin"], "*") + + +if __name__ == "main": + unittest.main() diff --git a/ki/test/test_profile_endpoint.py b/ki/test/test_profile_endpoint.py index 33b786b..7ee583e 100644 --- a/ki/test/test_profile_endpoint.py +++ b/ki/test/test_profile_endpoint.py @@ -43,7 +43,7 @@ class TestProfileEndpoint(ApiTest): "contacts": [{ "id": 1, "contacttype": { - "id": 1, + "id": 4, "name": "Matrix" }, "content": "@peeda:wtf-eg.de" @@ -179,7 +179,7 @@ class TestProfileEndpoint(ApiTest): "id": 1, "profile_id": 1, "contacttype": { - "id": 1, + "id": 4, "name": "Matrix" }, "content": "@peter:wtf-eg.de" @@ -187,7 +187,7 @@ class TestProfileEndpoint(ApiTest): "id": 2, "profile_id": 1, "contacttype": { - "id": 2, + "id": 1, "name": "E-Mail" }, "content": "peter@wtf-eg.de"