stuff-from-scratch/test/database/TestDatabase.cpp

81 lines
1.7 KiB
C++
Raw Normal View History

2022-01-01 18:46:31 +00:00
#include "DatabaseManager.h"
2022-11-29 18:00:19 +00:00
#include "TestFramework.h"
2022-12-01 10:52:48 +00:00
#include "TestUtils.h"
2022-11-29 18:00:19 +00:00
#include "FileLogger.h"
class DbTable
{
public:
enum class Type
{
INT,
VAR_CHAR255
};
2023-12-21 09:18:44 +00:00
using Entry = std::pair<String, Type>;
2023-12-21 09:18:44 +00:00
String mName;
Vector<Entry> mColumns;
2023-12-21 09:18:44 +00:00
String toString(Type type) const
{
switch (type)
{
case Type::INT:
return "int";
case Type::VAR_CHAR255:
return "varchar(255)";
default:
return "varchar(255)";
}
}
2023-12-21 09:18:44 +00:00
String getCreateQuery() const
{
2023-12-21 09:18:44 +00:00
String query = "CREATE TABLE " + mName + " ( ";
2023-12-27 12:20:02 +00:00
size_t count = 0;
for (const auto& column : mColumns)
{
query += column.first + " " + toString(column.second);
if (count < mColumns.size() - 1)
{
query += ", ";
}
count++;
}
query += "); ";
return query;
}
};
2022-11-29 18:00:19 +00:00
TEST_CASE(TestDatabaseManager, "database")
2022-01-01 18:46:31 +00:00
{
DatabaseManager db_manager;
const auto db_path = TestUtils::getTestOutputDir() / "test.db";
db_manager.openDatabase(db_path);
DbTable table;
table.mName = "Persons";
table.mColumns = {
{"PersonID", DbTable::Type::INT},
{"LastName", DbTable::Type::VAR_CHAR255},
{"FirstName", DbTable::Type::VAR_CHAR255},
{"Address", DbTable::Type::VAR_CHAR255},
{"City", DbTable::Type::VAR_CHAR255}
};
2023-12-21 09:18:44 +00:00
String statement = table.getCreateQuery();
2022-12-01 10:52:48 +00:00
db_manager.run(statement);
db_manager.onShutDown();
if (std::filesystem::exists(db_path))
{
std::filesystem::remove(db_path);
}
2022-01-01 18:46:31 +00:00
}