Skip to content
Snippets Groups Projects
Commit 25d3ec54 authored by jan.bednarik's avatar jan.bednarik
Browse files

Disallow updating of superseded reports

parent 2db68603
No related branches found
No related tags found
No related merge requests found
...@@ -174,6 +174,9 @@ class UpdateReport(relay.ClientIDMutation): ...@@ -174,6 +174,9 @@ class UpdateReport(relay.ClientIDMutation):
"Viewer is not the Author of this Report or Report does not exist." "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") is_draft = input.get("is_draft")
if is_draft and not report.is_draft: if is_draft and not report.is_draft:
......
...@@ -465,3 +465,43 @@ snapshots['test_update_published_with_published__late_edit 3'] = { ...@@ -465,3 +465,43 @@ snapshots['test_update_published_with_published__late_edit 3'] = {
'superseded_by_id': 666, 'superseded_by_id': 666,
'title': 'Original' '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'
]
}
]
}
...@@ -77,12 +77,19 @@ def original_report(author_fix, report_factory): ...@@ -77,12 +77,19 @@ def original_report(author_fix, report_factory):
@pytest.fixture @pytest.fixture
def original_report_draft(original_report): def original_draft(original_report):
original_report.is_draft = True original_report.is_draft = True
original_report.save() original_report.save()
return original_report 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): def prepare_input(is_draft=False, id=1):
return { return {
"id": to_global_id("Report", id), "id": to_global_id("Report", id),
...@@ -121,46 +128,56 @@ def test_update_published_with_draft(call_api, snapshot, original_report): ...@@ -121,46 +128,56 @@ def test_update_published_with_draft(call_api, snapshot, original_report):
snapshot.assert_match(response) snapshot.assert_match(response)
def test_update_draft_with_draft(call_api, snapshot, original_report_draft): def test_update_superseded_with_draft(call_api, snapshot, original_superseded):
input = prepare_input(id=original_report_draft.id, is_draft=True) 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): 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) snapshot.assert_match(response)
reports = list(map(dates_to_iso, Report.objects.all().values())) reports = list(map(dates_to_iso, Report.objects.all().values()))
snapshot.assert_match(reports) snapshot.assert_match(reports)
def test_update_draft_with_draft__late_edit(call_api, snapshot, original_report_draft): def test_update_draft_with_draft__late_edit(call_api, snapshot, original_draft):
input = prepare_input(id=original_report_draft.id, is_draft=True) input = prepare_input(id=original_draft.id, is_draft=True)
with patch("openlobby.core.api.mutations.arrow.utcnow", return_value=late_edited): 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) snapshot.assert_match(response)
reports = list(map(dates_to_iso, Report.objects.all().values())) reports = list(map(dates_to_iso, Report.objects.all().values()))
snapshot.assert_match(reports) snapshot.assert_match(reports)
def test_update_draft_with_published(call_api, snapshot, original_report_draft): def test_update_draft_with_published(call_api, snapshot, original_draft):
input = prepare_input(id=original_report_draft.id) input = prepare_input(id=original_draft.id)
with patch("openlobby.core.api.mutations.arrow.utcnow", return_value=edited): 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) snapshot.assert_match(response)
reports = list(map(dates_to_iso, Report.objects.all().values())) reports = list(map(dates_to_iso, Report.objects.all().values()))
snapshot.assert_match(reports) snapshot.assert_match(reports)
def test_update_draft_with_published__late_edit( def test_update_draft_with_published__late_edit(call_api, snapshot, original_draft):
call_api, snapshot, original_report_draft input = prepare_input(id=original_draft.id)
):
input = prepare_input(id=original_report_draft.id)
with patch("openlobby.core.api.mutations.arrow.utcnow", return_value=late_edited): 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) snapshot.assert_match(response)
reports = list(map(dates_to_iso, Report.objects.all().values())) reports = list(map(dates_to_iso, Report.objects.all().values()))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment