diff --git a/repertory/librepertory/src/providers/base_provider.cpp b/repertory/librepertory/src/providers/base_provider.cpp index 1819dae3..6fb37615 100644 --- a/repertory/librepertory/src/providers/base_provider.cpp +++ b/repertory/librepertory/src/providers/base_provider.cpp @@ -285,8 +285,15 @@ auto base_provider::get_directory_items(const std::string &api_path, if (res != api_error::success) { return res; } + if (not exists) { - return api_error::directory_not_found; + res = is_file(api_path, exists); + if (res != api_error::success) { + utils::error::raise_api_path_error( + function_name, api_path, res, "failed to determine if file exists"); + } + + return exists ? api_error::item_exists : api_error::directory_not_found; } res = get_directory_items_impl(api_path, list); diff --git a/repertory/librepertory/src/providers/s3/s3_provider.cpp b/repertory/librepertory/src/providers/s3/s3_provider.cpp index 80a8f0ad..73c77ff6 100644 --- a/repertory/librepertory/src/providers/s3/s3_provider.cpp +++ b/repertory/librepertory/src/providers/s3/s3_provider.cpp @@ -423,14 +423,7 @@ auto s3_provider::get_directory_items_impl(const std::string &api_path, } if (response_code == http_error_codes::not_found) { - bool exists{}; - auto res = is_file(api_path, exists); - if (res != api_error::success) { - utils::error::raise_api_path_error( - function_name, api_path, res, "failed to determine if file exists"); - } - - return exists ? api_error::item_exists : api_error::directory_not_found; + return api_error::directory_not_found; } if (response_code != http_error_codes::ok) { diff --git a/repertory/repertory_test/src/providers_test.cpp b/repertory/repertory_test/src/providers_test.cpp index e860a210..4954cdf4 100644 --- a/repertory/repertory_test/src/providers_test.cpp +++ b/repertory/repertory_test/src/providers_test.cpp @@ -440,6 +440,21 @@ static void get_directory_item_count(const app_config & /* cfg */, provider.get_api_path_from_source(source_path, api_path)); EXPECT_EQ(std::size_t(1U), provider.get_directory_item_count(api_path)); } + + create_file(provider, "/pt01.txt"); + create_file(provider, "/pt02.txt"); + create_directory(provider, "/dir01"); + create_directory(provider, "/dir02"); + + directory_item_list list{}; + EXPECT_EQ(api_error::success, provider.get_directory_items("/", list)); + check_forced_dirs(list); + EXPECT_GE(list.size(), std::size_t(6U)); + + EXPECT_EQ(api_error::success, provider.remove_file("/pt01.txt")); + EXPECT_EQ(api_error::success, provider.remove_file("/pt02.txt")); + EXPECT_EQ(api_error::success, provider.remove_directory("/dir01")); + EXPECT_EQ(api_error::success, provider.remove_directory("/dir02")); } static void get_directory_items(const app_config &cfg, i_provider &provider) { @@ -699,11 +714,11 @@ static void run_tests(const app_config &cfg, i_provider &provider) { get_directory_items(cfg, provider); get_directory_items_fails_if_directory_not_found(provider); - // TODO continue here get_directory_items_fails_if_item_is_file(cfg, provider); get_directory_item_count(cfg, provider); + // TODO continue here get_file(cfg, provider); get_file_fails_if_file_not_found(provider); get_file_fails_if_item_is_directory(cfg, provider);