public function testSearchByType()
 {
     $super = User::getByUsername('super');
     $steven = User::getByUsername('steven');
     Yii::app()->user->userModel = $super;
     $conversationModel = new Conversation(false);
     $searchAttributes = array();
     $conversation = new Conversation();
     $conversation->owner = $steven;
     $conversation->subject = 'My test subject';
     $conversation->description = 'My test description';
     $this->assertTrue($conversation->save());
     $conversationId = $conversation->id;
     //Super dont have created conversations
     $metadataAdapter = new ConversationsSearchDataProviderMetadataAdapter($conversationModel, $super->id, $searchAttributes, ConversationsSearchDataProviderMetadataAdapter::LIST_TYPE_CREATED);
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     $dataProvider = new RedBeanModelDataProvider('Conversation', null, false, $searchAttributeData);
     $data = $dataProvider->getData();
     $this->assertEquals(0, count($data));
     //Super dont participate in any conversations
     $metadataAdapter = new ConversationsSearchDataProviderMetadataAdapter($conversationModel, $super->id, $searchAttributes, ConversationsSearchDataProviderMetadataAdapter::LIST_TYPE_PARTICIPANT);
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     $dataProvider = new RedBeanModelDataProvider('Conversation', null, false, $searchAttributeData);
     $data = $dataProvider->getData();
     $this->assertEquals(0, count($data));
     //Super dont participate in any closed conversations
     $metadataAdapter = new ConversationsSearchDataProviderMetadataAdapter($conversationModel, $super->id, $searchAttributes, ConversationsSearchDataProviderMetadataAdapter::LIST_TYPE_CLOSED);
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     $dataProvider = new RedBeanModelDataProvider('Conversation', null, false, $searchAttributeData);
     $data = $dataProvider->getData();
     $this->assertEquals(0, count($data));
     //Super participate in one conversation
     $conversation = Conversation::getById($conversationId);
     $conversationParticipant = new ConversationParticipant();
     $conversationParticipant->person = $super;
     $conversation->conversationParticipants->add($conversationParticipant);
     $this->assertTrue($conversation->save());
     $metadataAdapter = new ConversationsSearchDataProviderMetadataAdapter($conversationModel, $super->id, $searchAttributes, ConversationsSearchDataProviderMetadataAdapter::LIST_TYPE_PARTICIPANT);
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     $dataProvider = new RedBeanModelDataProvider('Conversation', null, false, $searchAttributeData);
     $data = $dataProvider->getData();
     $this->assertEquals(1, count($data));
     //Super participate in a closed conversation
     $conversation = Conversation::getById($conversationId);
     $conversation->isClosed = true;
     $this->assertTrue($conversation->save());
     $metadataAdapter = new ConversationsSearchDataProviderMetadataAdapter($conversationModel, $super->id, $searchAttributes, ConversationsSearchDataProviderMetadataAdapter::LIST_TYPE_CLOSED);
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     $dataProvider = new RedBeanModelDataProvider('Conversation', null, false, $searchAttributeData);
     $data = $dataProvider->getData();
     $this->assertEquals(1, count($data));
 }
 /**
  * @depends testGetUnreadConversationCount
  */
 public function testDeleteConversation()
 {
     $conversations = Conversation::getAll();
     $this->assertEquals(3, count($conversations));
     $comments = Comment::getAll();
     $this->assertEquals(4, count($comments));
     //check count of conversation_items
     $count = ZurmoRedBean::getRow('select count(*) count from conversation_item');
     $this->assertEquals(2, $count['count']);
     //remove the account, tests tthat ConversationObserver is correctly removing data from conversation_item
     $accounts = Account::getByName('anAccount2');
     $this->assertTrue($accounts[0]->delete());
     $count = ZurmoRedBean::getRow('select count(*) count from conversation_item');
     $this->assertEquals(1, $count['count']);
     foreach ($conversations as $conversation) {
         $conversationId = $conversation->id;
         $conversation->forget();
         $conversation = Conversation::getById($conversationId);
         $deleted = $conversation->delete();
         $this->assertTrue($deleted);
     }
     //Count of conversation items should be 0 since the ConversationsObserver should make sure it gets removed correctly.
     $count = ZurmoRedBean::getRow('select count(*) count from conversation_item');
     $this->assertEquals(0, $count['count']);
     //check that all comments are removed, since they are owned.
     $comments = Comment::getAll();
     $this->assertEquals(0, count($comments));
 }
 public function testMarkReadUnreadMassActionByModel()
 {
     $super = User::getByUsername('super');
     //Conversation model
     $conversation = new Conversation();
     $conversation->owner = $super;
     $conversation->subject = 'My test conversation subject';
     $conversation->description = 'My test conversation description';
     $this->assertTrue($conversation->save());
     $conversationId = $conversation->id;
     $this->assertTrue((bool) ConversationsUtil::hasUserReadConversationLatest($conversation, $super));
     //Mark conversation as unread
     $selectedIds = $conversationId;
     $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
     $this->setGetArray(array('ajax' => 'list-view', 'modelClassName' => 'Conversation', 'MashableInboxForm' => array('massAction' => 'markUnread', 'selectedIds' => $selectedIds)));
     $content = $this->runControllerWithNoExceptionsAndGetContent('mashableInbox/default/list');
     $conversation = Conversation::getById($conversationId);
     $this->assertFalse((bool) ConversationsUtil::hasUserReadConversationLatest($conversation, $super));
     //Mark conversation as read
     $this->setGetArray(array('ajax' => 'list-view', 'modelClassName' => 'Conversation', 'MashableInboxForm' => array('massAction' => 'markRead', 'selectedIds' => $selectedIds)));
     $content = $this->runControllerWithNoExceptionsAndGetContent('mashableInbox/default/list');
     $conversation = Conversation::getById($conversationId);
     $this->assertTrue((bool) ConversationsUtil::hasUserReadConversationLatest($conversation, $super));
     //Mission model
     $mission = new Mission();
     $mission->owner = $super;
     $mission->description = 'My test mission description';
     $mission->status = Mission::STATUS_AVAILABLE;
     $this->assertTrue($mission->save());
     $missionId = $mission->id;
     $this->assertTrue((bool) MissionsUtil::hasUserReadMissionLatest($mission, $super));
     //Mark mission as unread
     $selectedIds = $missionId;
     $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
     $this->setGetArray(array('ajax' => 'list-view', 'modelClassName' => 'Mission', 'MashableInboxForm' => array('massAction' => 'markUnread', 'selectedIds' => $selectedIds)));
     $content = $this->runControllerWithNoExceptionsAndGetContent('mashableInbox/default/list');
     $mission = Mission::getById($missionId);
     $this->assertFalse((bool) MissionsUtil::hasUserReadMissionLatest($mission, $super));
     //Mark mission as read
     $this->setGetArray(array('ajax' => 'list-view', 'modelClassName' => 'Mission', 'MashableInboxForm' => array('massAction' => 'markRead', 'selectedIds' => $selectedIds)));
     $content = $this->runControllerWithNoExceptionsAndGetContent('mashableInbox/default/list');
     $mission = Mission::getById($missionId);
     $this->assertTrue((bool) MissionsUtil::hasUserReadMissionLatest($mission, $super));
 }
 public function testResolveCloseSelected()
 {
     $super = User::getByUsername('super');
     $steven = User::getByUsername('steven');
     Yii::app()->user->userModel = $super;
     $createdConversation = $this->createAndSaveNewConversationForUser($super, $steven);
     $this->rules->resolveCloseSelected($createdConversation->id);
     $conversation = Conversation::getById($createdConversation->id);
     $this->assertTrue((bool) $conversation->isClosed);
 }
Пример #5
0
 public function actionUpdateParticipants($id)
 {
     $postData = PostUtil::getData();
     if (isset($postData['ConversationParticipantsForm'])) {
         $conversation = Conversation::getById((int) $id);
         $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation);
         $currentUserWasParticipant = ConversationParticipantsUtil::isUserAParticipant($conversation, Yii::app()->user->userModel);
         $peopleAdded = ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData['ConversationParticipantsForm'], $explicitReadWriteModelPermissions);
         ConversationParticipantsUtil::resolveEmailInvitesByPeople($conversation, $peopleAdded);
         $saved = $conversation->save();
         if ($saved) {
             $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($conversation, $explicitReadWriteModelPermissions);
             $currentUserIsParticipant = ConversationParticipantsUtil::isCurrentUserAParticipant($conversation);
             if ($currentUserWasParticipant && !$currentUserIsParticipant) {
                 echo 'redirectToList';
             }
         } else {
             throw new FailedToSaveModelException();
         }
     }
 }
 /**
  * @depends testAddingCommentsAndUpdatingActivityStampsOnConversation
  */
 public function testUserEditAndDeletePermissions()
 {
     if (!SECURITY_OPTIMIZED) {
         return;
     }
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $mary = User::getByUsername('mary');
     $conversations = Conversation::getAll();
     $this->assertEquals(1, count($conversations));
     $this->assertEquals(2, $conversations[0]->comments->count());
     //Add mary back as a participant.
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $this->setGetArray(array('id' => $conversations[0]->id));
     $this->setPostArray(array('ConversationParticipantsForm' => array('itemIds' => $mary->getClassId('Item'))));
     $this->runControllerWithNoExceptionsAndGetContent('conversations/default/updateParticipants', true);
     //new test - mary, as a participant can edit the conversation
     $mary = $this->logoutCurrentUserLoginNewUserAndGetByUsername('mary');
     $this->setGetArray(array('id' => $conversations[0]->id));
     $this->runControllerWithNoExceptionsAndGetContent('conversations/default/edit');
     //new test - mary can delete a comment she wrote
     $maryCommentId = $conversations[0]->comments->offsetGet(1)->id;
     $this->assertEquals($conversations[0]->comments->offsetGet(1)->createdByUser->id, $mary->id);
     $superCommentId = $conversations[0]->comments->offsetGet(0)->id;
     $this->assertEquals($conversations[0]->comments->offsetGet(0)->createdByUser->id, $super->id);
     $this->setGetArray(array('relatedModelId' => $conversations[0]->id, 'relatedModelClassName' => 'Conversation', 'relatedModelRelationName' => 'comments', 'id' => $maryCommentId));
     $this->runControllerWithNoExceptionsAndGetContent('comments/default/deleteViaAjax', true);
     $conversationId = $conversations[0]->id;
     $conversations[0]->forget();
     $conversation = Conversation::getById($conversationId);
     $this->assertEquals(1, $conversation->comments->count());
     //new test - mary cannot delete a comment she did not write.
     $this->setGetArray(array('relatedModelId' => $conversations[0]->id, 'relatedModelClassName' => 'Conversation', 'relatedModelRelationName' => 'comments', 'id' => $superCommentId));
     $this->runControllerShouldResultInAjaxAccessFailureAndGetContent('comments/default/deleteViaAjax');
     $conversationId = $conversations[0]->id;
     $conversations[0]->forget();
     $conversation = Conversation::getById($conversationId);
     $this->assertEquals(1, $conversation->comments->count());
     $this->assertEquals(1, $conversation->comments->count());
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     //new test , super can view and edit the conversation
     $this->setGetArray(array('id' => $conversation->id));
     $this->runControllerWithNoExceptionsAndGetContent('conversations/default/details');
     $this->runControllerWithNoExceptionsAndGetContent('conversations/default/edit');
     //new test , super can delete the conversation
     $this->setGetArray(array('id' => $conversation->id));
     $this->runControllerWithRedirectExceptionAndGetContent('conversations/default/delete');
     $conversations = Conversation::getAll();
     $this->assertEquals(0, count($conversations));
 }
 public function testMarkUserHasReadLatest()
 {
     $super = User::getByUsername('super');
     $steven = UserTestHelper::createBasicUser('steven');
     $conversation = new Conversation();
     $conversation->owner = $super;
     $conversation->subject = 'My test subject';
     $conversation->description = 'My test description';
     $this->assertTrue($conversation->save());
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation);
     $postData = array();
     $postData['itemIds'] = $steven->getClassId('Item');
     ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData, $explicitReadWriteModelPermissions);
     $this->assertTrue($conversation->save());
     $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($conversation, $explicitReadWriteModelPermissions);
     $this->assertTrue($success);
     $id = $conversation->id;
     $conversation->forget();
     unset($conversation);
     $conversation = Conversation::getById($id);
     $this->assertEquals(1, $conversation->ownerHasReadLatest);
     $this->assertEquals(0, $conversation->conversationParticipants->offsetGet(0)->hasReadLatest);
     //After running for super, nothing will change.
     ConversationsUtil::markUserHasReadLatest($conversation, $super);
     $id = $conversation->id;
     $conversation->forget();
     unset($conversation);
     $conversation = Conversation::getById($id);
     $this->assertEquals(1, $conversation->ownerHasReadLatest);
     $this->assertEquals(0, $conversation->conversationParticipants->offsetGet(0)->hasReadLatest);
     //After running for steven, it will show read for him.
     ConversationsUtil::markUserHasReadLatest($conversation, $steven);
     $id = $conversation->id;
     $conversation->forget();
     unset($conversation);
     $conversation = Conversation::getById($id);
     $this->assertEquals(1, $conversation->ownerHasReadLatest);
     $this->assertEquals(1, $conversation->conversationParticipants->offsetGet(0)->hasReadLatest);
     $conversation->ownerHasReadLatest = false;
     $this->assertTrue($conversation->save());
     $id = $conversation->id;
     $conversation->forget();
     unset($conversation);
     $conversation = Conversation::getById($id);
     $this->assertEquals(0, $conversation->ownerHasReadLatest);
     $this->assertEquals(1, $conversation->conversationParticipants->offsetGet(0)->hasReadLatest);
     //Now try for Steven, nothing changes
     ConversationsUtil::markUserHasReadLatest($conversation, $steven);
     $id = $conversation->id;
     $conversation->forget();
     unset($conversation);
     $conversation = Conversation::getById($id);
     $this->assertEquals(0, $conversation->ownerHasReadLatest);
     $this->assertEquals(1, $conversation->conversationParticipants->offsetGet(0)->hasReadLatest);
     //Now try for super, should change
     ConversationsUtil::markUserHasReadLatest($conversation, $super);
     $id = $conversation->id;
     $conversation->forget();
     unset($conversation);
     $conversation = Conversation::getById($id);
     $this->assertEquals(1, $conversation->ownerHasReadLatest);
     $this->assertEquals(1, $conversation->conversationParticipants->offsetGet(0)->hasReadLatest);
 }