| #include "persistent_json_storage.hpp" |
| |
| #include "gmock/gmock.h" |
| #include "gtest/gtest.h" |
| |
| using namespace testing; |
| |
| class TestPersistentJsonStorage : public Test |
| { |
| public: |
| using FilePath = interfaces::JsonStorage::FilePath; |
| using DirectoryPath = interfaces::JsonStorage::DirectoryPath; |
| |
| static void SetUpTestSuite() |
| { |
| ASSERT_FALSE(std::filesystem::exists(directory)); |
| } |
| |
| void TearDown() override |
| { |
| if (std::filesystem::exists(directory)) |
| { |
| std::filesystem::remove_all(directory); |
| } |
| } |
| |
| const FilePath fileName = FilePath("report/1/file.txt"); |
| |
| static const DirectoryPath directory; |
| PersistentJsonStorage sut{directory}; |
| }; |
| |
| const interfaces::JsonStorage::DirectoryPath |
| TestPersistentJsonStorage::directory = |
| interfaces::JsonStorage::DirectoryPath(std::tmpnam(nullptr)); |
| |
| TEST_F(TestPersistentJsonStorage, storesJsonData) |
| { |
| nlohmann::json data = nlohmann::json::object(); |
| data["name"] = "kevin"; |
| data["lastname"] = "mc calister"; |
| |
| sut.store(fileName, data); |
| |
| ASSERT_THAT(sut.load(fileName), Eq(data)); |
| } |
| |
| TEST_F(TestPersistentJsonStorage, emptyListWhenNoReportsCreated) |
| { |
| EXPECT_THAT(sut.list(DirectoryPath("report")), SizeIs(0u)); |
| } |
| |
| TEST_F(TestPersistentJsonStorage, listSavedReports) |
| { |
| sut.store(FilePath("report/domain-1/name-1/conf-1.json"), |
| nlohmann::json("data-1a")); |
| sut.store(FilePath("report/domain-1/name-2/conf-1.json"), |
| nlohmann::json("data-2a")); |
| sut.store(FilePath("report/domain-1/name-2/conf-2.json"), |
| nlohmann::json("data-2b")); |
| sut.store(FilePath("report/domain-2/name-1/conf-1.json"), |
| nlohmann::json("data-3a")); |
| |
| EXPECT_THAT(sut.list(DirectoryPath("report")), |
| UnorderedElementsAre(FilePath("report/domain-1/name-1"), |
| FilePath("report/domain-1/name-2"), |
| FilePath("report/domain-2/name-1"))); |
| } |
| |
| TEST_F(TestPersistentJsonStorage, listSavedReportsWithoutRemovedOnes) |
| { |
| sut.store(FilePath("report/domain-1/name-1/conf-1.json"), |
| nlohmann::json("data-1a")); |
| sut.store(FilePath("report/domain-1/name-2/conf-1.json"), |
| nlohmann::json("data-2a")); |
| sut.store(FilePath("report/domain-1/name-2/conf-2.json"), |
| nlohmann::json("data-2b")); |
| sut.store(FilePath("report/domain-2/name-1/conf-1.json"), |
| nlohmann::json("data-3a")); |
| sut.remove(FilePath("report/domain-1/name-1/conf-1.json")); |
| sut.remove(FilePath("report/domain-1/name-2/conf-2.json")); |
| |
| EXPECT_THAT(sut.list(DirectoryPath("report")), |
| UnorderedElementsAre(FilePath("report/domain-1/name-2"), |
| FilePath("report/domain-2/name-1"))); |
| } |
| |
| TEST_F(TestPersistentJsonStorage, removesStoredJson) |
| { |
| nlohmann::json data = nlohmann::json::object(); |
| data["name"] = "kevin"; |
| data["lastname"] = "mc calister"; |
| |
| sut.store(fileName, data); |
| |
| ASSERT_THAT(sut.remove(fileName), Eq(true)); |
| ASSERT_THAT(sut.load(fileName), Eq(std::nullopt)); |
| } |
| |
| TEST_F(TestPersistentJsonStorage, returnsFalseWhenDeletingNonExistingFile) |
| { |
| ASSERT_THAT(sut.remove(fileName), Eq(false)); |
| } |
| |
| TEST_F(TestPersistentJsonStorage, returnsNulloptWhenFileDoesntExist) |
| { |
| ASSERT_THAT(sut.load(fileName), Eq(std::nullopt)); |
| } |