public function testEditableProblems() { $author = UserFactory::createUser(); $problemData[0] = ProblemsFactory::createProblemWithAuthor($author); $problemData[1] = ProblemsFactory::createProblemWithAuthor($author); $problemData[2] = ProblemsFactory::createProblemWithAuthor($author); // Call API // Call api $r = new Request(array("auth_token" => self::login($author))); $response = UserController::apiProblems($r); $this->assertEquals(count($problemData), count($response["problems"])); $this->assertEquals($problemData[2]["request"]["alias"], $response["problems"][0]["alias"]); $this->assertEquals($problemData[1]["request"]["alias"], $response["problems"][1]["alias"]); $this->assertEquals($problemData[0]["request"]["alias"], $response["problems"][2]["alias"]); }
/** * Tests contest report used in OMI */ public function testContestReport() { // Get a contest $contestData = ContestsFactory::createContest(); $contestDirector = $contestData['director']; // Get a problem $problemData = ProblemsFactory::createProblemWithAuthor($contestDirector); // Add the problem to the contest ContestsFactory::addProblemToContest($problemData, $contestData); // Create our contestants $contestants = array(); array_push($contestants, UserFactory::createUser()); array_push($contestants, UserFactory::createUser()); array_push($contestants, UserFactory::createUser()); $contestAdmin = UserFactory::createUser(); ContestsFactory::addAdminUser($contestData, $contestAdmin); // Create runs $runsData = array(); $runsData[0] = RunsFactory::createRun($problemData, $contestData, $contestants[0]); $runsData[1] = RunsFactory::createRun($problemData, $contestData, $contestants[0]); $runsData[2] = RunsFactory::createRun($problemData, $contestData, $contestants[1]); $runsData[3] = RunsFactory::createRun($problemData, $contestData, $contestants[2]); $runDataDirector = RunsFactory::createRun($problemData, $contestData, $contestDirector); $runDataAdmin = RunsFactory::createRun($problemData, $contestData, $contestAdmin); // Grade the runs RunsFactory::gradeRun($runsData[0], 0, 'CE'); RunsFactory::gradeRun($runsData[1]); RunsFactory::gradeRun($runsData[2], 0.9, 'PA'); RunsFactory::gradeRun($runsData[3], 1, 'AC', 180); RunsFactory::gradeRun($runDataDirector, 1, 'AC', 120); RunsFactory::gradeRun($runDataAdmin, 1, 'AC', 110); // Create API $response = ContestController::apiReport(new Request(array('contest_alias' => $contestData['request']['alias'], 'auth_token' => $this->login($contestDirector)))); $this->assertEquals($problemData['request']['alias'], $response['problems'][0]['alias']); foreach ($contestants as $contestant) { $found = false; foreach ($response['ranking'] as $rank) { if ($rank['username'] == $contestant->username) { $found = true; break; } } $this->assertTrue($found); } }
/** * Add too many problems to a contest. */ public function testAddTooManyProblemsToContest() { // Get a contest $contestData = ContestsFactory::createContest(); $auth_token = $this->login($contestData["director"]); for ($i = 0; $i < MAX_PROBLEMS_IN_CONTEST + 1; $i++) { // Get a problem $problemData = ProblemsFactory::createProblemWithAuthor($contestData['director']); // Build request $r = new Request(array("auth_token" => $auth_token, "contest_alias" => $contestData["contest"]->alias, "problem_alias" => $problemData["request"]["alias"], "points" => 100, "order_in_contest" => $i + 1)); try { // Call API $response = ContestController::apiAddProblem($r); $this->assertLessThan(MAX_PROBLEMS_IN_CONTEST, $i); // Validate $this->assertEquals("ok", $response["status"]); self::assertProblemAddedToContest($problemData, $contestData, $r); } catch (ApiException $e) { $this->assertEquals($e->getMessage(), "contestAddproblemTooManyProblems"); $this->assertEquals($i, MAX_PROBLEMS_IN_CONTEST); } } }
/** * Tests contest report used in OMI */ public function testContestReport() { // Get a contest $contestData = ContestsFactory::createContest(); $contestDirector = $contestData["director"]; // Get a problem $problemData = ProblemsFactory::createProblemWithAuthor($contestDirector); // Add the problem to the contest ContestsFactory::addProblemToContest($problemData, $contestData); // Create our contestants $contestants = array(); array_push($contestants, UserFactory::createUser()); array_push($contestants, UserFactory::createUser()); array_push($contestants, UserFactory::createUser()); $contestAdmin = UserFactory::createUser(); ContestsFactory::addAdminUser($contestData, $contestAdmin); // Create runs $runsData = array(); $runsData[0] = RunsFactory::createRun($problemData, $contestData, $contestants[0]); $runsData[1] = RunsFactory::createRun($problemData, $contestData, $contestants[0]); $runsData[2] = RunsFactory::createRun($problemData, $contestData, $contestants[1]); $runsData[3] = RunsFactory::createRun($problemData, $contestData, $contestants[2]); $runDataDirector = RunsFactory::createRun($problemData, $contestData, $contestDirector); $runDataAdmin = RunsFactory::createRun($problemData, $contestData, $contestAdmin); // Grade the runs RunsFactory::gradeRun($runsData[0], 0, "CE"); RunsFactory::gradeRun($runsData[1]); RunsFactory::gradeRun($runsData[2], 0.9, "PA"); RunsFactory::gradeRun($runsData[3], 1, "AC", 180); RunsFactory::gradeRun($runDataDirector, 1, "AC", 120); RunsFactory::gradeRun($runDataAdmin, 1, "AC", 110); // Create API $response = ContestController::apiReport(new Request(array("contest_alias" => $contestData["request"]["alias"], "auth_token" => $this->login($contestDirector)))); $this->assertEquals($problemData["request"]["alias"], $response["problems"][0]["alias"]); foreach ($contestants as $contestant) { $found = false; foreach ($response["ranking"] as $rank) { if ($rank["username"] == $contestant->username) { $found = true; break; } } $this->assertTrue($found); } }