Files
cinema-ticket-management-sy…/tests_schema/tests/sqlite_database_foreign_key_test.cpp
T
2026-07-12 14:34:52 +04:00

104 lines
2.6 KiB
C++

#include "sqlite_database.h"
#include "sqlite_file_executor.h"
#include "gtest/gtest.h"
// WARNING: Triggers are off
const std::string TEST_DB = "test.db";
// Test fixture for SQLiteDatabase
class SQLiteDatabaseForeignKeyTest : public ::testing::Test {
protected:
SQLiteDatabase *db_;
public:
// void pragmaForeignKeysOn() {
// const std::string query = "PRAGMA foreign_keys = ON;";
// db_->executeNonQuery(query);
// }
std::vector<std::vector<std::string>> pragmaForeignKeys() {
const std::string query = "PRAGMA foreign_keys;";
auto results = db_->executeSelectQuery(query);
return results;
}
protected:
void SetUp() override {
db_ = new SQLiteDatabase(TEST_DB);
SQLiteFileExecutor executor(TEST_DB);
executor.executeSQLFile("sql/cinema_db_drop_table.sql");
executor.executeSQLFile("sql/cinema_db_create_table.sql");
// pragmaForeignKeysOn();
std::string sql;
FileReaderInterface *reader = &executor;
reader->read("sql/cinema_db_foreign_key_on.sql", sql);
db_->executeNonQuery(sql);
}
void TearDown() override {
delete db_;
remove(TEST_DB.c_str());
}
};
// INFO: ----- GENERAL -----
// Check pragma foreign_keys is true
TEST_F(SQLiteDatabaseForeignKeyTest, PragmaForeignKeys) {
auto results = pragmaForeignKeys();
ASSERT_FALSE(results.empty());
ASSERT_EQ(results[0][0], "1");
}
// Test adding a movie
TEST_F(SQLiteDatabaseForeignKeyTest, AddMovie) {
NewMovie movie{"The Shawshank Redemption", 1, 142};
EXPECT_FALSE(db_->addMovie(movie));
auto movies = db_->getAllMovies();
ASSERT_TRUE(movies.empty());
NewGenre genre{"Drama"};
EXPECT_TRUE(db_->addGenre(genre));
EXPECT_TRUE(db_->addMovie(movie));
movies = db_->getAllMovies();
ASSERT_FALSE(movies.empty());
}
// Test adding session
TEST_F(SQLiteDatabaseForeignKeyTest, AddSession) {
NewSession session{1, 1, "2025-01-01 12:00:00", 10};
EXPECT_FALSE(db_->addSession(session));
NewHall hall{"Hall 1", 100};
db_->addHall(hall);
EXPECT_FALSE(db_->addSession(session));
NewGenre genre{"Drama"};
db_->addGenre(genre);
NewMovie movie{"The Shawshank Redemption", 1, 142};
db_->addMovie(movie);
EXPECT_TRUE(db_->addSession(session));
}
// Test adding ticket
TEST_F(SQLiteDatabaseForeignKeyTest, AddTicket) {
NewTicket ticket{1, 1, "2025-01-01 12:00:00"};
EXPECT_FALSE(db_->addTicket(ticket));
NewHall hall{"Hall 1", 100};
db_->addHall(hall);
NewGenre genre{"Drama"};
db_->addGenre(genre);
NewMovie movie{"The Shawshank Redemption", 1, 142};
db_->addMovie(movie);
NewSession session{1, 1, "2025-01-01 12:00:00", 10};
db_->addSession(session);
EXPECT_TRUE(db_->addTicket(ticket));
}