added observer to repository and updated tests

This commit is contained in:
Sascha Kühl
2025-12-18 16:13:36 +01:00
parent 6307850721
commit 5e2d2ddde5
11 changed files with 286 additions and 66 deletions
+60 -30
View File
@@ -4,6 +4,7 @@
#include "../../models/department.hpp"
#include "../../models/recipe.hpp"
#include "../../models/person.hpp"
struct node {
};
@@ -105,14 +106,14 @@ TEST_CASE("Test one to many", "[relation][one-to-many]") {
REQUIRE(repo.contains("departments"));
REQUIRE(repo.contains("employees"));
auto info = repo.basic_info("departments")->get();
REQUIRE(!info.endpoints_empty());
REQUIRE(info.endpoints_size() == 1);
std::cout << *info.object();
info = repo.basic_info("employees")->get();
REQUIRE(!info.endpoints_empty());
REQUIRE(info.endpoints_size() == 1);
std::cout << *info.object();
auto result = repo.basic_info("departments");
REQUIRE(!result->get().endpoints_empty());
REQUIRE(result->get().endpoints_size() == 1);
std::cout << *result->get().object();
result = repo.basic_info("employees");
REQUIRE(!result->get().endpoints_empty());
REQUIRE(result->get().endpoints_size() == 1);
std::cout << *result->get().object();
}
TEST_CASE("Test one to many reverse", "[relation][one-to-many][reverse]") {
@@ -127,14 +128,15 @@ TEST_CASE("Test one to many reverse", "[relation][one-to-many][reverse]") {
REQUIRE(repo.contains("departments"));
REQUIRE(repo.contains("employees"));
auto info = repo.basic_info("departments")->get();
REQUIRE(!info.endpoints_empty());
REQUIRE(info.endpoints_size() == 1);
std::cout << *info.object();
info = repo.basic_info("employees")->get();
REQUIRE(!info.endpoints_empty());
REQUIRE(info.endpoints_size() == 1);
std::cout << *info.object();
auto result = repo.basic_info("departments");
REQUIRE(result.is_ok());
REQUIRE(!result->get().endpoints_empty());
REQUIRE(result->get().endpoints_size() == 1);
std::cout << *result->get().object();
result = repo.basic_info("employees");
REQUIRE(!result->get().endpoints_empty());
REQUIRE(result->get().endpoints_size() == 1);
std::cout << *result->get().object();
}
TEST_CASE("Test many to many relation", "[relation][many-to-many]") {
@@ -142,9 +144,9 @@ TEST_CASE("Test many to many relation", "[relation][many-to-many]") {
REQUIRE(repo.empty());
auto result = repo.attach<test::recipe>("recipes")
auto res = repo.attach<test::recipe>("recipes")
.and_then([&repo] { return repo.attach<test::ingredient>("ingredients"); });
REQUIRE(result);
REQUIRE(res);
REQUIRE(repo.size() == 3);
REQUIRE(repo.contains("ingredients"));
@@ -156,16 +158,44 @@ TEST_CASE("Test many to many relation", "[relation][many-to-many]") {
std::cout << *repo.basic_info("recipe_ingredients")->get().object();
auto info = repo.basic_info("ingredients")->get();
REQUIRE(!info.endpoints_empty());
REQUIRE(info.endpoints_size() == 1);
std::cout << *info.object();
info = repo.basic_info("recipes")->get();
REQUIRE(!info.endpoints_empty());
REQUIRE(info.endpoints_size() == 1);
std::cout << *info.object();
info = repo.basic_info("recipe_ingredients")->get();
REQUIRE(!info.endpoints_empty());
REQUIRE(info.endpoints_size() == 2);
std::cout << *info.object();
auto result = repo.basic_info("ingredients");
REQUIRE(!result->get().endpoints_empty());
REQUIRE(result->get().endpoints_size() == 1);
std::cout << *result->get().object();
result = repo.basic_info("recipes");
REQUIRE(!result->get().endpoints_empty());
REQUIRE(result->get().endpoints_size() == 1);
std::cout << *result->get().object();
result = repo.basic_info("recipe_ingredients");
REQUIRE(!result->get().endpoints_empty());
REQUIRE(result->get().endpoints_size() == 2);
std::cout << *result->get().object();
}
template<typename Type>
class test_observer : public matador::object::observer<Type> {
public:
void on_attach(object::repository_node& node, const Type& prototype) override {
int i = 0;
}
void on_detach(object::repository_node& node, const Type& prototype) override {
}
void on_insert(Type& obj) override {
}
void on_update(Type& obj) override {
}
void on_delete(Type& obj) override {
}
};
TEST_CASE("Test repository observer", "[repository][observer]") {
object::repository repo;
REQUIRE(repo.empty());
const auto result = repo.attach<test::person>("person", test_observer<test::person>());
REQUIRE(result.is_ok());
}