Skip to content
Snippets Groups Projects
Verified Commit 7c3ed020 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

WIP: tests for select queries

parent 27fc8af1
No related branches found
No related tags found
2 merge requests!28Release 0.2.2,!27F grpc select
Pipeline #30332 failed
...@@ -21,29 +21,41 @@ ...@@ -21,29 +21,41 @@
*/ */
#include "caosdb/connection.h" // for Connection, ConnectionManager #include "caosdb/connection.h" // for Connection, ConnectionManager
#include "caosdb/data_type.h" // for AtomicDataType #include "caosdb/data_type.h" // for AtomicDataType
#include "caosdb/entity.h" // for Entity, Property, Role, Parent
#include "caosdb/result_set.h" // for Entity, ResultSet, ResultSet::ite...
#include "caosdb/result_table.h" // for ResultTable::HeaderIterator, Resu...
#include "caosdb/transaction.h" // for Transaction, ResultTable #include "caosdb/transaction.h" // for Transaction, ResultTable
#include "caosdb/value.h" // for Value #include "caosdb/value.h" // for Value
#include <gtest/gtest-message.h> // for Message #include <gtest/gtest-message.h> // for Message
#include <gtest/gtest-test-part.h> // for SuiteApiResolver, TestFactoryImpl #include <gtest/gtest-test-part.h> // for SuiteApiResolver, TestFactoryImpl
#include <gtest/gtest_pred_impl.h> // for Test, TestInfo, EXPECT_EQ, TEST #include <gtest/gtest_pred_impl.h> // for Test, TestInfo, EXPECT_EQ, TEST
#include <iostream> // for operator<<, basic_ostream::operat...
#include <memory> // for allocator, unique_ptr, __shared_p... #include <memory> // for allocator, unique_ptr, __shared_p...
// #include <string> // for string
namespace caosdb::transaction { namespace caosdb::transaction {
using caosdb::entity::AtomicDataType; using caosdb::entity::AtomicDataType;
using caosdb::entity::Role;
using caosdb::entity::Property;
using caosdb::entity::Parent;
using caosdb::entity::Entity; using caosdb::entity::Entity;
using caosdb::entity::Parent;
using caosdb::entity::Property;
using caosdb::entity::Role;
using caosdb::entity::Value; using caosdb::entity::Value;
class test_select : public ::testing::Test { class test_select : public ::testing::Test {
public: public:
static void InsertEntity(Entity *entity) {
const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
auto insert_transaction(connection->CreateTransaction());
insert_transaction->InsertEntity(entity);
insert_transaction->Execute();
}
static void DeleteEntities() { static void DeleteEntities() {
// delete all entities // delete all entities
const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection(); const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
auto query_transaction(connection->CreateTransaction()); auto query_transaction(connection->CreateTransaction());
query_transaction->Query("FIND Test*"); query_transaction->Query("FIND Entity");
// query_transaction->Query("FIND Test*");
query_transaction->Execute(); query_transaction->Execute();
if (query_transaction->GetResultSet().size() > 0) { if (query_transaction->GetResultSet().size() > 0) {
std::cout << "Cleanup: Deleting " << query_transaction->GetResultSet().size() << " entities." std::cout << "Cleanup: Deleting " << query_transaction->GetResultSet().size() << " entities."
...@@ -56,22 +68,24 @@ public: ...@@ -56,22 +68,24 @@ public:
} }
} }
static auto CreateTestProp() -> Entity { static auto CreateTestProp(const std::string &name, AtomicDataType data_type) -> Entity {
Entity entity; Entity entity;
entity.SetRole(Role::PROPERTY); entity.SetRole(Role::PROPERTY);
entity.SetName("TestProp"); entity.SetName(name);
entity.SetDataType(AtomicDataType::TEXT); entity.SetDescription("Prop Description " + name);
entity.SetDataType(data_type);
return entity; return entity;
} }
static auto CreateTestRT() -> Entity { static auto CreateTestRT() -> Entity {
Entity entity; Entity entity;
entity.SetRole(Role::RECORD_TYPE); entity.SetRole(Role::RECORD_TYPE);
entity.SetDescription("RT Description");
entity.SetName("TestRT"); entity.SetName("TestRT");
return entity; return entity;
} }
static auto CreateRecord(const std::string &property_name, Value value) -> Entity { static auto CreateRecord(const std::string &property_name, const Value &value) -> Entity {
Entity entity; Entity entity;
entity.SetRole(Role::RECORD); entity.SetRole(Role::RECORD);
Parent parent; Parent parent;
...@@ -82,6 +96,11 @@ public: ...@@ -82,6 +96,11 @@ public:
property.SetValue(value); property.SetValue(value);
entity.AppendProperty(property); entity.AppendProperty(property);
Property dummyProperty;
dummyProperty.SetName("TestProp2");
dummyProperty.SetValue("dummy value");
entity.AppendProperty(dummyProperty);
return entity; return entity;
} }
...@@ -93,19 +112,50 @@ protected: ...@@ -93,19 +112,50 @@ protected:
const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection(); const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
auto insert_transaction(connection->CreateTransaction()); auto insert_transaction(connection->CreateTransaction());
insert_transaction->InsertEntity(CreateTestRT()); auto rt = CreateTestRT();
insert_transaction->InsertEntity(CreateTestProp()); insert_transaction->InsertEntity(&rt);
auto p = CreateTestProp("TestProp", AtomicDataType::TEXT);
insert_transaction->InsertEntity(&p);
p = CreateTestProp("TestProp2", AtomicDataType::TEXT);
insert_transaction->InsertEntity(&p);
p = CreateTestProp("TestPropDouble", AtomicDataType::DOUBLE);
p.SetUnit("m");
insert_transaction->InsertEntity(&p);
p = CreateTestProp("TestPropInt", AtomicDataType::INTEGER);
p.SetUnit("m");
insert_transaction->InsertEntity(&p);
p = CreateTestProp("TestPropBool", AtomicDataType::BOOLEAN);
insert_transaction->InsertEntity(&p);
insert_transaction->Execute(); insert_transaction->Execute();
} }
void TearDown() override { void TearDown() override { DeleteEntities(); }
DeleteEntities();
}
}; };
/* /*
* Test select query on empty database. * Test select query on empty database.
*/ */
TEST_F(test_select, test_select_empy) {
test_select::DeleteEntities();
const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
auto query_transaction(connection->CreateTransaction());
query_transaction->Query("SELECT name FROM RecordType TestRT");
query_transaction->Execute();
EXPECT_EQ(query_transaction->GetResultTable().GetHeader().size(), 1);
for (const auto &column : query_transaction->GetResultTable().GetHeader()) {
EXPECT_EQ(column.GetName(), "name");
}
EXPECT_EQ(query_transaction->GetResultTable().size(), 0);
for (const auto &row : query_transaction->GetResultTable().GetRows()) {
EXPECT_EQ(row.GetValue("name").GetAsString(), "bla"); // should never be executed
}
}
/*
* Test select name query on record type.
*/
TEST_F(test_select, test_select_name) { TEST_F(test_select, test_select_name) {
const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection(); const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
...@@ -119,7 +169,146 @@ TEST_F(test_select, test_select_name) { ...@@ -119,7 +169,146 @@ TEST_F(test_select, test_select_name) {
EXPECT_EQ(query_transaction->GetResultTable().size(), 1); EXPECT_EQ(query_transaction->GetResultTable().size(), 1);
for (const auto &row : query_transaction->GetResultTable().GetRows()) { for (const auto &row : query_transaction->GetResultTable().GetRows()) {
EXPECT_EQ(row.GetValue("name").GetAsString(), "bla"); EXPECT_EQ(row.GetValue("name").GetAsString(), "TestRT");
}
}
/*
* Test select description query on record type.
*/
TEST_F(test_select, test_select_description) {
const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
auto query_transaction(connection->CreateTransaction());
query_transaction->Query("SELECT description FROM RecordType TestRT");
query_transaction->Execute();
EXPECT_EQ(query_transaction->GetResultTable().GetHeader().size(), 1);
for (const auto &column : query_transaction->GetResultTable().GetHeader()) {
EXPECT_EQ(column.GetName(), "description");
}
EXPECT_EQ(query_transaction->GetResultTable().size(), 1);
for (const auto &row : query_transaction->GetResultTable().GetRows()) {
EXPECT_EQ(row.GetValue("description").GetAsString(), "RT Description");
}
}
/*
* Test select TestProp query on record.
*/
TEST_F(test_select, test_select_testprop) {
const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
auto entity = test_select::CreateRecord("TestProp", Value("val1"));
test_select::InsertEntity(&entity);
auto query_transaction(connection->CreateTransaction());
query_transaction->Query("SELECT TestProp FROM Record TestRT");
query_transaction->Execute();
EXPECT_EQ(query_transaction->GetResultTable().GetHeader().size(), 1);
for (const auto &column : query_transaction->GetResultTable().GetHeader()) {
EXPECT_EQ(column.GetName(), "TestProp");
}
EXPECT_EQ(query_transaction->GetResultTable().size(), 1);
for (const auto &row : query_transaction->GetResultTable().GetRows()) {
EXPECT_EQ(row.GetValue("TestProp").GetAsString(), "val1");
}
}
/*
* Test select double value query on record.
*/
TEST_F(test_select, test_select_double) {
const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
auto entity = test_select::CreateRecord("TestPropDouble", Value(2.123));
test_select::InsertEntity(&entity);
auto query_transaction(connection->CreateTransaction());
query_transaction->Query("SELECT TestPropDouble FROM Record TestRT");
query_transaction->Execute();
EXPECT_EQ(query_transaction->GetResultTable().GetHeader().size(), 1);
for (const auto &column : query_transaction->GetResultTable().GetHeader()) {
EXPECT_EQ(column.GetName(), "TestPropDouble");
}
EXPECT_EQ(query_transaction->GetResultTable().size(), 1);
for (const auto &row : query_transaction->GetResultTable().GetRows()) {
EXPECT_TRUE(row.GetValue("TestPropDouble").IsDouble());
EXPECT_EQ(row.GetValue("TestPropDouble").GetAsDouble(), 2.123);
}
}
/*
* Test select unit value query on record.
*/
TEST_F(test_select, test_select_unit) {
const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
auto entity = test_select::CreateRecord("TestPropDouble", Value(2.123));
test_select::InsertEntity(&entity);
auto check(connection->CreateTransaction());
check->Query("FIND Record TestRT");
check->Execute();
std::cout << check->GetResultSet().at(0).ToString() << std::endl;
auto query_transaction(connection->CreateTransaction());
query_transaction->Query("SELECT TestPropDouble.unit FROM Record TestRT");
query_transaction->Execute();
EXPECT_EQ(query_transaction->GetResultTable().GetHeader().size(), 1);
for (const auto &column : query_transaction->GetResultTable().GetHeader()) {
EXPECT_EQ(column.GetName(), "TestPropDouble.unit");
}
EXPECT_EQ(query_transaction->GetResultTable().size(), 1);
for (const auto &row : query_transaction->GetResultTable().GetRows()) {
EXPECT_FALSE(row.GetValue("TestPropDouble.unit").IsNull());
EXPECT_EQ(row.GetValue("TestPropDouble.unit").GetAsString(), "m");
}
}
/*
* Test select int value query on record.
*/
TEST_F(test_select, test_select_int) {
const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
auto entity = test_select::CreateRecord("TestPropInt", Value(1234));
test_select::InsertEntity(&entity);
auto query_transaction(connection->CreateTransaction());
query_transaction->Query("SELECT TestPropInt FROM Record TestRT");
query_transaction->Execute();
EXPECT_EQ(query_transaction->GetResultTable().GetHeader().size(), 1);
for (const auto &column : query_transaction->GetResultTable().GetHeader()) {
EXPECT_EQ(column.GetName(), "TestPropInt");
}
EXPECT_EQ(query_transaction->GetResultTable().size(), 1);
for (const auto &row : query_transaction->GetResultTable().GetRows()) {
EXPECT_TRUE(row.GetValue("TestPropInt").IsInt64());
EXPECT_EQ(row.GetValue("TestPropInt").GetAsInt64(), 1234);
}
}
/*
* Test select boolean value query on record.
*/
TEST_F(test_select, test_select_boolean) {
const auto &connection = caosdb::connection::ConnectionManager::GetDefaultConnection();
auto entity = test_select::CreateRecord("TestPropBool", Value(true));
test_select::InsertEntity(&entity);
auto query_transaction(connection->CreateTransaction());
query_transaction->Query("SELECT TestPropBool FROM Record TestRT");
query_transaction->Execute();
EXPECT_EQ(query_transaction->GetResultTable().GetHeader().size(), 1);
for (const auto &column : query_transaction->GetResultTable().GetHeader()) {
EXPECT_EQ(column.GetName(), "TestPropBool");
}
EXPECT_EQ(query_transaction->GetResultTable().size(), 1);
for (const auto &row : query_transaction->GetResultTable().GetRows()) {
EXPECT_TRUE(row.GetValue("TestPropBool").IsBool());
EXPECT_EQ(row.GetValue("TestPropBool").GetAsBool(), true);
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment