diff options
-rw-r--r-- | test/Jamfile.jam | 2 | ||||
-rw-r--r-- | test/test-postgresql.cpp | 9 | ||||
-rw-r--r-- | test/testdb-postgresql.cpp | 30 | ||||
-rw-r--r-- | test/testdb-postgresql.h | 21 |
4 files changed, 61 insertions, 1 deletions
diff --git a/test/Jamfile.jam b/test/Jamfile.jam index 38bee41..691a68f 100644 --- a/test/Jamfile.jam +++ b/test/Jamfile.jam @@ -16,4 +16,4 @@ run test-bitset.cpp ; run test-streams.cpp ; run test-misc.cpp ; run test-mysql.cpp : : : <library>testdb ; -run test-postgresql.cpp ; +run test-postgresql.cpp : : : <library>testdb ; diff --git a/test/test-postgresql.cpp b/test/test-postgresql.cpp index eaf6d58..38feb3c 100644 --- a/test/test-postgresql.cpp +++ b/test/test-postgresql.cpp @@ -1,6 +1,7 @@ #define BOOST_TEST_MODULE PostgreSQL #include <boost/test/unit_test.hpp> +#include "testdb-postgresql.h" #include <cstddef> #include <dbConn.h> #include <dbRecordSet.h> @@ -73,3 +74,11 @@ BOOST_AUTO_TEST_CASE(stmt_reuse) BOOST_CHECK_GT(rs->rows(), 1); } } + +BOOST_AUTO_TEST_CASE(mock) +{ + MyGrate::Testing::PqConnDB db; + auto mdb = db.mock(); + auto rs = MyGrate::DbStmt<"SELECT CURRENT_DATABASE()">::execute(&mdb); + BOOST_CHECK_EQUAL(rs->at(0, 0).get<std::string_view>().substr(0, 13), "mygrate_test_"); +} diff --git a/test/testdb-postgresql.cpp b/test/testdb-postgresql.cpp new file mode 100644 index 0000000..55f163f --- /dev/null +++ b/test/testdb-postgresql.cpp @@ -0,0 +1,30 @@ +#include "testdb-postgresql.h" +#include <compileTimeFormatter.h> +#include <cstdlib> +#include <helpers.h> +#include <output/pq/pqConn.h> + +namespace MyGrate { + namespace Testing { + const auto CONNSTR {MyGrate::getenv("MYGRATE_POSTGRESQL_CONNSTR", "user=postgres")}; + std::size_t PqConnDB::mocknum; + + PqConnDB::PqConnDB() : PqConn(CONNSTR), mockname {scprintf<"mygrate_test_%?_%?">(getpid(), mocknum++)} + { + query(("DROP DATABASE IF EXISTS " + mockname).c_str()); + query(("CREATE DATABASE " + mockname).c_str()); + } + + PqConnDB::~PqConnDB() + { + query(("DROP DATABASE IF EXISTS " + mockname).c_str()); + mockname.clear(); + } + + Output::Pq::PqConn + PqConnDB::mock() const + { + return PqConn {scprintf<"%? dbname=%?">(CONNSTR, mockname).c_str()}; + } + } +} diff --git a/test/testdb-postgresql.h b/test/testdb-postgresql.h new file mode 100644 index 0000000..fc73d2a --- /dev/null +++ b/test/testdb-postgresql.h @@ -0,0 +1,21 @@ +#ifndef MYGRATE_TESTING_POSTGRESQL_H +#define MYGRATE_TESTING_POSTGRESQL_H + +#include <output/pq/pqConn.h> + +namespace MyGrate { + namespace Testing { + class PqConnDB : public Output::Pq::PqConn { + public: + PqConnDB(); + ~PqConnDB(); + + Output::Pq::PqConn mock() const; + + std::string mockname; + static std::size_t mocknum; + }; + } +} + +#endif |