From ad22160a54b5a3fee4b4e7cba882373203c1eaf4 Mon Sep 17 00:00:00 2001
From: Daniel <d.hornung@indiscale.com>
Date: Mon, 30 Aug 2021 16:25:36 +0200
Subject: [PATCH] TEST: Insert of Entity with wrongly named parent should fail.

---
 test/test_transaction.cpp | 56 ++++++++++++++++++++++++++++++++++++---
 1 file changed, 52 insertions(+), 4 deletions(-)

diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp
index 844c829..cfcd50c 100644
--- a/test/test_transaction.cpp
+++ b/test/test_transaction.cpp
@@ -338,6 +338,56 @@ TEST_F(test_transaction, insert_delete_with_parent) {
   ASSERT_FALSE(rt_delete_status.IsError());
 }
 
+/*
+ * Insert a Record with a parent, which has a wrong name.
+ *
+ * This must result in a server error.
+ */
+TEST_F(test_transaction, insert_parent_with_wrong_name) {
+  const auto &connection =
+      caosdb::connection::ConnectionManager::GetDefaultConnection();
+
+  auto insert_transaction(connection->CreateTransaction());
+
+  // insert RT
+  Entity rt;
+  rt.SetRole(Role::RECORD_TYPE);
+  rt.SetName("Test_RT_Name");
+  insert_transaction->InsertEntity(&rt);
+  insert_transaction->ExecuteAsynchronously();
+
+  auto insert_status = insert_transaction->WaitForIt();
+  ASSERT_TRUE(insert_status.IsTerminated());
+  ASSERT_FALSE(insert_status.IsError());
+
+  const auto &insert_result_set = insert_transaction->GetResultSet();
+  const auto &inserted_rt = insert_result_set.at(0);
+
+  // create Record with parent
+  Entity rec;
+  rec.SetRole(Role::RECORD);
+  rec.SetName("TestRec");
+
+  Parent parent;
+  parent.SetId(inserted_rt.GetId());
+  parent.SetName(rt.GetName() + "_wrong");
+  rec.AppendParent(parent);
+
+  // insert Record
+  auto rec_transaction(connection->CreateTransaction());
+  rec_transaction->InsertEntity(&rec);
+  rec_transaction->ExecuteAsynchronously();
+
+  auto rec_insert_status = rec_transaction->WaitForIt();
+  ASSERT_TRUE(rec_insert_status.IsTerminated());
+  EXPECT_TRUE(rec_insert_status.IsError());
+
+  const auto &rec_result_set = rec_transaction->GetResultSet();
+  const auto &inserted_rec = rec_result_set.at(0);
+
+  std::cout << inserted_rec.ToString() << std::endl;
+}
+
 /*
  * insert a property, record type with that property and a record with it
  */
@@ -695,8 +745,7 @@ auto test_numeric_values_impl(AtomicDataType a_type) -> void {
     auto insert_transaction(connection->CreateTransaction());
     Entity prop;
     prop.SetRole(Role::PROPERTY);
-    const auto name =
-        std::string("Prop ") + std::to_string(i);
+    const auto name = std::string("Prop ") + std::to_string(i);
     std::cout << "Creating: " << name << std::endl;
     prop.SetName(name);
     prop.SetDataType(a_type);
@@ -717,8 +766,7 @@ auto test_numeric_values_impl(AtomicDataType a_type) -> void {
   for (const auto value : values_orig) {
     auto retrieve_transaction(connection->CreateTransaction());
     const auto prop = props_orig[i];
-    const auto name =
-        std::string("Prop ") + std::to_string(i);
+    const auto name = std::string("Prop ") + std::to_string(i);
     std::cout << "Retrieving: " << name << std::endl;
     const auto query = std::string("FIND ENTITY \"") + name + "\"";
     retrieve_transaction->Query(query);
-- 
GitLab