#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> 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)); }