From 9592c098d39d76af41ffea012fb40dc95e999b2d Mon Sep 17 00:00:00 2001 From: florian <f.spreckelsen@inidscale.com> Date: Tue, 3 Aug 2021 14:28:33 +0200 Subject: [PATCH] ENH: Test insertion with parent --- test/test_transaction.cpp | 66 ++++++++++++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 7 deletions(-) diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp index 2df69a4..0577666 100644 --- a/test/test_transaction.cpp +++ b/test/test_transaction.cpp @@ -139,25 +139,77 @@ TEST(test_transaction, insert_delete) { EXPECT_FALSE(deleted_entity.HasErrors()); } -// TODO(fspreck) Insert an RT and a Record of this type, check -// whether this is reflected correctly in the inserted Record, then -// delete everything. +// TODO(fspreck) Simplify inserts and deletes once we have +// multi-entity operations TEST(test_transaction, insert_delete_with_parent) { const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection(); auto insert_transaction(connection->CreateTransaction()); - Entity entity; - entity.SetRole("RecordType"); - entity.SetName("RT1"); - insert_transaction->InsertEntity(&entity); + Entity rt; + rt.SetRole("RecordType"); + rt.SetName("TestRT"); + 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 = + dynamic_cast<const UniqueResult &>(insert_transaction->GetResultSet()); + + const auto &inserted_rt = insert_result_set.GetEntity(); + + Entity rec; + rec.SetRole("Record"); + rec.SetName("TestRec"); + + Parent parent; + parent.SetName(rt.GetName()); + rec.AppendParent(parent); + + 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()); + ASSERT_FALSE(rec_insert_status.IsError()); + + const auto &rec_result_set = + dynamic_cast<const UniqueResult &>(rec_transaction->GetResultSet()); + + const auto &inserted_rec = rec_result_set.GetEntity(); + + EXPECT_EQ(inserted_rec.GetName(), rec.GetName()); + EXPECT_EQ(inserted_rec.GetParents().Size(), 1); + EXPECT_EQ(inserted_rec.GetParents().At(0).GetId(), inserted_rt.GetId()); + EXPECT_EQ(inserted_rec.GetParents().At(0).GetName(), inserted_rt.GetName()); + + 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()); + + 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()); + } // TODO(fspreck) Insert a Record with a parent and a Property. Check -- GitLab