added observer to repository and updated tests
This commit is contained in:
@@ -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());
|
||||
}
|
||||
Reference in New Issue
Block a user