diff --git a/test/test_ccaosdb.cpp b/test/test_ccaosdb.cpp
index 859f7d392d1a4561a7a74c1273950b154091cd7f..58ddad82a9b35d72a02b32526a23970e0057d26d 100644
--- a/test/test_ccaosdb.cpp
+++ b/test/test_ccaosdb.cpp
@@ -18,15 +18,82 @@
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
  */
-#include "caosdb/message_code.h"   // for MessageCode
-#include "caosdb/status_code.h"    // for StatusCode
-#include "ccaosdb.h"               // for caosdb_info_version_info, caosdb_...
-#include "gtest/gtest-message.h"   // for Message
-#include "gtest/gtest-test-part.h" // for TestPartResult
-#include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, SuiteApiResolver
-#include <memory>                  // for allocator, unique_ptr
-
-TEST(test_ccaosdb, connection_ssl_authentication_success) {
+#include "caosdb/file_transmission/file_reader.h" // for FileReader
+#include "caosdb/file_transmission/file_writer.h" // for FileWriter
+#include "caosdb/message_code.h"                  // for MessageCode
+#include "caosdb/status_code.h"                   // for StatusCode
+#include "ccaosdb.h"                 // for caosdb_info_version_info, caosdb_...
+#include <boost/filesystem/path.hpp> // for path
+#include <boost/filesystem/path_traits.hpp> // for filesystem
+#include <cstring>                          // for strcmp
+#include <gtest/gtest-message.h>            // for Message
+#include <gtest/gtest-test-part.h>          // for TestPartResult
+#include <gtest/gtest_pred_impl.h> // for Test, EXPECT_EQ, SuiteApiResolver
+#include <iostream>
+#include <memory> // for allocator, unique_ptr
+
+namespace fs = boost::filesystem;
+class test_ccaosdb : public ::testing::Test {
+protected:
+  fs::path test_upload_file_1;
+  fs::path test_download_file_1;
+
+  void SetUp() override {
+    test_upload_file_1 = fs::path("test_upload_file_1_delete_me.dat");
+    test_download_file_1 = fs::path("test_download_file_1_delete_me.dat");
+
+    // fill the file that shall be uploaded
+    caosdb::transaction::FileWriter writer(test_upload_file_1);
+    std::string buffer(1024, 'c');
+    for (int i = 0; i < 8; i++) {
+      writer.write(buffer);
+    }
+  }
+
+  /**
+   * Delete everything with id>99, C style
+   */
+  void TearDown() override {
+    // delete files
+    fs::remove(test_upload_file_1);
+    fs::remove(test_download_file_1);
+
+    caosdb_connection_connection connection;
+    caosdb_connection_connection_manager_get_default_connection(&connection);
+
+    caosdb_transaction_transaction query_transaction;
+    caosdb_connection_connection_create_transaction(&connection,
+                                                    &query_transaction);
+    caosdb_transaction_transaction_query(&query_transaction,
+                                         "FIND ENTITY WITH id > 99");
+    caosdb_transaction_transaction_execute(&query_transaction);
+
+    caosdb_transaction_result_set result_set;
+    caosdb_transaction_transaction_get_result_set(&query_transaction,
+                                                  &result_set);
+    int count[] = {-1}; // NOLINT
+    caosdb_transaction_result_set_size(&result_set, count);
+    if (*count > 0) {
+      caosdb_transaction_transaction delete_transaction;
+      caosdb_connection_connection_create_transaction(&connection,
+                                                      &delete_transaction);
+      caosdb_entity_entity entity;
+      char *id = nullptr; // NOLINT
+      for (int i = 0; i < *count; i++) {
+        caosdb_transaction_result_set_at(&result_set, &entity, i);
+        caosdb_entity_entity_get_id(&entity, &id);
+        caosdb_transaction_transaction_delete_by_id(&delete_transaction, id);
+      }
+
+      caosdb_transaction_transaction_execute(&delete_transaction);
+      caosdb_transaction_delete_transaction(&delete_transaction);
+    }
+
+    caosdb_transaction_delete_transaction(&query_transaction);
+  }
+};
+
+TEST_F(test_ccaosdb, connection_ssl_authentication_success) {
 
   caosdb_connection_connection connection;
   caosdb_connection_connection_manager_get_default_connection(&connection);
@@ -44,7 +111,7 @@ TEST(test_ccaosdb, connection_ssl_authentication_success) {
   EXPECT_STREQ(pre_release, version_info.pre_release);
 }
 
-TEST(test_ccaosdb, test_count_query) {
+TEST_F(test_ccaosdb, test_count_query) {
 
   caosdb_connection_connection connection;
   int return_code(
@@ -75,7 +142,7 @@ TEST(test_ccaosdb, test_count_query) {
   EXPECT_EQ(return_code, 0);
 }
 
-TEST(test_ccaosdb, test_query) {
+TEST_F(test_ccaosdb, test_query) {
   caosdb_connection_connection connection;
   int return_code(
     caosdb_connection_connection_manager_get_default_connection(&connection));
@@ -108,7 +175,7 @@ TEST(test_ccaosdb, test_query) {
   EXPECT_EQ(return_code, 0);
 }
 
-TEST(test_ccaosdb, test_single_id_retrieve) {
+TEST_F(test_ccaosdb, test_single_id_retrieve) {
   caosdb_connection_connection connection;
   int return_code(
     caosdb_connection_connection_manager_get_default_connection(&connection));
@@ -154,7 +221,7 @@ TEST(test_ccaosdb, test_single_id_retrieve) {
   EXPECT_EQ(return_code, 0);
 }
 
-TEST(test_ccaosdb, test_multi_id_retrieve) {
+TEST_F(test_ccaosdb, test_multi_id_retrieve) {
   caosdb_connection_connection connection;
   int return_code(
     caosdb_connection_connection_manager_get_default_connection(&connection));
@@ -216,3 +283,375 @@ TEST(test_ccaosdb, test_multi_id_retrieve) {
   return_code = caosdb_transaction_delete_transaction(&transaction);
   EXPECT_EQ(return_code, 0);
 }
+
+TEST_F(test_ccaosdb, test_insert_update_delete) {
+
+  caosdb_connection_connection connection;
+  caosdb_connection_connection_manager_get_default_connection(&connection);
+
+  caosdb_entity_entity original_entity;
+  caosdb_entity_create_entity(&original_entity);
+  caosdb_entity_entity_set_name(&original_entity, "TestName");
+  caosdb_entity_entity_set_role(&original_entity, "PROPERTY");
+  caosdb_entity_entity_set_datatype(&original_entity, "TEXT", false, false);
+
+  caosdb_transaction_transaction insert_transaction;
+  caosdb_connection_connection_create_transaction(&connection,
+                                                  &insert_transaction);
+  caosdb_transaction_transaction_insert_entity(&insert_transaction,
+                                               &original_entity);
+  int return_code(caosdb_transaction_transaction_execute(&insert_transaction));
+  EXPECT_EQ(return_code, 0);
+
+  // Insert the entity and check results
+  caosdb_transaction_result_set insert_result_set;
+  caosdb_transaction_transaction_get_result_set(&insert_transaction,
+                                                &insert_result_set);
+  int count[] = {-1}; // NOLINT
+  caosdb_transaction_result_set_size(&insert_result_set, count);
+  EXPECT_EQ(*count, 1);
+  caosdb_entity_entity inserted_entity;
+  caosdb_transaction_result_set_at(&insert_result_set, &inserted_entity, 0);
+  char *in = nullptr; // NOLINT
+  caosdb_entity_entity_get_id(&inserted_entity, &in);
+
+  // Retrieve it again for checks and update
+  caosdb_transaction_transaction retrieve_transaction_1;
+  caosdb_connection_connection_create_transaction(&connection,
+                                                  &retrieve_transaction_1);
+  caosdb_transaction_transaction_retrieve_by_id(&retrieve_transaction_1, in);
+  return_code = caosdb_transaction_transaction_execute(&retrieve_transaction_1);
+  EXPECT_EQ(return_code, 0);
+
+  caosdb_transaction_result_set retrieve_results_1;
+  caosdb_transaction_transaction_get_result_set(&retrieve_transaction_1,
+                                                &retrieve_results_1);
+  caosdb_transaction_result_set_size(&retrieve_results_1, count);
+  EXPECT_EQ(*count, 1);
+  caosdb_entity_entity retrieved_entity_1;
+  caosdb_transaction_result_set_at(&retrieve_results_1, &retrieved_entity_1, 0);
+  char *out = nullptr; // NOLINT
+  caosdb_entity_entity_get_id(&retrieved_entity_1, &out);
+  EXPECT_EQ(strcmp(in, out), 0);
+
+  caosdb_entity_entity_get_name(&original_entity, &in);
+  caosdb_entity_entity_get_name(&retrieved_entity_1, &out);
+  EXPECT_EQ(strcmp(in, out), 0);
+
+  caosdb_entity_entity_get_role(&original_entity, &in);
+  caosdb_entity_entity_get_role(&retrieved_entity_1, &out);
+  EXPECT_EQ(strcmp(in, out), 0);
+
+  bool is_list_in[] = {false}; // NOLINT
+  bool is_ref_in[] = {false};  // NOLINT
+  caosdb_entity_entity_get_datatype(&original_entity, &in, is_ref_in,
+                                    is_list_in);
+  bool is_list_out[] = {false}; // NOLINT
+  bool is_ref_out[] = {false};  // NOLINT
+  caosdb_entity_entity_get_datatype(&retrieved_entity_1, &out, is_ref_out,
+                                    is_list_out);
+  EXPECT_EQ(strcmp(in, out), 0);
+  EXPECT_EQ(*is_list_in, *is_list_out);
+  EXPECT_EQ(*is_ref_in, *is_ref_out);
+
+  // Change name and update
+  return_code =
+    caosdb_entity_entity_set_name(&retrieved_entity_1, "TestNameNew");
+  EXPECT_EQ(return_code, 0);
+  caosdb_transaction_transaction update_transaction;
+  caosdb_connection_connection_create_transaction(&connection,
+                                                  &update_transaction);
+  caosdb_transaction_transaction_update_entity(&update_transaction,
+                                               &retrieved_entity_1);
+  return_code = caosdb_transaction_transaction_execute(&update_transaction);
+  EXPECT_EQ(return_code, 0);
+
+  caosdb_transaction_result_set update_results;
+  caosdb_transaction_transaction_get_result_set(&update_transaction,
+                                                &update_results);
+  caosdb_transaction_result_set_size(&update_results, count);
+  EXPECT_EQ(*count, 1);
+  caosdb_entity_entity updated_entity;
+  caosdb_transaction_result_set_at(&update_results, &updated_entity, 0);
+  caosdb_entity_entity_get_id(&inserted_entity, &in);
+  caosdb_entity_entity_get_id(&updated_entity, &out);
+  EXPECT_EQ(strcmp(in, out), 0);
+
+  // Retrieve again
+  caosdb_transaction_transaction retrieve_transaction_2;
+  caosdb_connection_connection_create_transaction(&connection,
+                                                  &retrieve_transaction_2);
+  caosdb_transaction_transaction_retrieve_by_id(&retrieve_transaction_2, out);
+  return_code = caosdb_transaction_transaction_execute(&retrieve_transaction_2);
+  EXPECT_EQ(return_code, 0);
+
+  caosdb_transaction_result_set retrieve_results_2;
+  caosdb_transaction_transaction_get_result_set(&retrieve_transaction_2,
+                                                &retrieve_results_2);
+  caosdb_transaction_result_set_size(&retrieve_results_2, count);
+  EXPECT_EQ(*count, 1);
+  caosdb_entity_entity retrieved_entity_2;
+  caosdb_transaction_result_set_at(&retrieve_results_2, &retrieved_entity_2, 0);
+
+  caosdb_entity_entity_get_id(&retrieved_entity_2, &out);
+  EXPECT_EQ(strcmp(in, out), 0);
+
+  caosdb_entity_entity_get_name(&retrieved_entity_1, &in);
+  caosdb_entity_entity_get_name(&retrieved_entity_2, &out);
+  EXPECT_EQ(strcmp(in, out), 0);
+
+  // Doesn't have the old name anymore
+  caosdb_entity_entity_get_name(&original_entity, &in);
+  EXPECT_FALSE((strcmp(in, out) == 0));
+
+  // Everything else hasn't changed
+  caosdb_entity_entity_get_role(&original_entity, &in);
+  caosdb_entity_entity_get_role(&retrieved_entity_2, &out);
+  EXPECT_EQ(strcmp(in, out), 0);
+
+  caosdb_entity_entity_get_datatype(&original_entity, &in, is_ref_in,
+                                    is_list_in);
+  caosdb_entity_entity_get_datatype(&retrieved_entity_2, &out, is_ref_out,
+                                    is_list_out);
+  EXPECT_EQ(strcmp(in, out), 0);
+  EXPECT_EQ(*is_ref_in, *is_ref_out);
+  EXPECT_EQ(*is_list_in, *is_list_out);
+
+  // Now delete
+  caosdb_transaction_transaction delete_transaction;
+  caosdb_connection_connection_create_transaction(&connection,
+                                                  &delete_transaction);
+  caosdb_entity_entity_get_id(&retrieved_entity_2, &in);
+  caosdb_transaction_transaction_delete_by_id(&delete_transaction, in);
+  return_code = caosdb_transaction_transaction_execute(&delete_transaction);
+  EXPECT_EQ(return_code, 0);
+
+  caosdb_transaction_result_set delete_results;
+  caosdb_transaction_transaction_get_result_set(&delete_transaction,
+                                                &delete_results);
+  caosdb_transaction_result_set_size(&delete_results, count);
+  EXPECT_EQ(*count, 1);
+
+  caosdb_entity_entity deleted_entity;
+  caosdb_transaction_result_set_at(&delete_results, &deleted_entity, 0);
+  caosdb_entity_entity_get_id(&deleted_entity, &out);
+  EXPECT_EQ(strcmp(in, out), 0);
+
+  // Try to retrieve again
+  caosdb_transaction_transaction retrieve_transaction_3;
+  caosdb_connection_connection_create_transaction(&connection,
+                                                  &retrieve_transaction_3);
+  caosdb_transaction_transaction_retrieve_by_id(&retrieve_transaction_3, out);
+  return_code = caosdb_transaction_transaction_execute(&retrieve_transaction_3);
+  EXPECT_TRUE((return_code > 0));
+
+  caosdb_transaction_result_set retrieve_results_3;
+  caosdb_transaction_transaction_get_result_set(&retrieve_transaction_3,
+                                                &retrieve_results_3);
+  caosdb_transaction_result_set_size(&retrieve_results_3, count);
+  EXPECT_EQ(*count, 1);
+  caosdb_entity_entity retrieved_entity_3;
+  caosdb_transaction_result_set_at(&retrieve_results_3, &retrieved_entity_3, 0);
+  caosdb_entity_entity_get_errors_size(&retrieved_entity_3, count);
+  EXPECT_EQ(*count, 1);
+  caosdb_entity_message err_msg;
+  caosdb_entity_entity_get_error(&retrieved_entity_3, &err_msg, 0);
+  caosdb_entity_message_get_code(&err_msg, count);
+  EXPECT_EQ(*count, caosdb::entity::MessageCode::ENTITY_DOES_NOT_EXIST);
+
+  // Delete everything
+  caosdb_transaction_delete_transaction(&retrieve_transaction_3);
+  caosdb_transaction_delete_transaction(&delete_transaction);
+  caosdb_transaction_delete_transaction(&retrieve_transaction_2);
+  caosdb_transaction_delete_transaction(&update_transaction);
+  caosdb_transaction_delete_transaction(&retrieve_transaction_1);
+  caosdb_transaction_delete_transaction(&insert_transaction);
+  caosdb_entity_delete_entity(&original_entity);
+}
+
+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, ...
+  std::cout << "Creating a property..." << std::endl;
+  caosdb_entity_entity original_prop;
+  caosdb_entity_create_entity(&original_prop);
+
+  caosdb_entity_entity_set_name(&original_prop, "TestProp");
+  caosdb_entity_entity_set_role(&original_prop, "PROPERTY");
+  caosdb_entity_entity_set_datatype(&original_prop, "TEXT", false, false);
+
+  std::cout << "Inserting a property..." << std::endl;
+  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);
+
+  std::cout << "Checking result..." << std::endl;
+  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 = nullptr; // 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, "RECORD_TYPE");
+
+  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 = nullptr; // 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_string_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 = nullptr; // 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 = nullptr;  // NOLINT
+  char *out = nullptr; // 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_string_value(&rec_prop, &in);
+  caosdb_entity_property_get_string_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);
+}
+
+TEST_F(test_ccaosdb, test_up_n_download_file) {
+
+  caosdb_connection_connection connection;
+  caosdb_connection_connection_manager_get_default_connection(&connection);
+
+  caosdb_entity_entity original_entity;
+  caosdb_entity_create_entity(&original_entity);
+  caosdb_entity_entity_set_role(&original_entity, "FILE");
+  caosdb_entity_entity_set_local_path(&original_entity,
+                                      test_upload_file_1.c_str());
+  caosdb_entity_entity_set_file_path(&original_entity, "/some/file");
+
+  caosdb_transaction_transaction insert_transaction;
+  caosdb_connection_connection_create_transaction(&connection,
+                                                  &insert_transaction);
+  caosdb_transaction_transaction_insert_entity(&insert_transaction,
+                                               &original_entity);
+  int return_code(caosdb_transaction_transaction_execute(&insert_transaction));
+  EXPECT_EQ(return_code, 0);
+
+  caosdb_transaction_result_set rec_results;
+  caosdb_transaction_transaction_get_result_set(&insert_transaction,
+                                                &rec_results);
+  caosdb_entity_entity inserted_rec;
+  caosdb_transaction_result_set_at(&rec_results, &inserted_rec, 0);
+  char *rec_id = nullptr; // NOLINT
+  caosdb_entity_entity_get_id(&inserted_rec, &rec_id);
+
+  caosdb_entity_entity download_entity;
+  caosdb_entity_create_entity(&download_entity);
+  caosdb_entity_entity_set_role(&download_entity, "FILE");
+  caosdb_entity_entity_set_local_path(&download_entity, "lol");
+  caosdb_entity_entity_set_file_path(&download_entity, "/some/file");
+
+  caosdb_transaction_transaction retrieve_transaction_1;
+  caosdb_connection_connection_create_transaction(&connection,
+                                                  &retrieve_transaction_1);
+  EXPECT_EQ(return_code, 0);
+  // return_code = caosdb_transaction_transaction_retrieve_by_id(
+  //   &retrieve_transaction_1, rec_id);
+  return_code = caosdb_transaction_transaction_retrieve_and_download_file_by_id(
+      &retrieve_transaction_1, rec_id, test_download_file_1.c_str());
+  EXPECT_EQ(return_code, caosdb::StatusCode::GO_ON);
+  return_code = caosdb_transaction_transaction_execute(&retrieve_transaction_1);
+  EXPECT_EQ(return_code, 0);
+
+  caosdb_transaction_result_set result_set;
+  return_code = caosdb_transaction_transaction_get_result_set(
+      &retrieve_transaction_1, &result_set);
+  EXPECT_EQ(return_code, 0);
+}
diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp
index 0648c13af45ae098e20808cfece5a2290b9c6f66..a4575f487c28e27f057ae98f42ba7ece24ec0a22 100644
--- a/test/test_transaction.cpp
+++ b/test/test_transaction.cpp
@@ -753,7 +753,7 @@ TEST_F(test_transaction, test_file_up_n_download) {
   ASSERT_FALSE(inserted_file.HasErrors());
 
   auto download_transaction(connection->CreateTransaction());
-  download_transaction->RetrieveAndDownloadFilesById(
+  download_transaction->RetrieveAndDownloadFileById(
     inserted_file.GetId(), test_download_file_1.string());
   download_transaction->ExecuteAsynchronously();
   ASSERT_EQ(download_transaction->WaitForIt().GetCode(), StatusCode::SUCCESS);