Skip to content

Commit

Permalink
fix: Delete shared rsources when deleting data entry (#996)
Browse files Browse the repository at this point in the history
  • Loading branch information
josebui authored Nov 22, 2023
1 parent 21ebc02 commit 6307e5a
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
9 changes: 7 additions & 2 deletions terraso_backend/apps/graphql/schema/data_entries.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,9 +238,10 @@ class Input:
id = graphene.ID()

@classmethod
@transaction.atomic
def mutate_and_get_payload(cls, root, info, **kwargs):
user = info.context.user
data_entry = DataEntry.objects.get(pk=kwargs["id"])
data_entry = DataEntry.all_objects.get(pk=kwargs["id"])

if not user.has_perm(DataEntry.get_perm("delete"), obj=data_entry):
logger.info(
Expand All @@ -250,4 +251,8 @@ def mutate_and_get_payload(cls, root, info, **kwargs):
raise GraphQLNotAllowedException(
model_name=DataEntry.__name__, operation=MutationTypes.DELETE
)
return super().mutate_and_get_payload(root, info, **kwargs)

data_entry.shared_resources.all().delete()
data_entry.delete()

return cls(data_entry=data_entry)
Original file line number Diff line number Diff line change
Expand Up @@ -248,3 +248,34 @@ def test_data_entry_delete_by_manager_fails_due_to_membership_approval_status(

assert "errors" in response["data"]["deleteDataEntry"]
assert "delete_not_allowed" in response["data"]["deleteDataEntry"]["errors"][0]["message"]


def test_data_entry_delete_not_showing_in_query(
client_query, landscape_data_entries, users, landscapes
):
old_data_entry = landscape_data_entries[0]

assert landscapes[0].shared_resources.filter(source_object_id=old_data_entry.id).exists()

response = client_query(
"""
mutation deleteDataEntry($input: DataEntryDeleteMutationInput!){
deleteDataEntry(input: $input) {
dataEntry {
name
}
errors
}
}
""",
variables={"input": {"id": str(old_data_entry.id)}},
)

json_response = response.json()
data_entry_result = json_response["data"]["deleteDataEntry"]["dataEntry"]

assert data_entry_result["name"] == old_data_entry.name
assert not DataEntry.objects.filter(name=data_entry_result["name"])

assert not landscapes[0].shared_resources.filter(source_object_id=old_data_entry.id).exists()

0 comments on commit 6307e5a

Please sign in to comment.