From 681d060fb51675a338b2b36c67ca73ab1cfda6c6 Mon Sep 17 00:00:00 2001
From: florian <f.spreckelsen@inidscale.com>
Date: Fri, 30 Jul 2021 17:33:05 +0200
Subject: [PATCH] WIP: Warnings

---
 include/caosdb/entity.h      |  7 ++++---
 src/caosdb/configuration.cpp |  6 ++++--
 test/test_entity.cpp         | 20 ++++++++++++++++++++
 3 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/include/caosdb/entity.h b/include/caosdb/entity.h
index 46ac1b7..911f621 100644
--- a/include/caosdb/entity.h
+++ b/include/caosdb/entity.h
@@ -317,9 +317,10 @@ public:
   [[nodiscard]] inline auto HasErrors() const -> bool {
     return this->errors.wrapped->size() > 0;
   }
-  // TODO(fspreck) These two need implementations...
-  [[nodiscard]] auto GetWarnings() const -> const Messages &;
-  [[nodiscard]] auto GetInfos() const -> const Messages &;
+  [[nodiscard]] auto GetWarnings() const -> const Messages & {
+    return warnings;
+  }
+  [[nodiscard]] auto GetInfos() const -> const Messages & { return infos; }
 
   inline auto ToString() const -> const std::string {
     google::protobuf::util::JsonOptions options;
diff --git a/src/caosdb/configuration.cpp b/src/caosdb/configuration.cpp
index 58a2759..fbc92e2 100644
--- a/src/caosdb/configuration.cpp
+++ b/src/caosdb/configuration.cpp
@@ -463,7 +463,8 @@ auto ConfigurationManager::GetConnection(const std::string &name) const
                            "' has not been defined.");
 }
 
-auto ConfigurationManager::InitializeDefaults() -> int {
+  // TODO(tf) This has apparently a cognitive complexity of 34>25 (threshold).
+  auto ConfigurationManager::InitializeDefaults() -> int { // NOLINT
 
   // find the configuration file...
   std::unique_ptr<path> configuration_file_path;
@@ -471,7 +472,8 @@ auto ConfigurationManager::InitializeDefaults() -> int {
        caosdb::LIBCAOSDB_CONFIGURATION_FILES_PRECEDENCE) {
     if (configuration_file == "$CAOSDB_CLIENT_CONFIGURATION") {
       // user specified a file via the environment variable
-      const auto *from_env_var = getenv("CAOSDB_CLIENT_CONFIGURATION");
+      // TODO(tf) make this thread-secure (concurrency-mt-unsafe)
+      const auto *from_env_var = getenv("CAOSDB_CLIENT_CONFIGURATION"); // NOLINT
       if (from_env_var != nullptr) {
         configuration_file_path = std::make_unique<path>(from_env_var);
         if (exists(*configuration_file_path)) {
diff --git a/test/test_entity.cpp b/test/test_entity.cpp
index 00ec73c..d604c53 100644
--- a/test/test_entity.cpp
+++ b/test/test_entity.cpp
@@ -88,6 +88,26 @@ TEST(test_entity, test_from_id_response) {
   EXPECT_EQ(entity.GetErrors().At(0).GetDescription(), "error_desc");
   EXPECT_EQ(entity.GetErrors().At(0).GetCode(),
             MessageCode::ENTITY_DOES_NOT_EXIST);
+
+  IdResponse idr_warnings_and_infos;
+  idr_warnings_and_infos.set_id("other_entity_id");
+  auto *warning = idr_warnings_and_infos.add_entity_warnings();
+  warning->set_description("warning_desc");
+  warning->set_code(MessageCode::ENTITY_HAS_NO_PROPERTIES);
+  auto *info = idr_warnings_and_infos.add_entity_infos();
+  info->set_description("info_desc");
+  info->set_code(MessageCode::UNSPECIFIED);
+
+  Entity other_ent(&idr_warnings_and_infos);
+
+  EXPECT_EQ(entity.GetId(), "other_entity_id");
+  EXPECT_EQ(entity.GetWarnings().Size(), 1);
+  EXPECT_EQ(entity.GetWarnings().At(0).GetDescription(), "warning_desc");
+  EXPECT_EQ(entity.GetWarnings().At(0).GetCode(),
+            MessageCode::ENTITY_HAS_NO_PROPERTIES);
+  EXPECT_EQ(entity.GetInfos().Size(), 1);
+  EXPECT_EQ(entity.GetInfos().At(0).GetDescription(), "info_desc");
+  EXPECT_EQ(entity.GetInfos().At(0).GetCode(), MessageCode::UNSPECIFIED);
 }
 
 } // namespace caosdb::entity
-- 
GitLab