From 30f00d80118f7787dc413352aadda80a4e09bc2c Mon Sep 17 00:00:00 2001 From: florian <f.spreckelsen@inidscale.com> Date: Fri, 6 Aug 2021 14:54:49 +0200 Subject: [PATCH] ENH: Add Test for queries with retrieve --- test/test_transaction.cpp | 104 +++++++++++++++++++++++++++++++++++++- 1 file changed, 102 insertions(+), 2 deletions(-) diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp index b87f1eb..4257d3e 100644 --- a/test/test_transaction.cpp +++ b/test/test_transaction.cpp @@ -540,7 +540,107 @@ TEST(test_transaction, test_query) { EXPECT_EQ(count_query_trans->GetCountResult(), 1); } -// TODO(fspreck) Add tests for unique queries, count queries, and mixed -// transactions (FIND + RetrieveById, COUNT + RetrieveById). +// TODO(fspreck) Add tests for unique queries + +TEST(test_transaction, test_query_with_retrieve) { + const auto &connection = + caosdb::connection::ConnectionManager::GetDefaultConnection(); + + // rt1 + Entity rt1; + rt1.SetRole("RecordType"); + rt1.SetName("TestRT1"); + + auto insert_rt1_transaction(connection->CreateTransaction()); + insert_rt1_transaction->InsertEntity(&rt1); + insert_rt1_transaction->ExecuteAsynchronously(); + + auto insert_rt1_status = insert_rt1_transaction->WaitForIt(); + + ASSERT_TRUE(insert_rt1_status.IsTerminated()); + ASSERT_FALSE(insert_rt1_status.IsError()); + + const auto &insert_rt1_results = + dynamic_cast<const UniqueResult &>(insert_rt1_transaction->GetResultSet()); + + const auto &inserted_rt1 = insert_rt1_results.GetEntity(); + EXPECT_FALSE(inserted_rt1.GetId().empty()); + EXPECT_FALSE(inserted_rt1.HasErrors()); + + // rt2 + Entity rt2; + rt2.SetRole("RecordType"); + rt2.SetName("TestRT2"); + + auto insert_rt2_transaction(connection->CreateTransaction()); + insert_rt2_transaction->InsertEntity(&rt2); + insert_rt2_transaction->ExecuteAsynchronously(); + + auto insert_rt2_status = insert_rt2_transaction->WaitForIt(); + + ASSERT_TRUE(insert_rt2_status.IsTerminated()); + ASSERT_FALSE(insert_rt2_status.IsError()); + + const auto &insert_rt2_results = + dynamic_cast<const UniqueResult &>(insert_rt2_transaction->GetResultSet()); + + const auto &inserted_rt2 = insert_rt2_results.GetEntity(); + EXPECT_FALSE(inserted_rt2.GetId().empty()); + EXPECT_FALSE(inserted_rt2.HasErrors()); + + // rt3 + Entity rt3; + rt3.SetRole("RecordType"); + rt3.SetName("TestRT3"); + + auto insert_rt3_transaction(connection->CreateTransaction()); + insert_rt3_transaction->InsertEntity(&rt3); + insert_rt3_transaction->ExecuteAsynchronously(); + + auto insert_rt3_status = insert_rt3_transaction->WaitForIt(); + + ASSERT_TRUE(insert_rt3_status.IsTerminated()); + ASSERT_FALSE(insert_rt3_status.IsError()); + + const auto &insert_rt3_results = + dynamic_cast<const UniqueResult &>(insert_rt3_transaction->GetResultSet()); + + const auto &inserted_rt3 = insert_rt3_results.GetEntity(); + EXPECT_FALSE(inserted_rt3.GetId().empty()); + EXPECT_FALSE(inserted_rt3.HasErrors()); + + // only retrieve rt1 and rt2 by id + const std::vector<std::string> ids = {inserted_rt1.GetId(), + inserted_rt2.GetId()}; + + // retrieve rt3 with a FIND query + auto find_and_retrieve(connection->CreateTransaction()); + find_and_retrieve->Query("FIND ENTITY WITH id = " + inserted_rt3.GetId()); + find_and_retrieve->RetrieveById(ids.begin(), ids.end()); + find_and_retrieve->ExecuteAsynchronously(); + + auto find_and_retrieve_status = find_and_retrieve->WaitForIt(); + + ASSERT_TRUE(find_and_retrieve_status.IsTerminated()); + ASSERT_FALSE(find_and_retrieve_status.IsError()); + + const auto &result_set_a = find_and_retrieve->GetResultSet(); + EXPECT_EQ(result_set_a.Size(), 3); + + // retrieve rt1 and rt2 by ID and count all TestRTs + auto count_and_retrieve(connection->CreateTransaction()); + count_and_retrieve->Query("COUNT ENTITY WITH name LIKE 'TestRT*'"); + count_and_retrieve->RetrieveById(ids.begin(), ids.end()); + count_and_retrieve->ExecuteAsynchronously(); + + auto count_and_retrieve_status = count_and_retrieve->WaitForIt(); + + ASSERT_TRUE(count_and_retrieve_status.IsTerminated()); + ASSERT_FALSE(count_and_retrieve_status.IsError()); + + const auto &result_set_b = count_and_retrieve->GetResultSet(); + EXPECT_EQ(result_set_b.Size(), 2); + EXPECT_EQ(count_and_retrieve->GetCountResult(), 3); +} } // namespace caosdb::transaction -- GitLab