From 31e9c7e9ac18789ec8a65369976a782fb4a5af90 Mon Sep 17 00:00:00 2001 From: Sascha Kuehl Date: Fri, 29 Mar 2024 11:41:37 +0100 Subject: [PATCH] added missing checks to QueryTest --- backends/tests/QueryTest.cpp | 56 +++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/backends/tests/QueryTest.cpp b/backends/tests/QueryTest.cpp index 26cc82a..a86fdf8 100644 --- a/backends/tests/QueryTest.cpp +++ b/backends/tests/QueryTest.cpp @@ -456,43 +456,77 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with many to many relationship" } auto result = db - .query(schema) - .select({"r.id", "r.name", "ri.recipe_id"}) - .from({"recipes", "r"}) - .join_left({"recipe_ingredients", "ri"}) - .on("r.id"_col == "ri.recipe_id"_col) - .fetch_all(); + .query(schema) + .select({"r.id", "r.name", "ri.ingredient_id"}) + .from({"recipes", "r"}) + .join_left({"recipe_ingredients", "ri"}) + .on("r.id"_col == "ri.recipe_id"_col) + .fetch_all(); + std::vector> expected_result_one_join { + {7, "Apple Crumble", 1}, + {7, "Apple Crumble", 4}, + {7, "Apple Crumble", 5}, + {8, "Beans Chili", 6}, + {8, "Beans Chili", 7}, + {9, "Fruit Salad", 1}, + {9, "Fruit Salad", 2}, + {9, "Fruit Salad", 3} + }; + size_t index{0}; for (const auto &r: result) { REQUIRE(r.size() == 3); - std::cout << "record r.id " << r.at(0).as().value() << " r.name " << r.at(1).as().value() << " ri.id " << r.at(2).as().value() << "\n"; + REQUIRE(r.at(0).as().value() == std::get<0>(expected_result_one_join[index])); + REQUIRE(r.at(1).as().value() == std::get<1>(expected_result_one_join[index])); + REQUIRE(r.at(2).as().value() == std::get<2>(expected_result_one_join[index])); + ++index; } result = db .query(schema) - .select({"r.id", "r.name", "ri.recipe_id", "i.name"}) + .select({"r.id", "r.name", "ri.ingredient_id", "i.name"}) .from({"recipes", "r"}) .join_left({"recipe_ingredients", "ri"}).on("r.id"_col == "ri.recipe_id"_col) .join_left({"ingredients", "i"}).on("ri.ingredient_id"_col == "i.id"_col) .fetch_all(); + std::vector> expected_result_two_joins { + {7, "Apple Crumble", 1, "Apple"}, + {7, "Apple Crumble", 4, "Sugar"}, + {7, "Apple Crumble", 5, "Flour"}, + {8, "Beans Chili", 6, "Butter"}, + {8, "Beans Chili", 7, "Beans"}, + {9, "Fruit Salad", 1, "Apple"}, + {9, "Fruit Salad", 2, "Strawberry"}, + {9, "Fruit Salad", 3, "Pineapple"} + }; + index = 0; for (const auto &r: result) { REQUIRE(r.size() == 4); - std::cout << "record r.id " << r.at(0).as().value() << " r.name " << r.at(1).as().value() << " ri.id " << r.at(2).as().value() << " i.name " << r.at(3).as().value() << "\n"; + REQUIRE(r.at(0).as().value() == std::get<0>(expected_result_two_joins[index])); + REQUIRE(r.at(1).as().value() == std::get<1>(expected_result_two_joins[index])); + REQUIRE(r.at(2).as().value() == std::get<2>(expected_result_two_joins[index])); + REQUIRE(r.at(3).as().value() == std::get<3>(expected_result_two_joins[index])); + ++index; } result = db .query(schema) - .select({"r.id", "r.name", "ri.recipe_id", "i.name"}) + .select({"r.id", "r.name", "ri.ingredient_id", "i.name"}) .from({"recipes", "r"}) .join_left({"recipe_ingredients", "ri"}).on("r.id"_col == "ri.recipe_id"_col) .join_left({"ingredients", "i"}).on("ri.ingredient_id"_col == "i.id"_col) .where("r.id"_col == 8) .fetch_all(); + index = 3; for (const auto &r: result) { REQUIRE(r.size() == 4); - std::cout << "record r.id " << r.at(0).as().value() << " r.name " << r.at(1).as().value() << " ri.id " << r.at(2).as().value() << " i.name " << r.at(3).as().value() << "\n"; + REQUIRE(r.at(0).as().value() == std::get<0>(expected_result_two_joins[index])); + REQUIRE(r.at(1).as().value() == std::get<1>(expected_result_two_joins[index])); + REQUIRE(r.at(2).as().value() == std::get<2>(expected_result_two_joins[index])); + REQUIRE(r.at(3).as().value() == std::get<3>(expected_result_two_joins[index])); + ++index; } db.query(schema).drop().table("recipe_ingredients").execute();