diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp index 844c829b78f0ebe76bbb7df4291a34764b2df303..cfcd50c607d1e3c97d437a7b8d1264791e3ba86f 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);