Skip to content
Snippets Groups Projects

ENH: Add tests for queries

1 file
+ 102
2
Compare changes
  • Side-by-side
  • Inline
+ 102
2
@@ -540,7 +540,107 @@ TEST(test_transaction, test_query) {
@@ -540,7 +540,107 @@ TEST(test_transaction, test_query) {
EXPECT_EQ(count_query_trans->GetCountResult(), 1);
EXPECT_EQ(count_query_trans->GetCountResult(), 1);
}
}
// TODO(fspreck) Add tests for unique queries, count queries, and mixed
// TODO(fspreck) Add tests for unique queries
// transactions (FIND + RetrieveById, COUNT + RetrieveById).
 
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
} // namespace caosdb::transaction
Loading