From 8665598f479e45fbe121a885e9c1683026b3f926 Mon Sep 17 00:00:00 2001 From: florian <f.spreckelsen@inidscale.com> Date: Tue, 17 Aug 2021 17:33:03 +0200 Subject: [PATCH] ENH: Test insertion of a record with a parent and a property --- test/test_ccaosdb.cpp | 132 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 131 insertions(+), 1 deletion(-) diff --git a/test/test_ccaosdb.cpp b/test/test_ccaosdb.cpp index 1d0bbee..facaf9a 100644 --- a/test/test_ccaosdb.cpp +++ b/test/test_ccaosdb.cpp @@ -434,4 +434,134 @@ TEST_F(test_ccaosdb, test_insert_update_delete) { caosdb_entity_delete_entity(&original_entity); } -TEST_F(test_ccaosdb, test_insert_with_prop_and_parent) {} +TEST_F(test_ccaosdb, test_insert_with_prop_and_parent) { + + caosdb_connection_connection connection; + caosdb_connection_connection_manager_get_default_connection(&connection); + + // Create and insert a property, ... + caosdb_entity_entity original_prop; + caosdb_entity_create_entity(&original_prop); + + caosdb_entity_entity_set_name(&original_prop, "TestProp"); + caosdb_entity_entity_set_datatype(&original_prop, "TEXT"); + caosdb_entity_entity_set_role(&original_prop, "Property"); + + caosdb_transaction_transaction prop_insertion; + caosdb_connection_connection_create_transaction(&connection, &prop_insertion); + caosdb_transaction_transaction_insert_entity(&prop_insertion, &original_prop); + int return_code(caosdb_transaction_transaction_execute(&prop_insertion)); + EXPECT_EQ(return_code, 0); + + caosdb_transaction_result_set prop_results; + caosdb_transaction_transaction_get_result_set(&prop_insertion, &prop_results); + caosdb_entity_entity inserted_prop; + caosdb_transaction_result_set_at(&prop_results, &inserted_prop, 0); + char prop_id[255] = {"id"}; // NOLINT + caosdb_entity_entity_get_id(&inserted_prop, prop_id); + + // ... a record type with this property, ... + caosdb_entity_entity original_rt; + caosdb_entity_create_entity(&original_rt); + + caosdb_entity_entity_set_name(&original_rt, "TestType"); + caosdb_entity_entity_set_role(&original_rt, "RecordType"); + + caosdb_entity_property rt_prop; + caosdb_entity_create_property(&rt_prop); + caosdb_entity_property_set_id(&rt_prop, prop_id); + caosdb_entity_entity_append_property(&original_rt, &rt_prop); + + caosdb_transaction_transaction rt_insertion; + caosdb_connection_connection_create_transaction(&connection, &rt_insertion); + caosdb_transaction_transaction_insert_entity(&rt_insertion, &original_rt); + return_code = caosdb_transaction_transaction_execute(&rt_insertion); + EXPECT_EQ(return_code, 0); + + caosdb_transaction_result_set rt_results; + caosdb_transaction_transaction_get_result_set(&rt_insertion, &rt_results); + caosdb_entity_entity inserted_rt; + caosdb_transaction_result_set_at(&rt_results, &inserted_rt, 0); + char rt_id[255] = {"id"}; // NOLINT + caosdb_entity_entity_get_id(&inserted_rt, rt_id); + + // ... and a record with this record type as a parent. + caosdb_entity_entity original_rec; + caosdb_entity_create_entity(&original_rec); + caosdb_entity_entity_set_name(&original_rec, "TestRec"); + caosdb_entity_entity_set_role(&original_rec, "Record"); + caosdb_entity_parent rec_parent; + caosdb_entity_create_parent(&rec_parent); + caosdb_entity_parent_set_id(&rec_parent, rt_id); + caosdb_entity_entity_append_parent(&original_rec, &rec_parent); + caosdb_entity_property rec_prop; + caosdb_entity_create_property(&rec_prop); + caosdb_entity_property_set_id(&rec_prop, prop_id); + caosdb_entity_property_set_value(&rec_prop, "Bla"); + caosdb_entity_entity_append_property(&original_rec, &rec_prop); + + caosdb_transaction_transaction rec_insertion; + caosdb_connection_connection_create_transaction(&connection, &rec_insertion); + caosdb_transaction_transaction_insert_entity(&rec_insertion, &original_rec); + return_code = caosdb_transaction_transaction_execute(&rec_insertion); + EXPECT_EQ(return_code, 0); + + caosdb_transaction_result_set rec_results; + caosdb_transaction_transaction_get_result_set(&rec_insertion, &rec_results); + caosdb_entity_entity inserted_rec; + caosdb_transaction_result_set_at(&rec_results, &inserted_rec, 0); + char rec_id[255] = {"id"}; // NOLINT + caosdb_entity_entity_get_id(&inserted_rec, rec_id); + + // Retrieve the record again for comparison + caosdb_transaction_transaction retrieve_transaction; + caosdb_connection_connection_create_transaction(&connection, + &retrieve_transaction); + caosdb_transaction_transaction_retrieve_by_id(&retrieve_transaction, rec_id); + return_code = caosdb_transaction_transaction_execute(&retrieve_transaction); + EXPECT_EQ(return_code, 0); + + caosdb_transaction_result_set retrieve_result; + caosdb_transaction_transaction_get_result_set(&retrieve_transaction, + &retrieve_result); + caosdb_entity_entity retrieved_rec; + caosdb_transaction_result_set_at(&retrieve_result, &retrieved_rec, 0); + char in[255] = {"abc"}; // NOLINT + char out[255] = {"abc"}; // NOLINT + caosdb_entity_entity_get_name(&original_rec, in); + caosdb_entity_entity_get_name(&retrieved_rec, out); + EXPECT_EQ(strcmp(in, out), 0); + int count[] = {0}; // NOLINT + caosdb_entity_entity_get_properties_size(&retrieved_rec, count); + EXPECT_EQ(*count, 1); + caosdb_entity_entity_get_parents_size(&retrieved_rec, count); + EXPECT_EQ(*count, 1); + + caosdb_entity_parent retrieved_parent; + caosdb_entity_entity_get_parent(&retrieved_rec, &retrieved_parent, 0); + caosdb_entity_entity_get_name(&original_rt, in); + caosdb_entity_parent_get_name(&retrieved_parent, out); + EXPECT_EQ(strcmp(in, out), 0); + caosdb_entity_parent_get_id(&retrieved_parent, out); + EXPECT_EQ(strcmp(rt_id, out), 0); + + caosdb_entity_property retrieved_property; + caosdb_entity_entity_get_property(&retrieved_rec, &retrieved_property, 0); + caosdb_entity_entity_get_name(&original_prop, in); + caosdb_entity_property_get_name(&retrieved_property, out); + EXPECT_EQ(strcmp(in, out), 0); + caosdb_entity_property_get_value(&rec_prop, in); + caosdb_entity_property_get_value(&retrieved_property, out); + EXPECT_EQ(strcmp(in, out), 0); + + caosdb_transaction_delete_transaction(&retrieve_transaction); + caosdb_transaction_delete_transaction(&rec_insertion); + caosdb_entity_delete_property(&rec_prop); + caosdb_entity_delete_parent(&rec_parent); + caosdb_entity_delete_entity(&original_rec); + caosdb_transaction_delete_transaction(&rt_insertion); + caosdb_entity_delete_property(&rt_prop); + caosdb_entity_delete_entity(&original_rt); + caosdb_transaction_delete_transaction(&prop_insertion); + caosdb_entity_delete_entity(&original_prop); +} -- GitLab