diff --git a/core/api/people_finder.py b/core/api/people_finder.py index f2faeac..ef276cf 100644 --- a/core/api/people_finder.py +++ b/core/api/people_finder.py @@ -206,3 +206,22 @@ def get_remote_working(request): return 500, { "message": f"Could not get remote working options, reason: {unknown_error}" } + + +@reference_router.get( + "workday/", + response={ + 200: list[TextChoiceResponseSchema], + 500: Error, + }, +) +def get_workday(request): + try: + workday_options = [ + {"key": key, "value": value} for key, value in core_services.get_workday() + ] + return 200, workday_options + except Exception as unknown_error: + return 500, { + "message": f"Could not get workday options, reason: {unknown_error}" + } diff --git a/core/services.py b/core/services.py index 5819b19..51564dd 100644 --- a/core/services.py +++ b/core/services.py @@ -3,6 +3,7 @@ from typing import Optional from profiles import services as profile_services +from profiles.models import Workday from profiles.models.combined import Profile from profiles.models.generic import Country, UkStaffLocation from profiles.models.peoplefinder import PeopleFinderProfile, RemoteWorking @@ -303,3 +304,10 @@ def get_remote_working() -> list[tuple[RemoteWorking, str]]: Function for getting a list of all remote working options """ return profile_services.get_remote_working() + + +def get_workday() -> list[tuple[Workday, str]]: + """ + Function for getting a list of all workday options + """ + return profile_services.get_workday() diff --git a/docs/apis/people-finder.md b/docs/apis/people-finder.md index 38236c5..0cdce58 100644 --- a/docs/apis/people-finder.md +++ b/docs/apis/people-finder.md @@ -7,3 +7,4 @@ The ID service exposes an API that provides read and edit functionality designed #### Reference data can be accessed via `/api/peoplefinder/reference//`. Here is the list of reference endpoints: `remote_working/` : lists remote working options +`workday/` : lists workday options diff --git a/e2e_tests/test_peoplefinder.py b/e2e_tests/test_peoplefinder.py index 4c8e1d2..2631d0c 100644 --- a/e2e_tests/test_peoplefinder.py +++ b/e2e_tests/test_peoplefinder.py @@ -6,6 +6,7 @@ from django.urls import reverse from core.schemas.peoplefinder import CreateProfileRequest +from profiles.models import Workday from profiles.models.peoplefinder import RemoteWorking @@ -50,6 +51,11 @@ def test_get_profile(peoplefinder_profile): url = reverse("people-finder:get_profile", args=(str(uuid.uuid4()),)) + response = client.get( + url, + content_type="application/json", + ) + assert response.status_code == 404 @@ -124,6 +130,11 @@ def test_get_remote_working(mocker): }, ) + response = client.get( + url, + content_type="application/json", + ) + assert response.status_code == 500 assert json.loads(response.content) == { "message": "Could not get remote working options, reason: too many values to unpack (expected 2)" @@ -143,3 +154,52 @@ def test_get_remote_working(mocker): assert json.loads(response.content) == { "message": "Could not get remote working options, reason: mocked-test-exception" } + + +def test_get_workday(mocker): + url = reverse("people-finder:get_workday") + client = Client() + response = client.get( + url, + content_type="application/json", + ) + assert response.status_code == 200 + assert json.loads(response.content) == [ + {"key": key, "value": value} for key, value in Workday.choices + ] + + mocker.patch( + "core.services.get_workday", + return_value={ + "Monday": "Mon", + "Tuesday": "Tue", + "Wednesday": "Wed", + "Thursday": "Thu", + "Friday": "Fri", + "Saturday": "Sat", + "Sunday": "Sun", + }, + ) + + response = client.get( + url, + content_type="application/json", + ) + + assert response.status_code == 500 + assert json.loads(response.content) == { + "message": "Could not get workday options, reason: too many values to unpack (expected 2)" + } + + mocker.patch( + "core.services.get_workday", side_effect=Exception("mocked-test-exception") + ) + response = client.get( + url, + content_type="application/json", + ) + + assert response.status_code == 500 + assert json.loads(response.content) == { + "message": "Could not get workday options, reason: mocked-test-exception" + } diff --git a/profiles/services/__init__.py b/profiles/services/__init__.py index e784d65..1d816e9 100644 --- a/profiles/services/__init__.py +++ b/profiles/services/__init__.py @@ -7,6 +7,7 @@ from django.db import models from profiles.exceptions import NonCombinedProfileExists +from profiles.models import Workday from profiles.models.combined import Profile from profiles.models.generic import Country, UkStaffLocation from profiles.models.peoplefinder import PeopleFinderProfile, RemoteWorking @@ -419,3 +420,10 @@ def get_remote_working() -> list[tuple[RemoteWorking, str]]: Gets all remote working options """ return peoplefinder.get_remote_working() + + +def get_workday() -> list[tuple[Workday, str]]: + """ + Gets all workday options + """ + return peoplefinder.get_workday() diff --git a/profiles/services/peoplefinder.py b/profiles/services/peoplefinder.py index 08d080b..aa0e179 100644 --- a/profiles/services/peoplefinder.py +++ b/profiles/services/peoplefinder.py @@ -6,6 +6,7 @@ from django.contrib.auth import get_user_model from profiles.exceptions import ProfileExists +from profiles.models import Workday from profiles.models.generic import Country, Email, UkStaffLocation from profiles.models.peoplefinder import PeopleFinderProfile, RemoteWorking from profiles.types import UNSET, Unset @@ -447,3 +448,10 @@ def get_remote_working() -> list[tuple[RemoteWorking, str]]: Gets all remote working options """ return RemoteWorking.choices + + +def get_workday() -> list[tuple[Workday, str]]: + """ + Gets all workday options + """ + return Workday.choices diff --git a/profiles/tests/test_services_peoplefinder.py b/profiles/tests/test_services_peoplefinder.py index 9da60db..1c9dd3f 100644 --- a/profiles/tests/test_services_peoplefinder.py +++ b/profiles/tests/test_services_peoplefinder.py @@ -150,3 +150,17 @@ def test_get_remote_working_options(): ("remote_worker", "Remote Worker"), ("split", "Split"), ] + + +def test_get_workday_options(): + options = peoplefinder_services.get_workday() + + assert options == [ + ("Monday", "Mon"), + ("Tuesday", "Tue"), + ("Wednesday", "Wed"), + ("Thursday", "Thu"), + ("Friday", "Fri"), + ("Saturday", "Sat"), + ("Sunday", "Sun"), + ]