#include "catch2/catch_test_macros.hpp" #include "SessionFixture.hpp" #include "connection.hpp" #include "models/recipe.hpp" #include "models/model_metas.hpp" using namespace matador; using namespace matador::object; using namespace matador::test; using namespace matador::query::meta; TEST_CASE_METHOD(SessionFixture, "Test insert object with has many to many relation", "[session][insert][has_many_to_many]") { auto result = schema.attach("recipes") .and_then( [this] { return schema.attach("ingredients"); } ) .and_then([this] { return schema.create(db); } ); orm::session ses({bus, connection::dns, 4}, schema); schema.initialize(ses); std::vector ingredients { make_object(1, "Apple"), make_object(2, "Strawberry"), make_object(3, "Pineapple"), make_object(4, "Sugar"), make_object(5, "Flour"), make_object(6, "Butter"), make_object(7, "Beans") }; std::vector recipes { make_object(1, "Apple Pie", std::vector{ingredients[0], ingredients[3], ingredients[4]}), make_object(2, "Strawberry Cake", std::vector{ingredients[5], ingredients[6]}), make_object(3, "Pineapple Pie", std::vector{ingredients[0], ingredients[1], ingredients[2]}) }; for (auto &r: recipes) { auto res = ses.insert(r); REQUIRE(res.is_ok()); } auto recipe_result = ses.find(1); // auto recipe_result = ses.find(RECIPE.id == 1); REQUIRE(recipe_result.is_ok()); // auto r = *recipe_result->begin(); auto r = *recipe_result; std::cout << r->name << " (ingredients: " << r->ingredients.size() << ")" << std::endl; // REQUIRE(r->name != ""); for (const auto &ingr: r->ingredients) { std::cout << " " << ingr->name << std::endl; } }