Initial commit

This commit is contained in:
user
2026-07-12 14:34:52 +04:00
commit 3abf6bd9c2
557 changed files with 68706 additions and 0 deletions
@@ -0,0 +1,144 @@
#include "sqlite_database.h"
#include "sqlite_file_executor.h"
#include "gtest/gtest.h"
// WARNING: Foreign keys are off
const std::string TEST_DB = "test.db";
// Test fixture for SQLiteDatabase
class SQLiteDatabaseTriggerTest : public ::testing::Test {
protected:
SQLiteDatabase *db_;
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");
executor.executeSQLFile("sql/cinema_db_drop_trigger.sql");
executor.executeSQLFile("sql/cinema_db_create_trigger.sql");
// Not necessarily, since the default setting
std::string sql;
FileReaderInterface *reader = &executor;
reader->read("sql/cinema_db_foreign_key_off.sql", sql);
db_->executeNonQuery(sql);
}
void TearDown() override {
delete db_;
remove(TEST_DB.c_str());
}
};
// INFO: ----- TICKET -----
// Test trigger check_seat_number
TEST_F(SQLiteDatabaseTriggerTest, CheckSeatNumber) {
db_->addHall({"Hall 1", 100});
db_->addSession({1, 1, "2025-01-01 12:00:00", 10});
NewTicket ticket;
ticket.session_id = 1;
ticket.sold_at = "2025-01-01 12:00:00";
ticket.seat_number = 101;
EXPECT_FALSE(db_->addTicket(ticket));
ticket.seat_number = 100;
EXPECT_TRUE(db_->addTicket(ticket));
ticket.seat_number = 1;
EXPECT_TRUE(db_->addTicket(ticket));
}
// Test trigger check_session_not_started
TEST_F(SQLiteDatabaseTriggerTest, CheckSessionNotStarted) {
db_->addSession({1, 1, "2025-01-01 12:00:00", 10});
NewTicket ticket;
ticket.session_id = 1;
ticket.seat_number = 1;
ticket.sold_at = "2025-01-01 13:00:00";
EXPECT_FALSE(db_->addTicket(ticket));
ticket.sold_at = "2025-01-01 11:00:00";
EXPECT_TRUE(db_->addTicket(ticket));
ticket.seat_number = 2;
ticket.sold_at = "2025-01-01 12:00:00";
EXPECT_TRUE(db_->addTicket(ticket));
}
// Test trigger prevent_late_ticket_purchase
TEST_F(SQLiteDatabaseTriggerTest, PreventLateTicketPurchase) {
db_->addHall({"Hall 1", 100});
db_->addSession({1, 1, "2025-01-01 12:00:00", 10});
NewTicket ticket;
ticket.session_id = 1;
ticket.seat_number = 1;
ticket.sold_at = "2025-01-01 13:00:00";
EXPECT_FALSE(db_->addTicket(ticket));
ticket.sold_at = "2025-01-01 12:00:00";
EXPECT_TRUE(db_->addTicket(ticket));
ticket.seat_number = 2;
ticket.sold_at = "2025-01-01 11:00:00";
EXPECT_TRUE(db_->addTicket(ticket));
}
// INFO: ----- REFUND -----
// Test trigger validate_refund_amount
TEST_F(SQLiteDatabaseTriggerTest, ValidateRefundAmount) {
db_->addHall({"Hall 1", 100});
db_->addSession({1, 1, "2025-01-01 12:00:00", 10});
// ID 1
db_->addTicket({1, 1, "2025-01-01 10:00:00"});
// ID 2
db_->addTicket({1, 2, "2025-01-01 10:00:00"});
NewRefund refund;
refund.ticket_id = 1;
refund.refund_at = "2025-01-01 11:00:00";
refund.refund_amount = 11;
EXPECT_FALSE(db_->addRefund(refund));
refund.refund_amount = 10;
EXPECT_TRUE(db_->addRefund(refund));
refund.ticket_id = 2;
refund.refund_amount = 9;
EXPECT_TRUE(db_->addRefund(refund));
}
// Test trigger validate_refund_date
TEST_F(SQLiteDatabaseTriggerTest, ValidateRefundDate) {
db_->addHall({"Hall 1", 100});
db_->addSession({1, 1, "2025-01-01 12:00:00", 10});
// ID 1
db_->addTicket({1, 1, "2025-01-01 10:00:00"});
// ID 2
db_->addTicket({1, 2, "2025-01-01 10:00:00"});
NewRefund refund;
refund.ticket_id = 1;
refund.refund_amount = 10;
refund.refund_at = "2025-01-01 09:00:00";
EXPECT_FALSE(db_->addRefund(refund));
refund.refund_at = "2025-01-01 11:00:00";
EXPECT_TRUE(db_->addRefund(refund));
refund.refund_at = "2025-01-01 12:00:00";
EXPECT_FALSE(db_->addRefund(refund));
}