diff --git a/test/SessionTest.cpp b/test/SessionTest.cpp index c723bd9..f22f535 100644 --- a/test/SessionTest.cpp +++ b/test/SessionTest.cpp @@ -1,10 +1,12 @@ #include -#include +#include #include #include #include +#include "Databases.hpp" + #include "models/product.hpp" #include "models/airplane.hpp" #include "models/flight.hpp" @@ -13,23 +15,34 @@ using namespace matador::sql; using namespace matador::test; -TEST_CASE("Create table with foreign key relation", "[session]") { - auto dns = GENERATE(as{}, - "sqlite://sqlite.db", - "postgres://test:test123@127.0.0.1:5432/matador_test" ); +template +class SessionTestFixture +{ +public: + SessionTestFixture() + : pool_(Type::dns, 4), session_(pool_) + {} + ~SessionTestFixture() = default; + matador::sql::session &session() + { return session_; } - connection_pool pool(dns, 4); - session s(pool); +private: + matador::sql::connection_pool pool_; + matador::sql::session session_; +}; + +TEMPLATE_TEST_CASE_METHOD(SessionTestFixture, "Create table with foreign key relation", "[session]", Sqlite, Postgres) { + auto &s = SessionTestFixture::session(); s.create() - .table("airplane") + .template table("airplane") .execute(); REQUIRE(s.table_exists("airplane")); s.create() - .table("flight") + .template table("flight") .execute(); REQUIRE(s.table_exists("flight")); @@ -41,12 +54,11 @@ TEST_CASE("Create table with foreign key relation", "[session]") { REQUIRE(!s.table_exists("airplane")); } -TEST_CASE("Execute select statement with where clause", "[session]") { - connection_pool pool("sqlite://sqlite.db", 4); - session s(pool); +TEMPLATE_TEST_CASE_METHOD(SessionTestFixture, "Execute select statement with where clause", "[session]", Postgres, Sqlite) { + auto &s = SessionTestFixture::session(); s.create() - .table("person") + .template table("person") .execute(); person george{7, "george", 45}; @@ -57,7 +69,7 @@ TEST_CASE("Execute select statement with where clause", "[session]") { REQUIRE(res == 1); // fetch person as record - auto result_record = s.select() + auto result_record = s.template select() .from("person") .where("id"_col == 7) .fetch_all(); @@ -66,20 +78,20 @@ TEST_CASE("Execute select statement with where clause", "[session]") { REQUIRE(i.size() == 3); REQUIRE(i.at(0).name() == "id"); REQUIRE(i.at(0).type() == data_type_t::type_unsigned_long); - REQUIRE(i.at(0).as() == george.id); + REQUIRE(i.at(0).template as() == george.id); REQUIRE(i.at(1).name() == "name"); REQUIRE(i.at(1).type() == data_type_t::type_varchar); - REQUIRE(i.at(1).as() == george.name); + REQUIRE(i.at(1).template as() == george.name); REQUIRE(i.at(2).name() == "age"); REQUIRE(i.at(2).type() == matador::sql::data_type_t::type_unsigned_int); - REQUIRE(i.at(2).as() == george.age); + REQUIRE(i.at(2).template as() == george.age); } // fetch person as person - auto result_person = s.select() + auto result_person = s.template select() .from("person") .where("id"_col == 7) - .fetch_all(); + .template fetch_all(); for (const auto& i : result_person) { REQUIRE(i.id == 7); @@ -90,9 +102,8 @@ TEST_CASE("Execute select statement with where clause", "[session]") { s.drop().table("person").execute(); } -TEST_CASE("Execute insert statement", "[session]") { - connection_pool pool("sqlite://sqlite.db", 4); - session s(pool); +TEMPLATE_TEST_CASE_METHOD(SessionTestFixture, "Execute insert statement", "[session]", Sqlite, Postgres) { + auto &s = SessionTestFixture::session(); s.create() .table("person", { @@ -112,16 +123,15 @@ TEST_CASE("Execute insert statement", "[session]") { s.drop().table("person").execute(); } -TEST_CASE("Select statement with foreign key", "[session]") { - connection_pool pool("sqlite://sqlite.db", 4); - session s(pool); +TEMPLATE_TEST_CASE_METHOD(SessionTestFixture, "Select statement with foreign key", "[session]", Sqlite, Postgres) { + auto &s = SessionTestFixture::session(); s.create() - .table("airplane") + .template table("airplane") .execute(); s.create() - .table("flight") + .template table("flight") .execute(); std::vector> planes { @@ -131,19 +141,19 @@ TEST_CASE("Select statement with foreign key", "[session]") { }; for (const auto &plane : planes) { - auto res = s.insert().into("airplane").values(*plane).execute(); + auto res = s.insert().template into("airplane").values(*plane).execute(); REQUIRE(res == 1); } - auto count = s.select({count_all()}).from("airplane").fetch_value(); + auto count = s.select({count_all()}).from("airplane").template fetch_value(); REQUIRE(count == 3); flight f4711{4, planes.at(1), "hans"}; - auto res = s.insert().into("flight").values(f4711).execute(); + auto res = s.insert().template into("flight").values(f4711).execute(); REQUIRE(res == 1); - auto f = *s.select().from("flight").fetch_all().begin(); + auto f = *s.template select().from("flight").template fetch_all().begin(); REQUIRE(f.id == 4); REQUIRE(f.pilot_name == "hans"); REQUIRE(f.airplane.get() != nullptr);