From c3823fb2f35a5a34a9b623d9298735ad744bb772 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Mon, 2 Aug 2021 15:10:52 +0200
Subject: [PATCH] WIP: update entity

---
 test/test_transaction.cpp | 62 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)

diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp
index 630f78b..26d7732 100644
--- a/test/test_transaction.cpp
+++ b/test/test_transaction.cpp
@@ -166,4 +166,66 @@ TEST(test_transaction, test_multi_retrieve) {
             MessageCode::ENTITY_DOES_NOT_EXIST);
 }
 
+TEST(test_transaction, insert_update_delete) {
+  const auto &connection =
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
+
+  // INSERT
+  auto insert_transaction(connection->CreateTransaction());
+
+  Entity entity;
+  entity.SetRole("RecordType");
+  entity.SetName("RT1");
+  insert_transaction->InsertEntity(&entity);
+  insert_transaction->ExecuteAsynchronously();
+
+  auto insert_status = insert_transaction->WaitForIt();
+
+  ASSERT_TRUE(insert_status.IsTerminated());
+  ASSERT_FALSE(insert_status.IsError());
+
+  const auto &insert_result_set =
+    dynamic_cast<const UniqueResult &>(insert_transaction->GetResultSet());
+
+  const auto &new_entity = insert_result_set.GetEntity();
+  EXPECT_FALSE(new_entity.GetId().empty());
+  EXPECT_EQ(new_entity.GetName(), "RT1");
+  EXPECT_FALSE(new_entity.HasErrors());
+
+  // UPDATE
+  auto update_transaction(connection->CreateTransaction());
+  auto update_entity = insert_result_set.GetEntity();
+  update_entity.SetName("RT1-Update");
+
+  update_transaction->UpdateEntity(update_entity);
+  update_transaction->ExecuteAsynchronously();
+  auto update_status = update_transaction->WaitForIt();
+
+  const auto &update_result_set =
+    dynamic_cast<const UniqueResult &>(update_transaction->GetResultSet());
+  const auto &updated_entity = insert_result_set.GetEntity();
+  EXPECT_EQ(updated_entity.GetId(), new_entity.GetId());
+  EXPECT_EQ(updated_entity.GetName(), "RT1-Update");
+  EXPECT_NEQ(updated_entity.GetVersionId(), new_entity.GetVersionId());
+  EXPECT_FALSE(updated_entity.HasErrors());
+
+  // DELETE
+  auto delete_transaction(connection->CreateTransaction());
+
+  delete_transaction->DeleteById(new_entity.GetId());
+  delete_transaction->ExecuteAsynchronously();
+
+  auto delete_status = delete_transaction->WaitForIt();
+
+  ASSERT_TRUE(delete_status.IsTerminated());
+  ASSERT_FALSE(delete_status.IsError());
+
+  const auto &delete_result_set =
+    dynamic_cast<const UniqueResult &>(delete_transaction->GetResultSet());
+
+  const auto &deleted_entity = delete_result_set.GetEntity();
+  EXPECT_EQ(deleted_entity.GetId(), new_entity.GetId());
+  EXPECT_FALSE(deleted_entity.HasErrors());
+}
+
 } // namespace caosdb::transaction
-- 
GitLab