public function testMultipleUnreadModels_multipleUsers_multipleUpdates_multipleVisitsToQuestionPage_usersHaveDifferentUnreadStates() { $project = self::$environ->createProject("unread_test", "unreadCode"); $projectId = $project->id->asString(); $userId1 = self::$environ->createUser('user1', 'user1', 'user1'); $user1 = new UserModel($userId1); $user1->addProject($project->id->asString()); $user1->write(); $userId2 = self::$environ->createUser('user2', 'user2', 'user2'); $user2 = new UserModel($userId2); $user2->addProject($project->id->asString()); $user2->write(); $userId3 = self::$environ->createUser('user3', 'user3', 'user3'); $user3 = new UserModel($userId3); $user3->addProject($project->id->asString()); $user3->write(); $answer1 = array('content' => "test answer 1", 'id' => ''); $answer2 = array('content' => "test answer 2", 'id' => ''); $text = new TextModel($project); $text->title = "Text 1"; $usx = MongoTestEnvironment::usxSample(); $text->content = $usx; $textId = $text->write(); $question = new QuestionModel($project); $question->title = "test question"; $question->textRef->id = $textId; $questionId = $question->write(); QuestionCommands::updateAnswer($projectId, $questionId, $answer1, $userId1); QuestionCommands::updateAnswer($projectId, $questionId, $answer2, $userId2); // the answer author does NOT get their answer marked as unread $unreadModel = new UnreadAnswerModel($userId1, $projectId, $questionId); $this->assertCount(1, $unreadModel->unreadItems()); // the answer author does NOT get their answer marked as unread $unreadModel = new UnreadAnswerModel($userId2, $projectId, $questionId); $this->assertCount(1, $unreadModel->unreadItems()); $unreadModel = new UnreadAnswerModel($userId3, $projectId, $questionId); $this->assertCount(2, $unreadModel->unreadItems()); // user1 visits question page QuestionCommentDto::encode($projectId, $questionId, $userId1); $unreadModel = new UnreadAnswerModel($userId1, $projectId, $questionId); $this->assertCount(0, $unreadModel->unreadItems()); $unreadModel = new UnreadAnswerModel($userId2, $projectId, $questionId); $this->assertCount(1, $unreadModel->unreadItems()); $unreadModel = new UnreadAnswerModel($userId3, $projectId, $questionId); $this->assertCount(2, $unreadModel->unreadItems()); // user2 visits question page QuestionCommentDto::encode($projectId, $questionId, $userId2); $unreadModel = new UnreadAnswerModel($userId1, $projectId, $questionId); $this->assertCount(0, $unreadModel->unreadItems()); $unreadModel = new UnreadAnswerModel($userId2, $projectId, $questionId); $this->assertCount(0, $unreadModel->unreadItems()); $unreadModel = new UnreadAnswerModel($userId3, $projectId, $questionId); $this->assertCount(2, $unreadModel->unreadItems()); // user2 visits question page QuestionCommentDto::encode($projectId, $questionId, $userId3); $unreadModel = new UnreadAnswerModel($userId1, $projectId, $questionId); $this->assertCount(0, $unreadModel->unreadItems()); $unreadModel = new UnreadAnswerModel($userId2, $projectId, $questionId); $this->assertCount(0, $unreadModel->unreadItems()); $unreadModel = new UnreadAnswerModel($userId3, $projectId, $questionId); $this->assertCount(0, $unreadModel->unreadItems()); }
ProjectCommands::updateUserRole($testProjectId, $managerUserId, ProjectRoles::MANAGER); ProjectCommands::updateUserRole($testProjectId, $memberUserId, ProjectRoles::CONTRIBUTOR); ProjectCommands::updateUserRole($testProjectId, $resetUserId, ProjectRoles::CONTRIBUTOR); ProjectCommands::updateUserRole($otherProjectId, $adminUserId, ProjectRoles::MANAGER); ProjectCommands::updateUserRole($fourthProjectId, $adminUserId, ProjectRoles::MANAGER); ProjectCommands::updateUserRole($srTestProjectId, $adminUserId, ProjectRoles::MANAGER); if ($site == 'scriptureforge') { $text1 = TextCommands::updateText($testProjectId, array('id' => '', 'title' => $constants['testText1Title'], 'content' => $constants['testText1Content'])); $text2 = TextCommands::updateText($testProjectId, array('id' => '', 'title' => $constants['testText2Title'], 'content' => $constants['testText2Content'])); $question1 = QuestionCommands::updateQuestion($testProjectId, array('id' => '', 'textRef' => $text1, 'title' => $constants['testText1Question1Title'], 'description' => $constants['testText1Question1Content'])); $question2 = QuestionCommands::updateQuestion($testProjectId, array('id' => '', 'textRef' => $text1, 'title' => $constants['testText1Question2Title'], 'description' => $constants['testText1Question2Content'])); $template1 = QuestionTemplateCommands::updateTemplate($testProjectId, array('id' => '', 'title' => 'first template', 'description' => 'not particularly interesting')); $template2 = QuestionTemplateCommands::updateTemplate($testProjectId, array('id' => '', 'title' => 'second template', 'description' => 'not entirely interesting')); $answer1 = QuestionCommands::updateAnswer($testProjectId, $question1, array('id' => '', 'content' => $constants['testText1Question1Answer']), $managerUserId); $answer1Id = array_keys($answer1)[0]; $answer2 = QuestionCommands::updateAnswer($testProjectId, $question2, array('id' => '', 'content' => $constants['testText1Question2Answer']), $managerUserId); $answer2Id = array_keys($answer2)[0]; $comment1 = QuestionCommands::updateComment($testProjectId, $question1, $answer1Id, array('id' => '', 'content' => $constants['testText1Question1Answer1Comment']), $managerUserId); $comment2 = QuestionCommands::updateComment($testProjectId, $question2, $answer2Id, array('id' => '', 'content' => $constants['testText1Question2Answer2Comment']), $managerUserId); } elseif ($site == 'languageforge') { // Set up LanguageForge E2E test envrionment here ProjectCommands::updateUserRole($testProjectId, $observerUserId, LexRoles::OBSERVER); $testProjectModel = new LexProjectModel($testProjectId); $testProjectModel->addInputSystem('th-fonipa', 'tipa', 'Thai'); $testProjectModel->config->entry->fields[LexConfig::LEXEME]->inputSystems[] = 'th-fonipa'; $testProjectModel->addInputSystem('th-Zxxx-x-audio', 'taud', 'Thai Voice'); $testProjectModel->config->entry->fields[LexConfig::LEXEME]->inputSystems[] = 'th-Zxxx-x-audio'; $testProjectId = $testProjectModel->write(); // setup to mimic file upload $fileName = $constants['testEntry1']['lexeme']['th-Zxxx-x-audio']['value']; $file = array();
public function question_update_answer($questionId, $answer) { return QuestionCommands::updateAnswer($this->projectId, $questionId, $answer, $this->userId); }
public function testUpdateAnswer_ExistingAnswer_CantUpdateTagsOrExportFlag() { $environ = new MongoTestEnvironment(); $environ->clean(); $project = $environ->createProject(SF_TESTPROJECT, SF_TESTPROJECTCODE); $text = new TextModel($project); $text->title = 'Text 1'; $usx = MongoTestEnvironment::usxSample(); $text->content = $usx; $textId = $text->write(); $question = new QuestionModel($project); $question->textRef->id = $textId; $questionId = $question->write(); $answer = new AnswerModel(); $answer->content = 'the answer'; $user1Id = $environ->createUser('user1', 'user1', 'user1'); $answer->userRef->id = $user1Id; $answer->tags[] = 'originalTag'; $answer->isToBeExported = true; $answerId = $question->writeAnswer($answer); $answerArray = array('id' => $answerId, 'content' => 'updated answer', 'tags' => array('updatedTag'), 'isToBeExported' => false); QuestionCommands::updateAnswer($project->id->asString(), $questionId, $answerArray, $user1Id); $question->read($questionId); $newAnswer = $question->readAnswer($answerId); $this->assertEquals('updated answer', $newAnswer->content); $this->assertCount(1, $newAnswer->tags); $this->assertEquals('originalTag', $newAnswer->tags[0]); $this->assertTrue($newAnswer->isToBeExported); }