From 8580dfefdcb40c8b1bfac3dfcf24c3e8963750b0 Mon Sep 17 00:00:00 2001 From: Becky Smith Date: Wed, 28 Feb 2024 14:04:48 +0000 Subject: [PATCH] Tests for uncovered local_db code --- local_db/models.py | 2 +- tests/unit/test_api.py | 50 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/local_db/models.py b/local_db/models.py index ca691416..4f846487 100644 --- a/local_db/models.py +++ b/local_db/models.py @@ -20,7 +20,7 @@ class StatusField(models.TextField): choices = [(i.value, i.name) for i in Status] def from_db_value(self, value, expression, connection): - if value is None: + if value is None: # pragma: no cover return value return Status[value] diff --git a/tests/unit/test_api.py b/tests/unit/test_api.py index a32ff322..d96495c9 100644 --- a/tests/unit/test_api.py +++ b/tests/unit/test_api.py @@ -124,6 +124,47 @@ def test_provider_get_requests_authored_by_user( assert set(r.id for r in api.get_requests_authored_by_user(user)) == set(expected) +@pytest.mark.parametrize( + "output_checker, expected", + [ + # A non-output checker never sees outstanding requests + (False, []), + # An output checker only sees outstanding requests that + # they did not author + (True, ["r1"]), + ], +) +def test_provider_get_outstanding_requests_for_review(output_checker, expected, api): + user = User(1, "test", ["workspace"], output_checker) + other_user = User(1, "other", ["workspace"], False) + # request created by another user, status submitted + factories.create_release_request( + "workspace", other_user, id="r1", status=Status.SUBMITTED + ) + + # requests not visible to output checker + # status submitted, but authored by output checker + factories.create_release_request( + "workspace", user, id="r2", status=Status.SUBMITTED + ) + # requests authored by other users, status other than pending + for i, status in enumerate( + [ + Status.PENDING, + Status.WITHDRAWN, + Status.APPROVED, + Status.REJECTED, + Status.RELEASED, + ] + ): + ws = f"workspace{i}" + factories.create_release_request(ws, User(1, f"test_{i}", [ws]), status=status) + + assert set(r.id for r in api.get_outstanding_requests_for_review(user)) == set( + expected + ) + + def test_provider_get_current_request_for_user(api): workspace = factories.create_workspace("workspace") user = User(1, "testuser", ["workspace"], False) @@ -276,6 +317,15 @@ def test_add_file_to_request_states(status, success, api): assert not release_request.abspath(path).exists() +def test_request_release_invalid_state(): + factories.create_workspace("workspace") + with pytest.raises(AttributeError): + factories.create_release_request( + "workspace", + status="unknown", + ) + + def setup_empty_release_request(): author = User(1, "author", ["workspace"], False) path = Path("path/file.txt")