From ad22160a54b5a3fee4b4e7cba882373203c1eaf4 Mon Sep 17 00:00:00 2001 From: Daniel <d.hornung@indiscale.com> Date: Mon, 30 Aug 2021 16:25:36 +0200 Subject: [PATCH] TEST: Insert of Entity with wrongly named parent should fail. --- test/test_transaction.cpp | 56 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp index 844c829..cfcd50c 100644 --- a/test/test_transaction.cpp +++ b/test/test_transaction.cpp @@ -338,6 +338,56 @@ TEST_F(test_transaction, insert_delete_with_parent) { ASSERT_FALSE(rt_delete_status.IsError()); } +/* + * Insert a Record with a parent, which has a wrong name. + * + * This must result in a server error. + */ +TEST_F(test_transaction, insert_parent_with_wrong_name) { + 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_TRUE(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; +} + /* * insert a property, record type with that property and a record with it */ @@ -695,8 +745,7 @@ auto test_numeric_values_impl(AtomicDataType a_type) -> void { auto insert_transaction(connection->CreateTransaction()); Entity prop; prop.SetRole(Role::PROPERTY); - const auto name = - std::string("Prop ") + std::to_string(i); + const auto name = std::string("Prop ") + std::to_string(i); std::cout << "Creating: " << name << std::endl; prop.SetName(name); prop.SetDataType(a_type); @@ -717,8 +766,7 @@ auto test_numeric_values_impl(AtomicDataType a_type) -> void { for (const auto value : values_orig) { auto retrieve_transaction(connection->CreateTransaction()); const auto prop = props_orig[i]; - const auto name = - std::string("Prop ") + std::to_string(i); + const auto name = std::string("Prop ") + std::to_string(i); std::cout << "Retrieving: " << name << std::endl; const auto query = std::string("FIND ENTITY \"") + name + "\""; retrieve_transaction->Query(query); -- GitLab