diff --git a/tests/e2e/triggers/on_delete_triggers.cpp b/tests/e2e/triggers/on_delete_triggers.cpp index 55d759864..451f7afb3 100644 --- a/tests/e2e/triggers/on_delete_triggers.cpp +++ b/tests/e2e/triggers/on_delete_triggers.cpp @@ -1,4 +1,4 @@ -// Copyright 2022 Memgraph Ltd. +// Copyright 2023 Memgraph Ltd. // // Use of this software is governed by the Business Source License // included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source @@ -22,11 +22,12 @@ inline constexpr std::string_view kTriggerDeletedVertexLabel{"DELETED_VERTEX"}; inline constexpr std::string_view kTriggerDeletedEdgeLabel{"DELETED_EDGE"}; inline constexpr std::string_view kTriggerDeletedObjectLabel{"DELETED_OBJECT"}; -enum class AllowedTriggerType : uint8_t { - VERTEX, - EDGE, - OBJECT, -}; +inline constexpr std::string_view kTriggerNameOnVertexDeleteTrigger{"DeletedVerticesTrigger"}; +inline constexpr std::string_view kTriggerNameOnEdgeDeleteTrigger{"DeletedEdgesTrigger"}; +inline constexpr std::string_view kTriggerNameOnObjectDeleteTrigger{"DeletedObjectsTrigger"}; +inline constexpr std::string_view kTriggerNameOnObjectDeleteTriggerProc{"DeletedObjectsTriggerProc"}; + +enum class AllowedTriggerType : uint8_t { VERTEX, EDGE, OBJECT, OBJECT_PROC }; void DetachDeleteVertex(mg::Client &client, int vertex_id) { mg::Map parameters{{"id", mg::Value{vertex_id}}}; @@ -47,36 +48,46 @@ void CreateOnDeleteTriggers(mg::Client &client, bool is_before, const auto create_on_vertex_delete_trigger = [&, before_or_after] { client.Execute( - fmt::format("CREATE TRIGGER DeletedVerticesTrigger ON () DELETE " + fmt::format("CREATE TRIGGER {} ON () DELETE " "{} COMMIT " "EXECUTE " "UNWIND deletedVertices as deletedVertex " "CREATE (n: {} {{ id: deletedVertex.id }})", - before_or_after, kTriggerDeletedVertexLabel)); + kTriggerNameOnVertexDeleteTrigger, before_or_after, kTriggerDeletedVertexLabel)); client.DiscardAll(); }; const auto create_on_edge_delete_trigger = [&, before_or_after] { client.Execute( - fmt::format("CREATE TRIGGER DeletedEdgesTrigger ON --> DELETE " + fmt::format("CREATE TRIGGER {} ON --> DELETE " "{} COMMIT " "EXECUTE " "UNWIND deletedEdges as deletedEdge " "CREATE (n: {} {{ id: deletedEdge.id }})", - before_or_after, kTriggerDeletedEdgeLabel)); + kTriggerNameOnEdgeDeleteTrigger, before_or_after, kTriggerDeletedEdgeLabel)); client.DiscardAll(); }; const auto create_on_object_delete_trigger = [&, before_or_after] { client.Execute( - fmt::format("CREATE TRIGGER DeletedObjectsTrigger ON DELETE " + fmt::format("CREATE TRIGGER {} ON DELETE " "{} COMMIT " "EXECUTE " "UNWIND deletedObjects as deletedObjectEvent " "WITH CASE deletedObjectEvent.event_type WHEN \"deleted_vertex\" THEN deletedObjectEvent.vertex.id " "ELSE deletedObjectEvent.edge.id END as id " "CREATE (n: {} {{ id: id }})", - before_or_after, kTriggerDeletedObjectLabel)); + kTriggerNameOnObjectDeleteTrigger, before_or_after, kTriggerDeletedObjectLabel)); + client.DiscardAll(); + }; + + const auto create_on_object_delete_trigger_proc = [&, before_or_after] { + client.Execute( + fmt::format("CREATE TRIGGER {} ON DELETE " + "{} COMMIT " + "EXECUTE " + "CALL write.access_deleted(deletedObjects) YIELD status RETURN status;", + kTriggerNameOnObjectDeleteTriggerProc, before_or_after)); client.DiscardAll(); }; @@ -91,6 +102,8 @@ void CreateOnDeleteTriggers(mg::Client &client, bool is_before, case AllowedTriggerType::OBJECT: create_on_object_delete_trigger(); break; + case AllowedTriggerType::OBJECT_PROC: + create_on_object_delete_trigger_proc(); } } } @@ -99,17 +112,22 @@ void DropOnDeleteTriggers(mg::Client &client, const std::unordered_setExecute("MATCH (n {id:2}), (m {id:3}) CALL write.create_edge(n, m, 'edge') YIELD e RETURN e"); + client->DiscardAll(); + + CreateOnDeleteTriggers(*client, false, {AllowedTriggerType::OBJECT_PROC}); + client->Execute("MATCH (n) DETACH DELETE n;"); + + DropOnDeleteTriggers(*client, {AllowedTriggerType::OBJECT_PROC}); + }; + + run_delete_trigger_access_deleted_object_in_proc(); + return 0; } diff --git a/tests/e2e/triggers/procedures/write.py b/tests/e2e/triggers/procedures/write.py index 297f8362d..19df4ab37 100644 --- a/tests/e2e/triggers/procedures/write.py +++ b/tests/e2e/triggers/procedures/write.py @@ -101,5 +101,5 @@ def access_deleted(ctx: mgp.ProcCtx, event: mgp.Any) -> mgp.Record(status=bool): process_obj(e.from_vertex) process_obj(e.to_vertex) except Exception as e: - return mgp.Record(status=False) + raise e return mgp.Record(status=True)