public function itCleansUserFromRecipientsWhenUserCantReadAtLeastOneChangedField() { $field1 = new MockTracker_FormElement_Field_Date(); $value1_previous = new MockTracker_Artifact_ChangesetValue_Date(); $value1_current = new MockTracker_Artifact_ChangesetValue_Date(); $dao = new MockTracker_Artifact_Changeset_ValueDao(); $dar = new MockDataAccessResult(); $fact = new MockTracker_FormElementFactory(); $artifact = new MockTracker_Artifact(); $previous_changeset = new MockTracker_Artifact_Changeset(); $um = new MockUserManager(); $comment = new MockTracker_Artifact_Changeset_Comment(); $current_changeset = new Tracker_Artifact_ChangesetTestVersion(); $previous_changeset->setReturnValue('getId', 65); $previous_changeset->setReturnReference('getValue', $value1_previous, array($field1)); $previous_changeset->setReturnReference('getUserManager', $um); $artifact->setReturnReference('getPreviousChangeset', $previous_changeset, array(66)); $dar->setReturnValueAt(0, 'current', array('changeset_id' => 66, 'field_id' => 1, 'id' => 11, 'has_changed' => 1)); $dar->setReturnValue('valid', true); $dar->setReturnValueAt(2, 'valid', false); $dao->setReturnReference('searchById', $dar); $fact->setReturnReference('getFieldById', $field1, array(1)); $field1->setReturnValue('getId', 1); $field1->setReturnValue('getLabel', 'field1'); $field1->setReturnValue('userCanRead', false); $field1->setReturnReference('getChangesetValue', $value1_current, array('*', 11, 1)); $value1_previous->expectNever('hasChanged'); $value1_current->setReturnValue('hasChanged', true); $value1_current->setReturnValue('diff', 'has changed', array($value1_previous, '*')); $comment->setReturnValue('hasEmptyBody', true); $current_changeset->setReturnValue('getId', 66); $current_changeset->setReturnReference('getValueDao', $dao); $current_changeset->setReturnReference('getFormElementFactory', $fact); $current_changeset->setReturnReference('getArtifact', $artifact); $current_changeset->setReturnReference('getUserManager', $um); $current_changeset->setReturnReference('getComment', $comment); $recipients = array("recipient1" => true, "recipient2" => true, "recipient3" => true); $user1 = stub('PFUser')->getUserName()->returns('recipient1'); $user2 = stub('PFUser')->getUserName()->returns('recipient2'); $user3 = stub('PFUser')->getUserName()->returns('recipient3'); $um->setReturnReference('getUserByUserName', $user1); $um->setReturnReference('getUserByUserName', $user2); $um->setReturnReference('getUserByUserName', $user3); $current_changeset->removeRecipientsThatMayReceiveAnEmptyNotification($recipients); $this->assertEqual($recipients, array()); }
function testIsValidRequiredFieldWithoutExistingValues() { $f = new Tracker_FormElement_Field_ArtifactLinkTestVersion(); $f->setReturnValue('isRequired', true); $rai = new MockTracker_Valid_Rule_ArtifactId(); $rai->setReturnValue('isValid', true, array('123')); $rai->setReturnValue('isValid', true, array('321')); $rai->setReturnValue('isValid', true, array('999')); $rai->setReturnValue('isValid', false, array('666')); $rai->setReturnValue('isValid', false, array('toto')); $f->setReturnReference('getRuleArtifactId', $rai); $ids = array(); $cv = new MockTracker_Artifact_ChangesetValue_ArtifactLink(); $cv->setReturnReference('getArtifactIds', $ids); $c = new MockTracker_Artifact_Changeset(); $c->setReturnReference('getValue', $cv); $a = new MockTracker_Artifact(); $a->setReturnReference('getLastChangeset', $c); $this->assertTrue($f->isValid($a, array('new_values' => '123'))); $this->assertFalse($f->isValid($a, array('new_values' => '666'))); $this->assertFalse($f->isValid($a, array('new_values' => '123, 666'))); $this->assertFalse($f->isValid($a, array('new_values' => '123,666'))); $this->assertTrue($f->isValid($a, array('new_values' => '123 , 321, 999'))); $this->assertFalse($f->isValidRegardingRequiredProperty($a, array('new_values' => ''))); $this->assertFalse($f->isValid($a, array('new_values' => '123, toto'))); $this->assertFalse($f->isValidRegardingRequiredProperty($a, null)); }
function testTransitionIsInvalidOnSubmit() { $artifact = new MockTracker_Artifact(); $changeset = new MockTracker_Artifact_Changeset_Null(); $bind = new MockTracker_FormElement_Field_List_Bind_Static(); $workflow = new MockWorkflow(); $tracker = new MockTracker(); $user = mock('PFUser'); $v1 = new MockTracker_FormElement_Field_List_BindValue(); $v1->setReturnValue('__toString', '# 123'); $v1->setReturnValue('getLabel', 'label1'); $submitted_value_1 = '123'; // $v1 $v2 = new MockTracker_FormElement_Field_List_BindValue(); $v2->setReturnValue('__toString', '# 456'); $v2->setReturnValue('getLabel', 'label2'); $submitted_value_2 = '456'; // $v2 stub($bind)->getAllValues()->returns(array($submitted_value_1 => null, $submitted_value_2 => null)); $artifact->setReturnReference('getLastChangeset', $changeset); $bind->setReturnReference('getValue', $v2, array($submitted_value_2)); // null -> v1 // v1 -> v2 // other are invalid $workflow->setReturnValue('isTransitionExist', true, array(null, $v1)); $workflow->setReturnValue('isTransitionExist', true, array($v1, $v2)); $workflow->setReturnValue('isTransitionExist', false); $field_list = new $this->field_class(); $field_list->setReturnReference('getBind', $bind); $field_list->setReturnValue('fieldHasEnableWorkflow', true); $field_list->setReturnReference('getWorkflow', $workflow); $field_list->setReturnReference('getTracker', $tracker); $field_list->setReturnValue('permission_is_authorized', true); $field_list->setReturnValue('getCurrentUser', $user); $field_list->setReturnValue('getTransitionId', 1); $field_list->setReturnValue('isNone', false); $field_list->setReturnValue('isRequired', false); $changeset->setReturnReference('getValue', $changeset_value_list, array($field_list)); // We try to change the field from null to v2 => invalid $this->assertFalse($field_list->isValid($artifact, $submitted_value_2)); }
function testNotify() { $defs = array(array('has_changed' => 1, 'isNotificationsSupported' => 1, 'hasNotifications' => 0, 'recipients' => array()), array('has_changed' => 0, 'isNotificationsSupported' => 1, 'hasNotifications' => 1, 'recipients' => array('a_user')), array('has_changed' => 0, 'isNotificationsSupported' => 1, 'hasNotifications' => 0, 'recipients' => array('should_not_appear')), array('has_changed' => 0, 'isNotificationsSupported' => 0, 'hasNotifications' => 1, 'recipients' => array('should_not_appear_(not_supported)')), array('has_changed' => 0, 'isNotificationsSupported' => 1, 'hasNotifications' => 1, 'recipients' => array('multiple_users', '*****@*****.**'))); $fact = new MockTracker_FormElementFactory(); $dar = new MockDataAccessResult(); $dao = new MockTracker_Artifact_Changeset_ValueDao(); $artifact = new MockTracker_Artifact(); $tracker = new MockTracker(); $um = new MockUserManager(); $i = 0; // try DRY in unit tests also... build mocks automatically foreach ($defs as $d) { $id = $i + 1; $changeset_value_id = 1000 + $id; $dar->setReturnValueAt($i++, 'current', array('changeset_id' => 66, 'field_id' => $id, 'id' => $changeset_value_id, 'has_changed' => $d['has_changed'])); $f = new MockTracker_FormElement_Field_Selectbox(); $fact->setReturnReference('getFieldById', $f, array($id)); $f->setReturnValue('getId', $id); $f->setReturnValue('getLabel', 'field_' . $id); $f->setReturnValue('isNotificationsSupported', $d['isNotificationsSupported']); $f->setReturnValue('hasNotifications', $d['hasNotifications']); $f->setReturnValue('getRecipients', $d['recipients']); $p = new MockTracker_Artifact_ChangesetValue_List(); $c = new MockTracker_Artifact_ChangesetValue_List(); $c->setReturnValue('hasChanged', $d['has_changed']); $c->setReturnValue('diff', 'has changed', array($p)); $f->setReturnReference('getChangesetValue', $c, array('*', $changeset_value_id, $d['has_changed'])); unset($f); } $dar->setReturnValue('valid', true); $dar->setReturnValueAt($i, 'valid', false); $dao->setReturnReference('searchById', $dar); $artifact->setReturnReference('getTracker', $tracker); $artifact->setReturnValue('getCommentators', array('comment1', 'comment2')); $artifact->setReturnValue('getId', 666); $tracker->setReturnValue('getItemName', 'story'); $tracker->setReturnValue('isNotificationStopped', false); $tracker->setReturnValue('getRecipients', array(array('recipients' => array('global1', 'global2'), 'on_updates' => false, 'check_permissions' => true), array('recipients' => array('dont_check_perms', 'global3', '*****@*****.**'), 'on_updates' => true, 'check_permissions' => false))); $current_changeset = new Tracker_Artifact_ChangesetTestVersion(); $current_changeset->setReturnValue('getId', 66); $current_changeset->setReturnReference('getValueDao', $dao); $current_changeset->setReturnReference('getFormElementFactory', $fact); $current_changeset->setReturnReference('getArtifact', $artifact); $current_changeset->setReturnReference('getUserManager', $um); $current_changeset->setReturnReference('getTracker', $tracker); $expected_body = <<<BODY story #666 <http://{$GLOBALS['sys_default_domain']}/tracker/?aid=666> BODY; $current_changeset->expect('sendNotification', array(array('a_user', 'multiple_users', '*****@*****.**', 'dont_check_perms', 'global3', 'comment1', 'comment2'), array(), '[story #666]', $expected_body)); $current_changeset->notify(); }