From e3a335894b69c4ba0d414c27bffb967c1d535801 Mon Sep 17 00:00:00 2001 From: Arun Siluvery Date: Mon, 15 Apr 2024 12:17:45 +0100 Subject: [PATCH] Expose Closed case status to users --- caseworker/core/services.py | 1 - .../cases/views/test_change_status.py | 36 +++++++++++++++++++ unit_tests/caseworker/conftest.py | 17 ++++++++- 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/caseworker/core/services.py b/caseworker/core/services.py index 45d7d4cdf6..d18f769a19 100644 --- a/caseworker/core/services.py +++ b/caseworker/core/services.py @@ -80,7 +80,6 @@ def get_permissible_statuses(request, case): if status["key"] not in [ CaseStatusEnum.APPLICANT_EDITING, - CaseStatusEnum.CLOSED, CaseStatusEnum.FINALISED, CaseStatusEnum.REGISTERED, CaseStatusEnum.CLC, diff --git a/unit_tests/caseworker/cases/views/test_change_status.py b/unit_tests/caseworker/cases/views/test_change_status.py index 023cf0472e..eb7a63144c 100644 --- a/unit_tests/caseworker/cases/views/test_change_status.py +++ b/unit_tests/caseworker/cases/views/test_change_status.py @@ -125,6 +125,42 @@ def test_change_status_GET_provides_finalise_status( assert (CaseStatusEnum.FINALISED in statuses) == expected +@pytest.mark.parametrize( + "gov_user_type,expected", + [ + ("mock_gov_tau_user", False), + ("mock_gov_fcdo_user", False), + ("mock_gov_desnz_nuclear_user", False), + ("mock_gov_lu_user", False), + ("mock_gov_lu_super_user", True), + ], +) +def test_closed_status_visible_to_specific_roles( + authorized_client, + change_status_url, + case_id, + gov_user_type, + expected, + request, +): + _ = request.getfixturevalue(gov_user_type) + + response = authorized_client.get(change_status_url) + assert response.status_code == 200 + + assertTemplateUsed(response, "layouts/case.html") + context = response.context + assert context["case"].id == case_id + + html = BeautifulSoup(response.content, "html.parser") + all_h1s = [elem.get_text().strip() for elem in html.find_all("h1")] + assert "Change case status" in all_h1s + + # Only LU users get an option set the status as 'Finalised' + statuses = [item["value"] for item in html.find_all("option")] + assert (CaseStatusEnum.CLOSED in statuses) == expected + + def test_change_status_success( authorized_client, case_url, diff --git a/unit_tests/caseworker/conftest.py b/unit_tests/caseworker/conftest.py index 5ebcedec2d..affed79ce6 100644 --- a/unit_tests/caseworker/conftest.py +++ b/unit_tests/caseworker/conftest.py @@ -649,6 +649,22 @@ def mock_gov_lu_user(requests_mock, mock_notifications, mock_case_statuses, mock requests_mock.get(url=re.compile(f"{url}{gov_uk_user_id}/"), json=mock_gov_user) +@pytest.fixture +def mock_gov_lu_super_user(requests_mock, mock_notifications, mock_case_statuses, mock_gov_user, gov_uk_user_id): + mock_gov_user["user"]["team"] = { + "id": "521154de-f39e-45bf-9922-baaaaaa", + "name": "Licencing Unit", + "alias": "LICENSING_UNIT", + } + mock_gov_user["user"]["role"]["statuses"].extend( + [{"id": "00000000-0000-0000-0000-000000000009", "key": "closed", "value": "Closed", "priority": 16}] + ) + + url = client._build_absolute_uri("/gov-users/") + requests_mock.get(url=f"{url}me/", json=mock_gov_user) + requests_mock.get(url=re.compile(f"{url}{gov_uk_user_id}/"), json=mock_gov_user) + + @pytest.fixture def mock_notifications(requests_mock): url = client._build_absolute_uri("/gov-users/notifications/") @@ -1605,7 +1621,6 @@ def mock_case_statuses(requests_mock): "priority": 14, }, {"id": "00000000-0000-0000-0000-000000000008", "key": "withdrawn", "value": "Withdrawn", "priority": 15}, - {"id": "00000000-0000-0000-0000-000000000009", "key": "closed", "value": "Closed", "priority": 16}, {"id": "00000000-0000-0000-0000-000000000010", "key": "registered", "value": "Registered", "priority": 17}, { "id": "00000000-0000-0000-0000-000000000011",