/** * Creates a valid clarification */ public function testCreateValidClarification() { // Get a problem $problemData = ProblemsFactory::createProblem(); // Get a contest $contestData = ContestsFactory::createContest(); // Add the problem to the contest ContestsFactory::addProblemToContest($problemData, $contestData); // Create our contestant who will submit the clarification $contestant = UserFactory::createUser(); // Call the API $this->detourBroadcasterCalls(); $clarificationData = ClarificationsFactory::createClarification($problemData, $contestData, $contestant); // Assert status of new contest $this->assertArrayHasKey("clarification_id", $clarificationData['response']); // Verify that clarification was inserted in the database $clarification = ClarificationsDAO::getByPK($clarificationData['response']['clarification_id']); // Verify our retreived clarificatoin $this->assertNotNull($clarification); $this->assertEquals($clarificationData['request']['message'], $clarification->getMessage()); // We need to verify that the contest and problem IDs where properly saved // Extractiing the contest and problem from DB to check IDs $problem = ProblemsDAO::getByAlias($problemData["request"]["alias"]); $contest = ContestsDAO::getByAlias($contestData["request"]["alias"]); $this->assertEquals($contest->getContestId(), $clarification->getContestId()); $this->assertEquals($problem->getProblemId(), $clarification->getProblemId()); }
/** * Basic test for getting the list of clarifications of a contest. * Create 4 clarifications in a contest with one user, then another 3 clarifications * with another user. * Get the list for the first user, will see only his 4 */ public function testListPublicClarificationsForContestant() { // Get a problem $problemData = ProblemsFactory::createProblem(); // Get a contest $contestData = ContestsFactory::createContest(); // Add the problem to the contest ContestsFactory::addProblemToContest($problemData, $contestData); // Create our contestant who will submit the clarification $contestant1 = UserFactory::createUser(); // Create 4 clarifications with this contestant $clarificationData1 = array(); $this->detourBroadcasterCalls($this->exactly(9)); for ($i = 0; $i < 4; $i++) { $clarificationData1[$i] = ClarificationsFactory::createClarification($problemData, $contestData, $contestant1); } // Answer clarification 0 and 2 ClarificationsFactory::answer($clarificationData1[0], $contestData); ClarificationsFactory::answer($clarificationData1[2], $contestData); // Create another contestant $contestant2 = UserFactory::createUser(); // Create 3 clarifications with this contestant $clarificationData2 = array(); for ($i = 0; $i < 3; $i++) { $clarificationData2[$i] = ClarificationsFactory::createClarification($problemData, $contestData, $contestant2); } // Prepare the request $r = new Request(); $r["contest_alias"] = $contestData["request"]["alias"]; // Log in with first user $r["auth_token"] = $this->login($contestant1); // Call API $response = ContestController::apiClarifications($r); // Check that we got all clarifications $this->assertEquals(count($clarificationData1), count($response["clarifications"])); // Check that the clarifications came in the order we expect // First we expect clarifications not answered $this->assertEquals($clarificationData1[3]["request"]["message"], $response["clarifications"][0]["message"]); $this->assertEquals($clarificationData1[1]["request"]["message"], $response["clarifications"][1]["message"]); // Then clarifications answered, newer first $this->assertEquals($clarificationData1[2]["request"]["message"], $response["clarifications"][2]["message"]); $this->assertEquals($clarificationData1[0]["request"]["message"], $response["clarifications"][3]["message"]); }
/** * Basic test for answer * */ public function testUpdateAnswer() { // Get a problem $problemData = ProblemsFactory::createProblem(); // Get a contest $contestData = ContestsFactory::createContest(); // Add the problem to the contest ContestsFactory::addProblemToContest($problemData, $contestData); // Create our contestant who will submit the clarification $contestant = UserFactory::createUser(); // Create clarification $this->detourBroadcasterCalls($this->exactly(2)); $clarificationData = ClarificationsFactory::createClarification($problemData, $contestData, $contestant); // Update answer $newAnswer = 'new answer'; $response = ClarificationsFactory::answer($clarificationData, $contestData, $newAnswer); // Get clarification from DB $clarification = ClarificationsDAO::getByPK($clarificationData['response']['clarification_id']); // Validate that clarification stays the same $this->assertEquals($clarificationData['request']['message'], $clarification->getMessage()); $this->assertEquals($clarificationData['request']['public'], $clarification->getPublic()); // Validate our update $this->assertEquals($newAnswer, $clarification->getAnswer()); }
public function testPublicClarificationsCanBeViewed() { // Get a problem $problemData = ProblemsFactory::createProblem(); // Get a contest $contestData = ContestsFactory::createContest(); // Add the problem to the contest ContestsFactory::addProblemToContest($problemData, $contestData); // Create our contestant who will submit the clarification $contestant = UserFactory::createUser(); // Create our contestant who will try to view the clarification $contestant2 = UserFactory::createUser(); // Create the clarification, note that contestant will create it $this->detourBroadcasterCalls(); $clarificationData = ClarificationsFactory::createClarification($problemData, $contestData, $contestant); // Manually set the just created clarification to PUBLIC $clarification = ClarificationsDAO::getByPK($clarificationData['response']['clarification_id']); $clarification->setPublic('1'); ClarificationsDAO::save($clarification); // Prepare the request object $r = new Request(); $r['clarification_id'] = $clarificationData['response']['clarification_id']; // Log in with the author of the clarification $r['auth_token'] = $this->login($contestant2); // Call API $response = ClarificationController::apiDetails($r); // Check the data we got $this->assertClarification($r['clarification_id'], $response); }