From bd035ce1889aba25ba87b328555e5f4381791b19 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Fri, 6 Aug 2021 17:20:12 +0200
Subject: [PATCH] refactoring of teardown

---
 test/test_transaction.cpp | 83 +++++++++++++++++++--------------------
 1 file changed, 41 insertions(+), 42 deletions(-)

diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp
index 0bdfe45..79cdb12 100644
--- a/test/test_transaction.cpp
+++ b/test/test_transaction.cpp
@@ -47,16 +47,16 @@ protected:
     query_transaction->Query("FIND ENTITY WITH id > 99");
     query_transaction->Execute();
     if (query_transaction->GetResultSet().Size() > 0) {
+      auto delete_transaction(connection->CreateTransaction());
       for (const Entity &entity : query_transaction->GetResultSet()) {
-        auto delete_transaction(connection->CreateTransaction());
         delete_transaction->DeleteById(entity.GetId());
-        delete_transaction->Execute();
       }
+      delete_transaction->Execute();
     }
   }
 };
 
-TEST(test_transaction, DISABLED_retrieve_manufacturer_by_id) {
+TEST_F(test_transaction, DISABLED_retrieve_manufacturer_by_id) {
   const auto &connection =
     caosdb::connection::ConnectionManager::GetDefaultConnection();
 
@@ -81,7 +81,7 @@ TEST(test_transaction, DISABLED_retrieve_manufacturer_by_id) {
   EXPECT_EQ(version, entity.GetVersionId());
 }
 
-TEST(test_transaction, retrieve_non_existing) {
+TEST_F(test_transaction, retrieve_non_existing) {
   const auto &connection =
     caosdb::connection::ConnectionManager::GetDefaultConnection();
 
@@ -106,7 +106,37 @@ TEST(test_transaction, retrieve_non_existing) {
             MessageCode::ENTITY_DOES_NOT_EXIST);
 }
 
-TEST(test_transaction, insert_delete) {
+TEST_F(test_transaction, insert_without_delete) {
+  const auto &connection =
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
+
+  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_FALSE(new_entity.HasErrors());
+  // Should have a warning since it has no properties
+  EXPECT_TRUE(new_entity.HasWarnings());
+  EXPECT_EQ(new_entity.GetWarnings().Size(), 1);
+  EXPECT_EQ(new_entity.GetWarnings().At(0).GetCode(),
+            MessageCode::ENTITY_HAS_NO_PROPERTIES);
+}
+
+TEST_F(test_transaction, insert_delete) {
   const auto &connection =
     caosdb::connection::ConnectionManager::GetDefaultConnection();
 
@@ -153,7 +183,7 @@ TEST(test_transaction, insert_delete) {
   EXPECT_FALSE(deleted_entity.HasErrors());
 }
 
-TEST(test_transaction, insert_delete_with_parent) {
+TEST_F(test_transaction, insert_delete_with_parent) {
   const auto &connection =
     caosdb::connection::ConnectionManager::GetDefaultConnection();
 
@@ -240,9 +270,7 @@ TEST(test_transaction, insert_delete_with_parent) {
   ASSERT_FALSE(rt_delete_status.IsError());
 }
 
-// TODO(fspreck) Insert a Record with a parent and a Property. Check
-// for success and delete everything.
-TEST(test_transaction, insert_delete_with_property) {
+TEST_F(test_transaction, insert_delete_with_property) {
   const auto &connection =
     caosdb::connection::ConnectionManager::GetDefaultConnection();
 
@@ -375,36 +403,9 @@ TEST(test_transaction, insert_delete_with_property) {
   EXPECT_EQ(retrieved_prop_rec.GetId(), inserted_prop.GetId());
   EXPECT_EQ(retrieved_prop_rec.GetDatatype(), prop_ent.GetDatatype());
   EXPECT_EQ(retrieved_prop_rec.GetValue(), prop_rec.GetValue());
-
-  // Delete eveything: First record ...
-  auto rec_deletion(connection->CreateTransaction());
-  rec_deletion->DeleteById(inserted_rec.GetId());
-  rec_deletion->ExecuteAsynchronously();
-
-  auto rec_delete_status = rec_deletion->WaitForIt();
-  ASSERT_TRUE(rec_delete_status.IsTerminated());
-  ASSERT_FALSE(rec_delete_status.IsError());
-
-  // ... then parent ...
-  auto rt_deletion(connection->CreateTransaction());
-  rt_deletion->DeleteById(inserted_rt.GetId());
-  rt_deletion->ExecuteAsynchronously();
-
-  auto rt_delete_status = rt_deletion->WaitForIt();
-  ASSERT_TRUE(rt_delete_status.IsTerminated());
-  ASSERT_FALSE(rt_delete_status.IsError());
-
-  // ... then property.
-  auto prop_deletion(connection->CreateTransaction());
-  prop_deletion->DeleteById(inserted_prop.GetId());
-  prop_deletion->ExecuteAsynchronously();
-
-  auto prop_delete_status = prop_deletion->WaitForIt();
-  ASSERT_TRUE(prop_delete_status.IsTerminated());
-  ASSERT_FALSE(prop_delete_status.IsError());
 }
 
-TEST(test_transaction, test_multi_retrieve) {
+TEST_F(test_transaction, test_multi_retrieve) {
   const auto &connection =
     caosdb::connection::ConnectionManager::GetDefaultConnection();
 
@@ -432,7 +433,7 @@ TEST(test_transaction, test_multi_retrieve) {
             MessageCode::ENTITY_DOES_NOT_EXIST);
 }
 
-TEST(test_transaction, insert_update_delete) {
+TEST_F(test_transaction, insert_update_delete) {
   const auto &connection =
     caosdb::connection::ConnectionManager::GetDefaultConnection();
 
@@ -499,7 +500,7 @@ TEST(test_transaction, insert_update_delete) {
   EXPECT_FALSE(deleted_entity.HasErrors());
 }
 
-TEST(test_transaction, test_query) {
+TEST_F(test_transaction, test_query) {
   const auto &connection =
     caosdb::connection::ConnectionManager::GetDefaultConnection();
 
@@ -540,9 +541,7 @@ TEST(test_transaction, test_query) {
   EXPECT_EQ(count_query_trans->GetCountResult(), 1);
 }
 
-// TODO(fspreck) Add tests for unique queries
-
-TEST(test_transaction, test_query_with_retrieve) {
+TEST_F(test_transaction, test_query_with_retrieve) {
   const auto &connection =
     caosdb::connection::ConnectionManager::GetDefaultConnection();
 
-- 
GitLab