public function testSimpleRegistrationActions() { self::log("Started"); //create a contest and its admin $contestData = ContestsFactory::createContest(null, 1); $contestAdmin = UserFactory::createUser(); ContestsFactory::addAdminUser($contestData, $contestAdmin); //make it "registrable" self::log("Udate contest to make it registrable"); $r1 = new Request(); $r1["contest_alias"] = $contestData["request"]["alias"]; $r1["contestant_must_register"] = true; $r1["auth_token"] = $this->login($contestAdmin); ContestController::apiUpdate($r1); //some user asks for contest $contestant = UserFactory::createUser(); $r2 = new Request(); $r2["contest_alias"] = $contestData["request"]["alias"]; $r2["auth_token"] = $this->login($contestant); try { $response = ContestController::apiDetails($r2); $this->AssertFalse(true, "User gained access to contest even though its registration needed."); } catch (ForbiddenAccessException $fae) { // Expected. Continue. } self::log("user registers, into contest"); ContestController::apiRegisterForContest($r2); //admin lists registrations $r3 = new Request(); $r3["contest_alias"] = $contestData["request"]["alias"]; $r3["auth_token"] = $this->login($contestAdmin); $result = ContestController::apiRequests($r3); $this->assertEquals(sizeof($result["users"]), 1); self::log("amin rejects registration"); $r3["username"] = $contestant->username; $r3["resolution"] = false; ContestController::apiArbitrateRequest($r3); //ask for details again, this should fail again $r2 = new Request(); $r2["contest_alias"] = $contestData["request"]["alias"]; $r2["auth_token"] = $this->login($contestant); try { $response = ContestController::apiDetails($r2); $this->AssertFalse(true); } catch (ForbiddenAccessException $fae) { // Expected. Continue. } //admin admits user $r3["username"] = $contestant->username; $r3["resolution"] = true; ContestController::apiArbitrateRequest($r3); //user can now submit to contest $r2 = new Request(); $r2["contest_alias"] = $contestData["request"]["alias"]; $r2["auth_token"] = $this->login($contestant); // Explicitly join contest ContestController::apiOpen($r2); ContestController::apiDetails($r2); }
/** * */ public function testViewProblemInAContestDetailsValid() { // Get a contest $contestData = ContestsFactory::createContest(); // Get a user to be the author $author = UserFactory::createUser(); // Get a problem $problemData = ProblemsFactory::createProblem(null, null, 1, $author); // Add the problem to the contest ContestsFactory::addProblemToContest($problemData, $contestData); // Get a user for our scenario $contestant = UserFactory::createUser(); // Prepare our request $r = new Request(); $r["contest_alias"] = $contestData["request"]["alias"]; $r["problem_alias"] = $problemData["request"]["alias"]; // Log in the user $r["auth_token"] = $this->login($contestant); // Explicitly join contest ContestController::apiOpen($r); // Call api $response = ProblemController::apiDetails($r); // Get problem and contest from DB to check it $problemDAO = ProblemsDAO::getByAlias($problemData["request"]["alias"]); $contestDAO = ContestsDAO::getByAlias($contestData["request"]["alias"]); $contestantsDAO = UsersDAO::search(new Users(array("username" => $contestant->getUsername()))); $contestantDAO = $contestantsDAO[0]; // Assert data $this->assertEquals($response["title"], $problemDAO->getTitle()); $this->assertEquals($response["alias"], $problemDAO->getAlias()); $this->assertEquals($response["validator"], $problemDAO->getValidator()); $this->assertEquals($response["time_limit"], $problemDAO->getTimeLimit()); $this->assertEquals($response["memory_limit"], $problemDAO->getMemoryLimit()); $this->assertEquals($response["problemsetter"]['username'], $author->username); $this->assertEquals($response["problemsetter"]['name'], $author->name); $this->assertEquals($response["source"], $problemDAO->getSource()); $this->assertContains("<h1>Entrada</h1>", $response["problem_statement"]); $this->assertEquals($response["order"], $problemDAO->getOrder()); $this->assertEquals($response["score"], 0); // Default data $this->assertEquals(0, $problemDAO->getVisits()); $this->assertEquals(0, $problemDAO->getSubmissions()); $this->assertEquals(0, $problemDAO->getAccepted()); $this->assertEquals(0, $problemDAO->getDifficulty()); // Verify that we have an empty array of runs $this->assertEquals(0, count($response["runs"])); // Verify that problem was marked as Opened $problem_opened = ContestProblemOpenedDAO::getByPK($contestDAO->getContestId(), $problemDAO->getProblemId(), $contestantDAO->getUserId()); $this->assertNotNull($problem_opened); // Verify open time $this->assertEquals(Utils::GetPhpUnixTimestamp(), Utils::GetPhpUnixTimestamp($problem_opened->getOpenTime())); }
public static function openContest($contestData, $user) { // Create an empty request $r = new Request(); // Log in as contest director $r['auth_token'] = OmegaupTestCase::login($user); // Prepare our request $r['contest_alias'] = $contestData['request']['alias']; // Call api ContestController::apiOpen($r); unset($_REQUEST); }
/** * First access time should not change */ public function testAccessTimeIsAlwaysFirstAccess() { // Get a contest $contestData = ContestsFactory::createContest(); // Get a user for our scenario $contestant = UserFactory::createUser(); // Prepare our request $r = new Request(); $r['contest_alias'] = $contestData['request']['alias']; // Log in the user $r['auth_token'] = $this->login($contestant); // Explicitly join contest ContestController::apiOpen($r); // Call api $response = ContestController::apiDetails($r); // We need to grab the access time from the ContestUsers table $contest = ContestsDAO::getByAlias($contestData['request']['alias']); $contest_user = ContestsUsersDAO::getByPK($contestant->getUserId(), $contest->getContestId()); $firstAccessTime = $contest_user->getAccessTime(); // Call API again, access time should not change $response = ContestController::apiDetails($r); $contest_user = ContestsUsersDAO::getByPK($contestant->getUserId(), $contest->getContestId()); $this->assertEquals($firstAccessTime, $contest_user->getAccessTime()); }