#include #include "csp/db/sqlite_db.h" #include "csp/services/auth_service.h" #include "csp/services/daily_task_service.h" #include "csp/services/user_service.h" TEST_CASE("daily task reward only once per day") { auto db = csp::db::SqliteDb::OpenMemory(); csp::db::ApplyMigrations(db); csp::services::AuthService auth(db); const auto user = auth.Register("daily_task_user", "password123"); csp::services::UserService users(db); csp::services::DailyTaskService daily(db); const auto before = users.GetById(user.user_id); REQUIRE(before.has_value()); // Register includes auto-login, which should complete login_checkin once. REQUIRE(before->rating == 1); REQUIRE(daily.CompleteTaskIfFirstToday(user.user_id, csp::services::DailyTaskService::kTaskDailySubmit)); REQUIRE_FALSE(daily.CompleteTaskIfFirstToday( user.user_id, csp::services::DailyTaskService::kTaskDailySubmit)); const auto after = users.GetById(user.user_id); REQUIRE(after.has_value()); REQUIRE(after->rating == 2); const auto tasks = daily.ListTodayTasks(user.user_id); REQUIRE(tasks.size() == 4); }