Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-04-02 21:54:27 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-04-02 21:54:27 +0400
commit3faa14e7a748097528ed36cf02ccacd62cd8f044 (patch)
tree01a65cd9f50d8378651a9ecb31be7463ac1dba96 /spec
parenta23d0ef98ed1ca2e6d5141dfbfaabf707f152f62 (diff)
parent49f977d675b44b6aae0f491fbbf86dd1ee05eb64 (diff)
Merge branch 'reduce-observers' into 'master'
Move issue create/update code to services Reduce observers role in GitLab code
Diffstat (limited to 'spec')
-rw-r--r--spec/observers/issue_observer_spec.rb99
-rw-r--r--spec/services/git_push_service_spec.rb8
-rw-r--r--spec/services/issues/close_service_spec.rb35
-rw-r--r--spec/services/issues/create_service_spec.rb23
-rw-r--r--spec/services/issues/update_service_spec.rb44
5 files changed, 103 insertions, 106 deletions
diff --git a/spec/observers/issue_observer_spec.rb b/spec/observers/issue_observer_spec.rb
deleted file mode 100644
index 9a0a2c4329c..00000000000
--- a/spec/observers/issue_observer_spec.rb
+++ /dev/null
@@ -1,99 +0,0 @@
-require 'spec_helper'
-
-describe IssueObserver do
- let(:some_user) { create :user }
- let(:assignee) { create :user }
- let(:author) { create :user }
- let(:mock_issue) { create(:issue, assignee: assignee, author: author) }
-
-
- before { subject.stub(:current_user).and_return(some_user) }
- before { subject.stub(:current_commit).and_return(nil) }
- before { subject.stub(notification: double('NotificationService').as_null_object) }
- before { mock_issue.project.stub_chain(:repository, :commit).and_return(nil) }
-
- subject { IssueObserver.instance }
-
- describe '#after_create' do
- it 'trigger notification to send emails' do
- subject.should_receive(:notification)
-
- subject.after_create(mock_issue)
- end
-
- it 'should create cross-reference notes' do
- other_issue = create(:issue)
- mock_issue.stub(references: [other_issue])
-
- Note.should_receive(:create_cross_reference_note).with(other_issue, mock_issue,
- some_user, mock_issue.project)
- subject.after_create(mock_issue)
- end
- end
-
- context '#after_close' do
- context 'a status "closed"' do
- before { mock_issue.stub(state: 'closed') }
-
- it 'note is created if the issue is being closed' do
- Note.should_receive(:create_status_change_note).with(mock_issue, mock_issue.project, some_user, 'closed', nil)
-
- subject.after_close(mock_issue, nil)
- end
-
- it 'trigger notification to send emails' do
- subject.notification.should_receive(:close_issue).with(mock_issue, some_user)
- subject.after_close(mock_issue, nil)
- end
-
- it 'appends a mention to the closing commit if one is present' do
- commit = double('commit', gfm_reference: 'commit 123456')
- subject.stub(current_commit: commit)
-
- Note.should_receive(:create_status_change_note).with(mock_issue, mock_issue.project, some_user, 'closed', commit)
-
- subject.after_close(mock_issue, nil)
- end
- end
-
- context 'a status "reopened"' do
- before { mock_issue.stub(state: 'reopened') }
-
- it 'note is created if the issue is being reopened' do
- Note.should_receive(:create_status_change_note).with(mock_issue, mock_issue.project, some_user, 'reopened', nil)
-
- subject.after_reopen(mock_issue, nil)
- end
- end
- end
-
- context '#after_update' do
- before(:each) do
- mock_issue.stub(:is_being_reassigned?).and_return(false)
- end
-
- context 'notification' do
- it 'triggered if the issue is being reassigned' do
- mock_issue.should_receive(:is_being_reassigned?).and_return(true)
- subject.should_receive(:notification)
-
- subject.after_update(mock_issue)
- end
-
- it 'is not triggered if the issue is not being reassigned' do
- mock_issue.should_receive(:is_being_reassigned?).and_return(false)
- subject.should_not_receive(:notification)
-
- subject.after_update(mock_issue)
- end
- end
-
- context 'cross-references' do
- it 'notices added references' do
- mock_issue.should_receive(:notice_added_references)
-
- subject.after_update(mock_issue)
- end
- end
- end
-end
diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb
index 90738c681fa..6b89f213bec 100644
--- a/spec/services/git_push_service_spec.rb
+++ b/spec/services/git_push_service_spec.rb
@@ -170,16 +170,10 @@ describe GitPushService do
Issue.find(issue.id).should be_closed
end
- it "passes the closing commit as a thread-local" do
- service.execute(project, user, @oldrev, @newrev, @ref)
-
- Thread.current[:current_commit].should == closing_commit
- end
-
it "doesn't create cross-reference notes for a closing reference" do
expect {
service.execute(project, user, @oldrev, @newrev, @ref)
- }.not_to change { Note.where(project_id: project.id, system: true).count }
+ }.not_to change { Note.where(project_id: project.id, system: true, commit_id: closing_commit.id).count }
end
it "doesn't close issues when pushed to non-default branches" do
diff --git a/spec/services/issues/close_service_spec.rb b/spec/services/issues/close_service_spec.rb
new file mode 100644
index 00000000000..d4f2cc1339b
--- /dev/null
+++ b/spec/services/issues/close_service_spec.rb
@@ -0,0 +1,35 @@
+require 'spec_helper'
+
+describe Issues::CloseService do
+ let(:project) { create(:empty_project) }
+ let(:user) { create(:user) }
+ let(:user2) { create(:user) }
+ let(:issue) { create(:issue, assignee: user2) }
+
+ before do
+ project.team << [user, :master]
+ project.team << [user2, :developer]
+ end
+
+ describe :execute do
+ context "valid params" do
+ before do
+ @issue = Issues::CloseService.new(project, user, {}).execute(issue)
+ end
+
+ it { @issue.should be_valid }
+ it { @issue.should be_closed }
+
+ it 'should send email to user2 about assign of new issue' do
+ email = ActionMailer::Base.deliveries.last
+ email.to.first.should == user2.email
+ email.subject.should include(issue.title)
+ end
+
+ it 'should create system note about issue reassign' do
+ note = @issue.notes.last
+ note.note.should include "Status changed to closed"
+ end
+ end
+ end
+end
diff --git a/spec/services/issues/create_service_spec.rb b/spec/services/issues/create_service_spec.rb
new file mode 100644
index 00000000000..90720be5ded
--- /dev/null
+++ b/spec/services/issues/create_service_spec.rb
@@ -0,0 +1,23 @@
+require 'spec_helper'
+
+describe Issues::CreateService do
+ let(:project) { create(:empty_project) }
+ let(:user) { create(:user) }
+
+ describe :execute do
+ context "valid params" do
+ before do
+ project.team << [user, :master]
+ opts = {
+ title: 'Awesome issue',
+ description: 'please fix'
+ }
+
+ @issue = Issues::CreateService.new(project, user, opts).execute
+ end
+
+ it { @issue.should be_valid }
+ it { @issue.title.should == 'Awesome issue' }
+ end
+ end
+end
diff --git a/spec/services/issues/update_service_spec.rb b/spec/services/issues/update_service_spec.rb
new file mode 100644
index 00000000000..347560414e7
--- /dev/null
+++ b/spec/services/issues/update_service_spec.rb
@@ -0,0 +1,44 @@
+require 'spec_helper'
+
+describe Issues::UpdateService do
+ let(:project) { create(:empty_project) }
+ let(:user) { create(:user) }
+ let(:user2) { create(:user) }
+ let(:issue) { create(:issue) }
+
+ before do
+ project.team << [user, :master]
+ project.team << [user2, :developer]
+ end
+
+ describe :execute do
+ context "valid params" do
+ before do
+ opts = {
+ title: 'New title',
+ description: 'Also please fix',
+ assignee_id: user2.id,
+ state_event: 'close'
+ }
+
+ @issue = Issues::UpdateService.new(project, user, opts).execute(issue)
+ end
+
+ it { @issue.should be_valid }
+ it { @issue.title.should == 'New title' }
+ it { @issue.assignee.should == user2 }
+ it { @issue.should be_closed }
+
+ it 'should send email to user2 about assign of new issue' do
+ email = ActionMailer::Base.deliveries.last
+ email.to.first.should == user2.email
+ email.subject.should include(issue.title)
+ end
+
+ it 'should create system note about issue reassign' do
+ note = @issue.notes.last
+ note.note.should include "Reassigned to \@#{user2.username}"
+ end
+ end
+ end
+end