diff --git a/openlobby/core/api/mutations.py b/openlobby/core/api/mutations.py index 8eb754319edf2cc398062a1d51c9c3374e6f546f..14d6f0d5aab3424946f7fc086551f57d10685338 100644 --- a/openlobby/core/api/mutations.py +++ b/openlobby/core/api/mutations.py @@ -174,6 +174,9 @@ class UpdateReport(relay.ClientIDMutation): "Viewer is not the Author of this Report or Report does not exist." ) + if report.superseded_by_id is not None: + raise Exception("You cannot update superseded Report.") + is_draft = input.get("is_draft") if is_draft and not report.is_draft: diff --git a/tests/mutations/snapshots/snap_test_update_report.py b/tests/mutations/snapshots/snap_test_update_report.py index 3c737e7876f465e271c65493ad782794c6eefbf9..32aa1adbe63f1e4835ba3ecb271fc773e75af2fe 100644 --- a/tests/mutations/snapshots/snap_test_update_report.py +++ b/tests/mutations/snapshots/snap_test_update_report.py @@ -465,3 +465,43 @@ snapshots['test_update_published_with_published__late_edit 3'] = { 'superseded_by_id': 666, 'title': 'Original' } + +snapshots['test_update_superseded_with_draft 1'] = { + 'data': { + 'updateReport': None + }, + 'errors': [ + { + 'locations': [ + { + 'column': 5, + 'line': 3 + } + ], + 'message': 'You cannot update superseded Report.', + 'path': [ + 'updateReport' + ] + } + ] +} + +snapshots['test_update_superseded_with_published 1'] = { + 'data': { + 'updateReport': None + }, + 'errors': [ + { + 'locations': [ + { + 'column': 5, + 'line': 3 + } + ], + 'message': 'You cannot update superseded Report.', + 'path': [ + 'updateReport' + ] + } + ] +} diff --git a/tests/mutations/test_update_report.py b/tests/mutations/test_update_report.py index d27d5bd991b6db404fe1104cf117ab4b824c4e68..ef883b8bb9207946b1bfe6d353d1af17c31aac46 100644 --- a/tests/mutations/test_update_report.py +++ b/tests/mutations/test_update_report.py @@ -77,12 +77,19 @@ def original_report(author_fix, report_factory): @pytest.fixture -def original_report_draft(original_report): +def original_draft(original_report): original_report.is_draft = True original_report.save() return original_report +@pytest.fixture +def original_superseded(report, original_report): + original_report.superseded_by_id = report.id + original_report.save() + return original_report + + def prepare_input(is_draft=False, id=1): return { "id": to_global_id("Report", id), @@ -121,46 +128,56 @@ def test_update_published_with_draft(call_api, snapshot, original_report): snapshot.assert_match(response) -def test_update_draft_with_draft(call_api, snapshot, original_report_draft): - input = prepare_input(id=original_report_draft.id, is_draft=True) +def test_update_superseded_with_draft(call_api, snapshot, original_superseded): + input = prepare_input(id=original_superseded.id, is_draft=True) + response = call_api(query, input, original_superseded.author) + snapshot.assert_match(response) + + +def test_update_superseded_with_published(call_api, snapshot, original_superseded): + input = prepare_input(id=original_superseded.id) + response = call_api(query, input, original_superseded.author) + snapshot.assert_match(response) + + +def test_update_draft_with_draft(call_api, snapshot, original_draft): + input = prepare_input(id=original_draft.id, is_draft=True) with patch("openlobby.core.api.mutations.arrow.utcnow", return_value=edited): - response = call_api(query, input, original_report_draft.author) + response = call_api(query, input, original_draft.author) snapshot.assert_match(response) reports = list(map(dates_to_iso, Report.objects.all().values())) snapshot.assert_match(reports) -def test_update_draft_with_draft__late_edit(call_api, snapshot, original_report_draft): - input = prepare_input(id=original_report_draft.id, is_draft=True) +def test_update_draft_with_draft__late_edit(call_api, snapshot, original_draft): + input = prepare_input(id=original_draft.id, is_draft=True) with patch("openlobby.core.api.mutations.arrow.utcnow", return_value=late_edited): - response = call_api(query, input, original_report_draft.author) + response = call_api(query, input, original_draft.author) snapshot.assert_match(response) reports = list(map(dates_to_iso, Report.objects.all().values())) snapshot.assert_match(reports) -def test_update_draft_with_published(call_api, snapshot, original_report_draft): - input = prepare_input(id=original_report_draft.id) +def test_update_draft_with_published(call_api, snapshot, original_draft): + input = prepare_input(id=original_draft.id) with patch("openlobby.core.api.mutations.arrow.utcnow", return_value=edited): - response = call_api(query, input, original_report_draft.author) + response = call_api(query, input, original_draft.author) snapshot.assert_match(response) reports = list(map(dates_to_iso, Report.objects.all().values())) snapshot.assert_match(reports) -def test_update_draft_with_published__late_edit( - call_api, snapshot, original_report_draft -): - input = prepare_input(id=original_report_draft.id) +def test_update_draft_with_published__late_edit(call_api, snapshot, original_draft): + input = prepare_input(id=original_draft.id) with patch("openlobby.core.api.mutations.arrow.utcnow", return_value=late_edited): - response = call_api(query, input, original_report_draft.author) + response = call_api(query, input, original_draft.author) snapshot.assert_match(response) reports = list(map(dates_to_iso, Report.objects.all().values()))