Skip to content
Snippets Groups Projects

ENH: Test datatypes and values in Extern C interface

Merged Florian Spreckelsen requested to merge f-consolidate-c into dev
All threads resolved!
+ 127
0
@@ -776,4 +776,131 @@ TEST_F(test_transaction, test_file_up_n_download) {
}
}
/*
* Test a small worklfow
*/
TEST_F(test_transaction, test_full_workflow) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
// ###### Create Data Model ######
Entity dataRT;
dataRT.SetRole(Role::RECORD_TYPE);
dataRT.SetName("DataRT");
Entity voltage;
voltage.SetRole(Role::PROPERTY);
voltage.SetName("voltage");
voltage.SetUnit("V");
voltage.SetDataType(AtomicDataType::DOUBLE);
Entity notes;
notes.SetRole(Role::PROPERTY);
notes.SetName("notes");
notes.SetDataType(AtomicDataType::TEXT);
Entity participants;
participants.SetRole(Role::PROPERTY);
participants.SetName("participants");
participants.SetDataType(AtomicDataType::INTEGER);
// participants.SetDataType(ListDataType::);
Entity success;
success.SetRole(Role::PROPERTY);
success.SetName("success");
success.SetDataType(AtomicDataType::BOOLEAN);
Entity experiment;
experiment.SetRole(Role::RECORD_TYPE);
experiment.SetName("Experiment");
// TODO(henrik): creating this extra Property (additionally to the Entity
// above) is VERY clumsy
Property volt_for_rt;
volt_for_rt.SetName(voltage.GetName());
volt_for_rt.SetImportance(Importance::RECOMMENDED);
experiment.AppendProperty(volt_for_rt);
Property notes_for_rt2;
notes_for_rt2.SetName(notes.GetName());
notes_for_rt2.SetImportance(Importance::RECOMMENDED);
experiment.AppendProperty(notes_for_rt2);
Property part_for_rt3;
part_for_rt3.SetName(participants.GetName());
part_for_rt3.SetImportance(Importance::SUGGESTED);
experiment.AppendProperty(part_for_rt3);
Property succ_for_rt;
succ_for_rt.SetName(success.GetName());
succ_for_rt.SetImportance(Importance::SUGGESTED);
experiment.AppendProperty(succ_for_rt);
auto insert_transaction(connection->CreateTransaction());
insert_transaction->InsertEntity(&dataRT);
auto insert_status = insert_transaction->Execute();
const auto &insert_results = insert_transaction->GetResultSet();
const auto &inserted_ent = insert_results.at(0);
ASSERT_FALSE(inserted_ent.GetId().empty());
ASSERT_FALSE(inserted_ent.HasErrors());
insert_transaction = connection->CreateTransaction();
insert_transaction->InsertEntity(&voltage);
insert_status = insert_transaction->Execute();
insert_transaction = connection->CreateTransaction();
insert_transaction->InsertEntity(&notes);
insert_status = insert_transaction->Execute();
insert_transaction = connection->CreateTransaction();
insert_transaction->InsertEntity(&participants);
insert_status = insert_transaction->Execute();
insert_transaction = connection->CreateTransaction();
insert_transaction->InsertEntity(&success);
insert_status = insert_transaction->Execute();
insert_transaction = connection->CreateTransaction();
insert_transaction->InsertEntity(&experiment);
insert_status = insert_transaction->Execute();
auto retr_transaction(connection->CreateTransaction());
retr_transaction->Query("FIND Experiment");
retr_transaction->Execute();
EXPECT_EQ(retr_transaction->GetResultSet().size(), 1);
Parent experiment_parent;
experiment_parent.SetName("Experiment");
for (int i = 0; i < 8; i++) {
Entity experiment_rec;
experiment_rec.SetRole(Role::RECORD);
experiment_rec.AppendParent(experiment_parent);
volt_for_rt.SetValue(1.6);
experiment_rec.AppendProperty(volt_for_rt);
notes_for_rt2.SetValue("This is important!");
experiment_rec.AppendProperty(notes_for_rt2);
part_for_rt3.SetValue(static_cast<int64_t>(6));
experiment_rec.AppendProperty(part_for_rt3);
succ_for_rt.SetValue(true);
experiment_rec.AppendProperty(succ_for_rt);
auto rec_insert_transaction(connection->CreateTransaction());
rec_insert_transaction->InsertEntity(&experiment_rec);
std::cout << "before ..." << std::endl;
insert_status = rec_insert_transaction->Execute();
std::cout << "after ..." << std::endl;
}
retr_transaction = connection->CreateTransaction();
retr_transaction->Query("FIND Record Experiment");
retr_transaction->Execute();
EXPECT_EQ(retr_transaction->GetResultSet().size(), 8);
auto to_be_updated = retr_transaction->GetResultSet().at(0);
// TODO(henrik) using the index for deletion is very inconvenient
to_be_updated.RemoveProperty(0);
to_be_updated.SetName("changedone");
auto update_transaction(connection->CreateTransaction());
update_transaction->UpdateEntity(&to_be_updated);
update_transaction->Execute();
retr_transaction = connection->CreateTransaction();
retr_transaction->Query("FIND Record Experiment with name=changedone");
retr_transaction->Execute();
EXPECT_EQ(retr_transaction->GetResultSet().size(), 1);
}
} // namespace caosdb::transaction
Loading