From 941c9af9c4b990466ce578c9b941e06339780e53 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Tue, 7 Sep 2021 13:00:18 +0200
Subject: [PATCH] TST: add test for list of boolean

---
 test/test_list_properties.cpp | 59 +++++++++++++++++++++++++++++++++--
 1 file changed, 57 insertions(+), 2 deletions(-)

diff --git a/test/test_list_properties.cpp b/test/test_list_properties.cpp
index f7e1ecd..be3b302 100644
--- a/test/test_list_properties.cpp
+++ b/test/test_list_properties.cpp
@@ -124,8 +124,7 @@ TEST_F(test_list_properties, insert_list_of_int) {
   abstract_list_property.SetRole(Role::PROPERTY);
   abstract_list_property.SetName("TestProp");
   abstract_list_property.SetDataType(DataType::ListOf(AtomicDataType::INTEGER));
-  abstract_list_property.SetValue(
-      std::vector<int64_t>{1, 2, 3});
+  abstract_list_property.SetValue(std::vector<int64_t>{1, 2, 3});
 
   insertion_prop->InsertEntity(&abstract_list_property);
   std::cout << "response " << insertion_prop->ResponseToString();
@@ -171,4 +170,60 @@ TEST_F(test_list_properties, insert_list_of_int) {
   EXPECT_EQ(value.AsList().at(1).AsInteger(), 5);
 }
 
+TEST_F(test_list_properties, insert_list_of_bool) {
+  const auto &connection =
+    caosdb::connection::ConnectionManager::GetDefaultConnection();
+
+  auto insertion_prop(connection->CreateTransaction());
+
+  Entity abstract_list_property;
+  abstract_list_property.SetRole(Role::PROPERTY);
+  abstract_list_property.SetName("TestProp");
+  abstract_list_property.SetDataType(DataType::ListOf(AtomicDataType::INTEGER));
+  abstract_list_property.SetValue(std::vector<bool>{true, true, false});
+
+  insertion_prop->InsertEntity(&abstract_list_property);
+  std::cout << "response " << insertion_prop->ResponseToString();
+  insertion_prop->Execute();
+  EXPECT_TRUE(insertion_prop->GetStatus().IsTerminated());
+
+  auto insertion_rt(connection->CreateTransaction());
+
+  Property list_property;
+  list_property.SetId(insertion_prop->GetResultSet().at(0).GetId());
+  list_property.SetValue(std::vector<bool>{false, false, true});
+
+  Entity entity;
+  entity.SetRole(Role::RECORD_TYPE);
+  entity.SetName("TestRT");
+  entity.AppendProperty(list_property);
+
+  insertion_rt->InsertEntity(&entity);
+  std::cout << "response " << insertion_rt->ResponseToString();
+  insertion_rt->Execute();
+  EXPECT_TRUE(insertion_rt->GetStatus().IsTerminated());
+  EXPECT_FALSE(insertion_rt->GetStatus().IsError());
+
+  // retrieve and check again
+  auto retrieval(connection->CreateTransaction());
+  retrieval->RetrieveById(insertion_rt->GetResultSet().at(0).GetId());
+  retrieval->Execute();
+
+  EXPECT_TRUE(retrieval->GetStatus().IsTerminated());
+  EXPECT_FALSE(retrieval->GetStatus().IsError());
+
+  const auto &same_entity = retrieval->GetResultSet().at(0);
+  const auto &data_type = same_entity.GetProperties().at(0).GetDataType();
+  const auto &value = same_entity.GetProperties().at(0).GetValue();
+
+  EXPECT_TRUE(data_type.IsList());
+  EXPECT_TRUE(data_type.AsList().IsListOfAtomic());
+  EXPECT_EQ(data_type.AsList().GetAtomicDataType(), AtomicDataType::INTEGER);
+
+  EXPECT_TRUE(value.IsList());
+  EXPECT_EQ(value.AsList().size(), 3);
+  EXPECT_TRUE(value.AsList().at(1).IsBool());
+  EXPECT_FALSE(value.AsList().at(1).AsBool());
+}
+
 } // namespace caosdb::entity
-- 
GitLab