diff --git a/test/caosdb_test_utility.h b/test/caosdb_test_utility.h index 4cde3dc5059acf60a04b071154b44a59b67e9833..cd1b47ce8f61a8d8d66ae2a7d76ffce46c2a3739 100644 --- a/test/caosdb_test_utility.h +++ b/test/caosdb_test_utility.h @@ -32,17 +32,15 @@ * @date 2021-07-07 */ #define EXPECT_THROW_MESSAGE(statement, exeption_type, message) \ - EXPECT_THROW( \ - try { statement; } catch (const exeption_type &e) { \ - EXPECT_EQ(std::string(e.what()), message); \ - throw; \ - }, \ - exeption_type) + EXPECT_THROW(try { statement; } catch (const exeption_type &e) { \ + EXPECT_EQ(std::string(e.what()), message); \ + throw; \ + }, \ + exeption_type) #define ASSERT_THROW_MESSAGE(statement, exeption_type, message) \ - ASSERT_THROW( \ - try { statement; } catch (const exeption_type &e) { \ - ASSERT_EQ(std::string(e.what()), message); \ - throw; \ - }, \ - exeption_type) + ASSERT_THROW(try { statement; } catch (const exeption_type &e) { \ + ASSERT_EQ(std::string(e.what()), message); \ + throw; \ + }, \ + exeption_type) #endif diff --git a/test/test_issues.cpp b/test/test_issues.cpp index 2d12f4dc5af8db1a124e2334a712eda86dba5670..80dc4f9ae7b5efe2406c36c862fa15b168e92d2e 100644 --- a/test/test_issues.cpp +++ b/test/test_issues.cpp @@ -24,6 +24,7 @@ namespace fs = boost::filesystem; namespace caosdb::transaction { using caosdb::entity::AtomicDataType; using caosdb::entity::Entity; +using caosdb::entity::Parent; using caosdb::entity::Role; using caosdb::entity::Value; @@ -144,4 +145,55 @@ TEST_F(test_issues, server_issue_170) { "update_status.IsError"); } +/* + * Insert a Record with a parent, which has a wrong name. + * + * This must result in a server error. + */ +TEST_F(test_issues, server_issue_171) { + const auto &connection = + caosdb::connection::ConnectionManager::GetDefaultConnection(); + + auto insert_transaction(connection->CreateTransaction()); + + // insert RT + Entity rt; + rt.SetRole(Role::RECORD_TYPE); + rt.SetName("Test_RT_Name"); + insert_transaction->InsertEntity(&rt); + insert_transaction->ExecuteAsynchronously(); + + auto insert_status = insert_transaction->WaitForIt(); + ASSERT_TRUE(insert_status.IsTerminated()); + ASSERT_FALSE(insert_status.IsError()); + + const auto &insert_result_set = insert_transaction->GetResultSet(); + const auto &inserted_rt = insert_result_set.at(0); + + // create Record with parent + Entity rec; + rec.SetRole(Role::RECORD); + rec.SetName("TestRec"); + + Parent parent; + parent.SetId(inserted_rt.GetId()); + parent.SetName(rt.GetName() + "_wrong"); + rec.AppendParent(parent); + + // insert Record + auto rec_transaction(connection->CreateTransaction()); + rec_transaction->InsertEntity(&rec); + rec_transaction->ExecuteAsynchronously(); + + auto rec_insert_status = rec_transaction->WaitForIt(); + ASSERT_TRUE(rec_insert_status.IsTerminated()); + EXPECT_NONFATAL_FAILURE({ EXPECT_TRUE(rec_insert_status.IsError()); }, + "rec_insert_status.IsError"); + + const auto &rec_result_set = rec_transaction->GetResultSet(); + const auto &inserted_rec = rec_result_set.at(0); + + std::cout << inserted_rec.ToString() << std::endl; +} + } // namespace caosdb::transaction