function testCreateNewChangesetWithoutNotification() { $email = null; //not anonymous user $comment = ''; $this->response->expectCallCount('addFeedback', 0); $comment_dao = new MockTracker_Artifact_Changeset_CommentDao(); stub($comment_dao)->createNewVersion()->returns(true); $comment_dao->expectCallCount('createNewVersion', 1); $dao = new MockTracker_Artifact_ChangesetDao(); $dao->setReturnValueAt(0, 'create', 1001, array(66, 1234, null, $_SERVER['REQUEST_TIME'])); $dao->setReturnValueAt(1, 'create', 1002, array(66, 1234, null, $_SERVER['REQUEST_TIME'])); $dao->expectCallCount('create', 1); $user = mock('PFUser'); $user->setReturnValue('getId', 1234); $user->setReturnValue('isAnonymous', false); $tracker = new MockTracker(); $tracker->setReturnValue('getGroupId', 666); $tracker->setReturnValue('getItemName', 'foobar'); $tracker->setReturnValue('getFormElements', array()); $factory = new MockTracker_FormElementFactory(); $field1 = new MockTracker_FormElement_Field(); $field1->setReturnValue('getId', 101); $field1->setReturnValue('isValid', true); $field1->setReturnValue('isValidRegardingRequiredProperty', true); $field1->setReturnValue('userCanUpdate', true); $field1->setReturnValue('saveNewChangeset', true); $field1->expectOnce('saveNewChangeset'); $field2 = new MockTracker_FormElement_Field(); $field2->setReturnValue('getId', 102); $field2->setReturnValue('isValid', true, array('*', '123')); $field2->setReturnValue('isValid', false, array('*', '456')); $field2->setReturnValue('isValidRegardingRequiredProperty', true); $field2->setReturnValue('userCanUpdate', true); $field2->setReturnValue('saveNewChangeset', true); $field2->expectOnce('saveNewChangeset'); $field3 = new MockTracker_FormElement_Field(); $field3->setReturnValue('getId', 103); $field3->setReturnValue('isValid', true); $field3->setReturnValue('isValidRegardingRequiredProperty', true); $field3->setReturnValue('saveNewChangeset', true); $field3->expectOnce('saveNewChangeset'); $field3->setReturnValue('userCanUpdate', true); $factory->setReturnValue('getUsedFields', array($field1, $field2, $field3)); $factory->setReturnValue('getAllFormElementsForTracker', array()); $new_changeset = new MockTracker_Artifact_Changeset(); $new_changeset->expectNever('notify', array()); $changeset = new MockTracker_Artifact_Changeset(); $changeset->setReturnValue('hasChanges', true); $changeset_value1 = new MockTracker_Artifact_ChangesetValue(); $changeset_value2 = new MockTracker_Artifact_ChangesetValue(); $changeset_value3 = new MockTracker_Artifact_ChangesetValue(); $changeset->setReturnReference('getValue', $changeset_value1, array($field1)); $changeset->setReturnReference('getValue', $changeset_value2, array($field2)); $changeset->setReturnReference('getValue', $changeset_value3, array($field3)); $changeset->setReturnValue('getValues', array()); $reference_manager = new MockReferenceManager(); $reference_manager->expect('extractCrossRef', array($comment, 66, 'plugin_tracker_artifact', 666, $user->getId(), 'foobar')); $art_factory = new MockTracker_ArtifactFactory(); $artifact = new Tracker_ArtifactTestVersion(); $artifact->setReturnReference('getChangesetDao', $dao); $artifact->setReturnReference('getChangesetCommentDao', $comment_dao); $artifact->setReturnReference('getFormElementFactory', $factory); $artifact->setReturnReference('getTracker', $tracker); $artifact->setReturnValue('getId', 66); $artifact->setReturnReference('getLastChangeset', $changeset); $artifact->setReturnReference('getChangeset', $new_changeset); $artifact->setReturnReference('getReferenceManager', $reference_manager); $artifact->setReturnReference('getArtifactFactory', $art_factory); stub($art_factory)->save()->returns(true); $art_factory->expectOnce('save'); $workflow = new MockWorkflow(); $workflow->expectCallCount('before', 2); $workflow->setReturnValue('validate', true); $artifact->setReturnValue('getWorkflow', $workflow); // Valid $fields_data = array(102 => '123'); $artifact->createNewChangeset($fields_data, $comment, $user, false); // Not valid $fields_data = array(102 => '456'); $this->expectException('Tracker_Exception'); $artifact->createNewChangeset($fields_data, $comment, $user); }
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 testDiffToPrevious() { $field1 = new MockTracker_FormElement_Field_Date(); $value1_previous = new MockTracker_Artifact_ChangesetValue_Date(); $value1_current = new MockTracker_Artifact_ChangesetValue_Date(); $field2 = new MockTracker_FormElement_Field_Date(); $value2_previous = new MockTracker_Artifact_ChangesetValue_Date(); $value2_current = new MockTracker_Artifact_ChangesetValue_Date(); $dao = new MockTracker_Artifact_Changeset_ValueDao(); $dar = new MockDataAccessResult(); $fact = new MockTracker_FormElementFactory(); $value = new MockTracker_Artifact_ChangesetValue_Date(); $artifact = new MockTracker_Artifact(); $previous_changeset = new MockTracker_Artifact_Changeset(); $um = new MockUserManager(); $current_changeset = new Tracker_Artifact_ChangesetTestVersion(); $previous_changeset->setReturnValue('getId', 65); $previous_changeset->setReturnReference('getValue', $value1_previous, array($field1)); $previous_changeset->setReturnReference('getValue', $value2_previous, array($field2)); $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->setReturnValueAt(1, 'current', array('changeset_id' => 66, 'field_id' => 2, 'id' => 21, 'has_changed' => 0)); $dar->setReturnValue('valid', true); $dar->setReturnValueAt(2, 'valid', false); $dao->setReturnReference('searchById', $dar); $fact->setReturnReference('getFieldById', $field1, array(1)); $fact->setReturnReference('getFieldById', $field2, array(2)); $field1->setReturnValue('getId', 1); $field1->setReturnValue('getLabel', 'field1'); $field1->setReturnValue('userCanRead', true); $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, '*')); $field2->setReturnValue('getId', 2); $field2->setReturnValue('getLabel', 'field2'); $field2->setReturnValue('userCanRead', true); $field2->setReturnReference('getChangesetValue', $value2_current, array('*', 21, 0)); $value2_previous->expectNever('hasChanged'); $value2_current->setReturnValue('hasChanged', false); $value2_current->expectNever('diff'); $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); $this->assertPattern('/field1/', $current_changeset->diffToprevious()); $this->assertNoPattern('/field2/', $current_changeset->diffToprevious()); }
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 testDontCreateNewChangesetIfNoCommentOrNoChanges() { $this->language->setReturnValue('getText', 'no changes', array('plugin_tracker_artifact', 'no_changes', '*')); $this->response->expectOnce('addFeedback', array('info', 'no changes', CODENDI_PURIFIER_LIGHT)); $comment_dao = new MockTracker_Artifact_Changeset_CommentDao(); $comment_dao->expectNever('createNewVersion'); $dao = new MockTracker_Artifact_ChangesetDao(); $dao->expectNever('create'); $user = new MockUser(); $user->setReturnValue('getId', 1234); $user->setReturnValue('isAnonymous', false); $tracker = new MockTracker(); $factory = new MockTracker_FormElementFactory(); $rules_manager = new MockTracker_RulesManager(); $rules_manager->setReturnValue('validate', true); $tracker->setReturnReference('getRulesManager', $rules_manager); $field1 = new MockTracker_FormElement_Field(); $field1->setReturnValue('getId', 101); $field1->setReturnValue('isValid', true); $field1->setReturnValue('userCanUpdate', true); $field1->expectNever('saveNewChangeset'); $field2 = new MockTracker_FormElement_Field(); $field2->setReturnValue('getId', 102); $field2->setReturnValue('isValid', true); $field2->setReturnValue('userCanUpdate', true); $field2->expectNever('saveNewChangeset'); $field3 = new MockTracker_FormElement_Field(); $field3->setReturnValue('getId', 103); $field3->setReturnValue('isValid', true); $field3->setReturnValue('userCanUpdate', true); $field3->expectNever('saveNewChangeset'); $factory->setReturnValue('getUsedFields', array($field1, $field2, $field3)); $changeset = new MockTracker_Artifact_Changeset(); $changeset->setReturnValue('hasChanges', false); $changeset_value1 = new MockTracker_Artifact_ChangesetValue(); $changeset_value2 = new MockTracker_Artifact_ChangesetValue(); $changeset_value3 = new MockTracker_Artifact_ChangesetValue(); $changeset->setReturnReference('getValue', $changeset_value1, array($field1)); $changeset->setReturnReference('getValue', $changeset_value2, array($field2)); $changeset->setReturnReference('getValue', $changeset_value3, array($field3)); $artifact = new Tracker_ArtifactTestVersion(); $artifact->setReturnReference('getChangesetDao', $dao); $artifact->setReturnReference('getChangesetCommentDao', $comment_dao); $artifact->setReturnReference('getFormElementFactory', $factory); $artifact->setReturnReference('getTracker', $tracker); $artifact->setReturnValue('getId', 66); $artifact->setReturnReference('getLastChangeset', $changeset); $workflow = new MockWorkflow(); $workflow->expectNever('before'); $artifact->setReturnValue('getWorkflow', $workflow); $email = null; //not annonymous user $comment = ''; //empty comment // Valid $fields_data = array(); $artifact->createNewChangeset($fields_data, $comment, $user, $email); }