Skip to content

Commit e7517e2

Browse files
Syl MorrisonSyl Morrison
authored andcommitted
reenable db tests (ffs)
1 parent ad23fa1 commit e7517e2

File tree

1 file changed

+99
-99
lines changed

1 file changed

+99
-99
lines changed

tests/data/mostlyharmless_DatabaseStateTests.cpp

Lines changed: 99 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -8,104 +8,104 @@
88
#include <catch2/matchers/catch_matchers_floating_point.hpp>
99

1010
namespace mostly_harmless::testing {
11-
// template <bool ShouldSucceed>
12-
// auto tryCreateDatabase(const std::filesystem::path& destination, const std::vector<std::pair<std::string, data::DatabaseValueVariant>>& initialValues) -> std::optional<data::DatabaseState> {
13-
// auto databaseOpt = data::DatabaseState::tryCreate(destination, initialValues);
14-
// if constexpr (!ShouldSucceed) {
15-
// REQUIRE(!databaseOpt);
16-
// return {};
17-
// } else {
18-
// REQUIRE(databaseOpt);
19-
// return databaseOpt;
20-
// }
21-
// }
22-
//
23-
// TEST_CASE("Test DatabaseState") {
24-
// auto tempDir = utils::directories::getDirectory(utils::directories::DirectoryType::Temp);
25-
// if (!tempDir) {
26-
// REQUIRE(false);
27-
// }
28-
// auto dbFile = *tempDir / "moha_test_db.sqlite";
29-
// SECTION("Test Valid Location, with no initial values") {
30-
// {
31-
// auto databaseOpt = tryCreateDatabase<true>(dbFile, {});
32-
// auto& database = *databaseOpt;
33-
// REQUIRE_NOTHROW(database.set<std::string>("Hello", "World"));
34-
// const auto retrieved = database.get<std::string>("Hello");
35-
// REQUIRE(retrieved.has_value());
36-
// REQUIRE(*retrieved == "World");
37-
// REQUIRE(!database.get<int>("aaaaa"));
38-
// }
39-
// {
40-
// std::vector<std::pair<std::string, data::DatabaseValueVariant>> initialValues;
41-
// initialValues.emplace_back("IntTest", 10);
42-
// initialValues.emplace_back("DoubleTest", 15.0);
43-
// auto databaseOpt = tryCreateDatabase<true>(dbFile, initialValues);
44-
// auto& database = *databaseOpt;
45-
// auto retrievedDouble = database.get<double>("DoubleTest");
46-
// REQUIRE(retrievedDouble.has_value());
47-
// REQUIRE_THAT(retrievedDouble.value(), Catch::Matchers::WithinRel(15.0));
48-
// database.set<double>("DoubleTest", 20.0);
49-
// retrievedDouble = database.get<double>("DoubleTest");
50-
// REQUIRE(retrievedDouble.has_value());
51-
// REQUIRE_THAT(retrievedDouble.value(), Catch::Matchers::WithinRel(20.0));
52-
// auto database2Opt = tryCreateDatabase<true>(dbFile, initialValues);
53-
// auto& database2 = *database2Opt;
54-
// retrievedDouble = database2.get<double>("DoubleTest");
55-
// REQUIRE(retrievedDouble.has_value());
56-
// REQUIRE_THAT(retrievedDouble.value(), Catch::Matchers::WithinRel(20.0));
57-
// }
58-
//
59-
// std::filesystem::remove(dbFile);
60-
// }
61-
//
62-
// SECTION("Test Invalid Location") {
63-
// tryCreateDatabase<false>("INVALID LOCATION", {});
64-
// }
65-
// SECTION("Test In-Memory") {
66-
// tryCreateDatabase<true>(":memory:", {});
67-
// }
68-
//
69-
// SECTION("Test Duplicate") {
70-
// {
71-
// auto connectionAOpt = tryCreateDatabase<true>(dbFile, { { "test", "aaaa" } });
72-
// auto& databaseA = *connectionAOpt;
73-
// auto connectionBOpt = databaseA.duplicate();
74-
// REQUIRE(connectionBOpt.has_value());
75-
// auto& databaseB = *connectionBOpt;
76-
// auto retrievalOpt = databaseB.get<std::string>("test");
77-
// REQUIRE(retrievalOpt.has_value());
78-
// REQUIRE(*retrievalOpt == "aaaa");
79-
// }
80-
// std::filesystem::remove(dbFile);
81-
// }
82-
//
83-
// SECTION("Test DatabasePropertyWatcher") {
84-
// for (auto i = 0; i < 100; ++i) {
85-
// {
86-
// auto databaseOpt = tryCreateDatabase<true>(dbFile, { { "test", 0 } });
87-
// auto& database = *databaseOpt;
88-
// std::atomic<bool> wasPropertyChanged{ false };
89-
// std::atomic<int> newValue{ 0 };
90-
// {
91-
// auto onPropertyChanged = [&wasPropertyChanged, &newValue](const auto& x) -> void {
92-
// wasPropertyChanged.store(true);
93-
// newValue = x;
94-
// };
95-
// auto listener = data::DatabasePropertyWatcher<int>::tryCreate(database, "test", 1, std::move(onPropertyChanged));
96-
// REQUIRE(listener);
97-
// database.set<int>("test", 10);
98-
// std::this_thread::sleep_for(std::chrono::milliseconds(50));
99-
// REQUIRE(wasPropertyChanged.load());
100-
// database.set<int>("test", 20);
101-
// std::this_thread::sleep_for(std::chrono::milliseconds(50));
102-
// REQUIRE(newValue == 20);
103-
// database.set<int>("test", 30);
104-
// }
105-
// }
106-
// std::filesystem::remove(dbFile);
107-
// }
108-
// }
109-
// }
11+
template <bool ShouldSucceed>
12+
auto tryCreateDatabase(const std::filesystem::path& destination, const std::vector<std::pair<std::string, data::DatabaseValueVariant>>& initialValues) -> std::optional<data::DatabaseState> {
13+
auto databaseOpt = data::DatabaseState::tryCreate(destination, initialValues);
14+
if constexpr (!ShouldSucceed) {
15+
REQUIRE(!databaseOpt);
16+
return {};
17+
} else {
18+
REQUIRE(databaseOpt);
19+
return databaseOpt;
20+
}
21+
}
22+
23+
TEST_CASE("Test DatabaseState") {
24+
auto tempDir = utils::directories::getDirectory(utils::directories::DirectoryType::Temp);
25+
if (!tempDir) {
26+
REQUIRE(false);
27+
}
28+
auto dbFile = *tempDir / "moha_test_db.sqlite";
29+
SECTION("Test Valid Location, with no initial values") {
30+
{
31+
auto databaseOpt = tryCreateDatabase<true>(dbFile, {});
32+
auto& database = *databaseOpt;
33+
REQUIRE_NOTHROW(database.set<std::string>("Hello", "World"));
34+
const auto retrieved = database.get<std::string>("Hello");
35+
REQUIRE(retrieved.has_value());
36+
REQUIRE(*retrieved == "World");
37+
REQUIRE(!database.get<int>("aaaaa"));
38+
}
39+
{
40+
std::vector<std::pair<std::string, data::DatabaseValueVariant>> initialValues;
41+
initialValues.emplace_back("IntTest", 10);
42+
initialValues.emplace_back("DoubleTest", 15.0);
43+
auto databaseOpt = tryCreateDatabase<true>(dbFile, initialValues);
44+
auto& database = *databaseOpt;
45+
auto retrievedDouble = database.get<double>("DoubleTest");
46+
REQUIRE(retrievedDouble.has_value());
47+
REQUIRE_THAT(retrievedDouble.value(), Catch::Matchers::WithinRel(15.0));
48+
database.set<double>("DoubleTest", 20.0);
49+
retrievedDouble = database.get<double>("DoubleTest");
50+
REQUIRE(retrievedDouble.has_value());
51+
REQUIRE_THAT(retrievedDouble.value(), Catch::Matchers::WithinRel(20.0));
52+
auto database2Opt = tryCreateDatabase<true>(dbFile, initialValues);
53+
auto& database2 = *database2Opt;
54+
retrievedDouble = database2.get<double>("DoubleTest");
55+
REQUIRE(retrievedDouble.has_value());
56+
REQUIRE_THAT(retrievedDouble.value(), Catch::Matchers::WithinRel(20.0));
57+
}
58+
59+
std::filesystem::remove(dbFile);
60+
}
61+
62+
SECTION("Test Invalid Location") {
63+
tryCreateDatabase<false>("INVALID LOCATION", {});
64+
}
65+
SECTION("Test In-Memory") {
66+
tryCreateDatabase<true>(":memory:", {});
67+
}
68+
69+
SECTION("Test Duplicate") {
70+
{
71+
auto connectionAOpt = tryCreateDatabase<true>(dbFile, { { "test", "aaaa" } });
72+
auto& databaseA = *connectionAOpt;
73+
auto connectionBOpt = databaseA.duplicate();
74+
REQUIRE(connectionBOpt.has_value());
75+
auto& databaseB = *connectionBOpt;
76+
auto retrievalOpt = databaseB.get<std::string>("test");
77+
REQUIRE(retrievalOpt.has_value());
78+
REQUIRE(*retrievalOpt == "aaaa");
79+
}
80+
std::filesystem::remove(dbFile);
81+
}
82+
83+
SECTION("Test DatabasePropertyWatcher") {
84+
for (auto i = 0; i < 100; ++i) {
85+
{
86+
auto databaseOpt = tryCreateDatabase<true>(dbFile, { { "test", 0 } });
87+
auto& database = *databaseOpt;
88+
std::atomic<bool> wasPropertyChanged{ false };
89+
std::atomic<int> newValue{ 0 };
90+
{
91+
auto onPropertyChanged = [&wasPropertyChanged, &newValue](const auto& x) -> void {
92+
wasPropertyChanged.store(true);
93+
newValue = x;
94+
};
95+
auto listener = data::DatabasePropertyWatcher<int>::tryCreate(database, "test", 1, std::move(onPropertyChanged));
96+
REQUIRE(listener);
97+
database.set<int>("test", 10);
98+
std::this_thread::sleep_for(std::chrono::milliseconds(50));
99+
REQUIRE(wasPropertyChanged.load());
100+
database.set<int>("test", 20);
101+
std::this_thread::sleep_for(std::chrono::milliseconds(50));
102+
REQUIRE(newValue == 20);
103+
database.set<int>("test", 30);
104+
}
105+
}
106+
std::filesystem::remove(dbFile);
107+
}
108+
}
109+
}
110110

111111
} // namespace mostly_harmless::testing

0 commit comments

Comments
 (0)