16ceae895e
* Move is_assigned? and is_being_xx? methods to IssueCommonality This is behavior merge requests have in common with issues. Moved methods to IssueCommonality role. Put specs directly into merge_request_spec because setup differs for issues and MRs specifically in the "closed" factory to use. * Add MergeRequestObserver. Parallels IssueObserver in almost every way. Ripe for refactoring. * Rename MailerObserver to NoteObserver With merge request observing moved out of MailerObserver, all that was left was Note logic. Renamed to NoteObserver, added tests and updated application config for new observer names. Refactored NoteObserver to use the note's author and not rely on current_user. * Set current_user for MergeRequestObserver IssueObserver and MergeRequestObserver are the only observers that need a reference to the current_user that they cannot look up on the objects they are observing.
96 lines
3 KiB
Ruby
96 lines
3 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: merge_requests
|
|
#
|
|
# id :integer not null, primary key
|
|
# target_branch :string(255) not null
|
|
# source_branch :string(255) not null
|
|
# project_id :integer not null
|
|
# author_id :integer
|
|
# assignee_id :integer
|
|
# title :string(255)
|
|
# closed :boolean default(FALSE), not null
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
# st_commits :text(4294967295
|
|
# st_diffs :text(4294967295
|
|
# merged :boolean default(FALSE), not null
|
|
# state :integer default(1), not null
|
|
#
|
|
|
|
require 'spec_helper'
|
|
|
|
describe MergeRequest do
|
|
describe "Validation" do
|
|
it { should validate_presence_of(:target_branch) }
|
|
it { should validate_presence_of(:source_branch) }
|
|
end
|
|
|
|
describe "Mass assignment" do
|
|
it { should_not allow_mass_assignment_of(:author_id) }
|
|
it { should_not allow_mass_assignment_of(:project_id) }
|
|
end
|
|
|
|
describe 'modules' do
|
|
it { should include_module(IssueCommonality) }
|
|
it { should include_module(Votes) }
|
|
end
|
|
|
|
describe "#mr_and_commit_notes" do
|
|
let!(:merge_request) { Factory.create(:merge_request) }
|
|
|
|
before do
|
|
merge_request.stub(:commits) { [merge_request.project.commit] }
|
|
Factory.create(:note, noteable: merge_request.commits.first)
|
|
Factory.create(:note, noteable: merge_request)
|
|
end
|
|
|
|
it "should include notes for commits" do
|
|
merge_request.commits.should_not be_empty
|
|
merge_request.mr_and_commit_notes.count.should == 2
|
|
end
|
|
end
|
|
|
|
subject { Factory.create(:merge_request) }
|
|
|
|
describe '#is_being_reassigned?' do
|
|
it 'returns true if the merge_request assignee has changed' do
|
|
subject.assignee = Factory(:user)
|
|
subject.is_being_reassigned?.should be_true
|
|
end
|
|
it 'returns false if the merge request assignee has not changed' do
|
|
subject.is_being_reassigned?.should be_false
|
|
end
|
|
end
|
|
|
|
describe '#is_being_closed?' do
|
|
it 'returns true if the closed attribute has changed and is now true' do
|
|
subject.closed = true
|
|
subject.is_being_closed?.should be_true
|
|
end
|
|
it 'returns false if the closed attribute has changed and is now false' do
|
|
merge_request = Factory.create(:closed_merge_request)
|
|
merge_request.closed = false
|
|
merge_request.is_being_closed?.should be_false
|
|
end
|
|
it 'returns false if the closed attribute has not changed' do
|
|
subject.is_being_closed?.should be_false
|
|
end
|
|
end
|
|
|
|
|
|
describe '#is_being_reopened?' do
|
|
it 'returns true if the closed attribute has changed and is now false' do
|
|
merge_request = Factory.create(:closed_merge_request)
|
|
merge_request.closed = false
|
|
merge_request.is_being_reopened?.should be_true
|
|
end
|
|
it 'returns false if the closed attribute has changed and is now true' do
|
|
subject.closed = true
|
|
subject.is_being_reopened?.should be_false
|
|
end
|
|
it 'returns false if the closed attribute has not changed' do
|
|
subject.is_being_reopened?.should be_false
|
|
end
|
|
end
|
|
end
|