Initial commit
This commit is contained in:
@@ -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));
|
||||
}
|
||||
Reference in New Issue
Block a user