diff --git a/ki/actions/seed.py b/ki/actions/seed.py index 170d58f..e314a37 100644 --- a/ki/actions/seed.py +++ b/ki/actions/seed.py @@ -59,6 +59,8 @@ def seed_user(nickname, db.session.add(profile) + return profile + def seed(dev: bool): seed_contacttypes() @@ -145,14 +147,17 @@ def seed(dev: bool): for i in range(1, 20): seed_user(f"babsi{i}", visible=True) - seed_user("dirtydieter", - visible=True, - volunteerwork="Müll sammeln", - availability_status=True, - availability_hours_per_week=24, - availability_text="Nur Nachts!", - freetext="1001010010111!!!", - skills=[(Skill.skill_id_php, 5)]) + dieter = seed_user("dirtydieter", + visible=True, + volunteerwork="Müll sammeln", + availability_status=True, + availability_hours_per_week=24, + availability_text="Nur Nachts!", + freetext="1001010010111!!!", + skills=[(Skill.skill_id_php, 5)]) + + dieters_address = Address(name="Friedrich Witzig", profile=dieter) + db.session.add(dieters_address) all_skills = Skill.query.all() all_profile_skills = [] diff --git a/ki/handlers/find_profiles.py b/ki/handlers/find_profiles.py index 1f11967..69a59c9 100644 --- a/ki/handlers/find_profiles.py +++ b/ki/handlers/find_profiles.py @@ -4,7 +4,7 @@ from flask import make_response, request -from ki.models import Profile, ProfileSkill, Skill, ProfileLanguage, Language +from ki.models import Profile, ProfileSkill, Skill, ProfileLanguage, Language, Address def find_profiles(): @@ -25,13 +25,18 @@ def find_profiles(): .order_by(Profile.nickname) \ .filter(Profile.visible.is_(True)) \ .join(Profile.skills, isouter=True).join(ProfileSkill.skill, isouter=True) \ - .join(Profile.languages, isouter=True).join(ProfileLanguage.language, isouter=True) + .join(Profile.languages, isouter=True).join(ProfileLanguage.language, isouter=True) \ + .join(Address, isouter=True) if "search" in request.args: terms = request.args["search"].split(" ") for term in terms: + query = query.filter( - Profile.nickname.like(f"%{term}%") | Skill.name.like(f"%{term}%") | Language.name.like(f"%{term}%")) + Profile.nickname.like(f"%{term}%") | # noqa: W504 + Skill.name.like(f"%{term}%") | # noqa: W504 + Language.name.like(f"%{term}%") | # noqa: W504 + Address.name.like(f"%{term}%")) if "nickname" in request.args: nickname = request.args.get("nickname") diff --git a/ki/test/test_find_profiles_endpoint.py b/ki/test/test_find_profiles_endpoint.py index 0146721..74eeae3 100644 --- a/ki/test/test_find_profiles_endpoint.py +++ b/ki/test/test_find_profiles_endpoint.py @@ -99,6 +99,14 @@ class TestFindProfilesEndpoint(ApiTest): self.assertDictContainsSubset({"nickname": "jutta"}, response.json["profiles"][0]) self.assertDictContainsSubset({"nickname": "monique"}, response.json["profiles"][1]) + def test_find_dieter_by_name(self): + token = self.login("peter", "geheim")["token"] + + response = self.client.get("/users/profiles?search=friedrich", headers={"Authorization": "Bearer " + token}) + self.assertEqual(response.status_code, 200) + self.assertDictContainsSubset({"total": 1}, response.json) + self.assertDictContainsSubset({"nickname": "dirtydieter"}, response.json["profiles"][0]) + if __name__ == "main": unittest.main()