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!
1 file
+ 127
0
Compare changes
  • Side-by-side
  • Inline
+ 127
0
@@ -776,4 +776,131 @@ TEST_F(test_transaction, test_file_up_n_download) {
@@ -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
} // namespace caosdb::transaction
Loading