summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorZeger-Jan van de Weg <zegerjan@gitlab.com>2016-04-25 20:10:20 +0200
committerZeger-Jan van de Weg <zegerjan@gitlab.com>2016-05-10 12:03:13 +0200
commitdccf8a9fc8d4dde91942944f6b47387bfb13c380 (patch)
tree7574eea0adcc0cd46bf3d685fccec0d08c37b252 /spec
parent4eb16290e4e95c0a9bcf3d01ecc8060d91eec021 (diff)
downloadgitlab-ce-dccf8a9fc8d4dde91942944f6b47387bfb13c380.tar.gz
Add tests on Awardables and Award Emoji
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/projects/issues_controller_spec.rb14
-rw-r--r--spec/factories/award_emoji.rb11
-rw-r--r--spec/features/issues_spec.rb2
-rw-r--r--spec/features/notes_on_merge_requests_spec.rb4
-rw-r--r--spec/models/concerns/awardable_spec.rb49
-rw-r--r--spec/models/concerns/issuable_spec.rb4
-rw-r--r--spec/models/user_spec.rb1
-rw-r--r--spec/services/notes/create_service_spec.rb20
-rw-r--r--spec/services/todo_service_spec.rb17
-rw-r--r--spec/services/toggle_award_emoji_service_spec.rb39
10 files changed, 138 insertions, 23 deletions
diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb
index d6e4cd71ce6..f7cb7ca8a40 100644
--- a/spec/controllers/projects/issues_controller_spec.rb
+++ b/spec/controllers/projects/issues_controller_spec.rb
@@ -211,4 +211,18 @@ describe Projects::IssuesController do
end
end
end
+
+ describe 'POST #toggle_award_emoji' do
+ before do
+ sign_in(user)
+ project.team << [user, :developer]
+ end
+
+ it "yields status code 200" do
+ post(:toggle_award_emoji, namespace_id: project.namespace.path,
+ project_id: project.path, id: issue.iid, name: "thumbsup")
+
+ expect(response.status).to eq(200)
+ end
+ end
end
diff --git a/spec/factories/award_emoji.rb b/spec/factories/award_emoji.rb
index a1173834b29..b09f8b0bc74 100644
--- a/spec/factories/award_emoji.rb
+++ b/spec/factories/award_emoji.rb
@@ -3,5 +3,16 @@ FactoryGirl.define do
name "thumbsup"
user
awardable factory: :issue
+
+ trait :thumbs_up
+ trait :upvote
+
+ trait :thumbs_down do
+ name "thumbsdown"
+ end
+
+ trait :downvote do
+ name "thumbsdown"
+ end
end
end
diff --git a/spec/features/issues_spec.rb b/spec/features/issues_spec.rb
index 1ce0024e93c..7da87c2d174 100644
--- a/spec/features/issues_spec.rb
+++ b/spec/features/issues_spec.rb
@@ -67,7 +67,7 @@ describe 'Issues', feature: true do
describe 'Issue info' do
it 'excludes award_emoji from comment count' do
issue = create(:issue, author: @user, assignee: @user, project: project, title: 'foobar')
- create(:upvote_note, noteable: issue)
+ create(:award_emoji, awardable: issue)
visit namespace_project_issues_path(project.namespace, project, assignee_id: @user.id)
diff --git a/spec/features/notes_on_merge_requests_spec.rb b/spec/features/notes_on_merge_requests_spec.rb
index 389812ff7e1..9e2bdd7f5bb 100644
--- a/spec/features/notes_on_merge_requests_spec.rb
+++ b/spec/features/notes_on_merge_requests_spec.rb
@@ -8,7 +8,7 @@ describe 'Comments', feature: true do
it 'excludes award_emoji from comment count' do
merge_request = create(:merge_request)
project = merge_request.source_project
- create(:upvote_note, noteable: merge_request, project: project)
+ create(:award_emoji, awardable: merge_request, project: project)
login_as :admin
visit namespace_project_merge_requests_path(project.namespace, project)
@@ -146,7 +146,7 @@ describe 'Comments', feature: true do
describe 'comment info' do
it 'excludes award_emoji from comment count' do
- create(:upvote_note, noteable: merge_request, project: project)
+ create(:award_emoji, awardable: merge_request, project: project)
visit namespace_project_merge_request_path(project.namespace, project, merge_request)
diff --git a/spec/models/concerns/awardable_spec.rb b/spec/models/concerns/awardable_spec.rb
new file mode 100644
index 00000000000..6851d068367
--- /dev/null
+++ b/spec/models/concerns/awardable_spec.rb
@@ -0,0 +1,49 @@
+require 'spec_helper'
+
+describe Issue, "Awardable" do
+ let!(:issue) { create(:issue) }
+ let!(:award_emoji) { create(:award_emoji, :downvote, awardable: issue) }
+
+ describe "Associations" do
+ it { is_expected.to have_many(:award_emoji).dependent(:destroy) }
+ end
+
+ describe "ClassMethods" do
+ let!(:issue2) { create(:issue) }
+
+ before do
+ create(:award_emoji, awardable: issue2)
+ end
+
+ it "orders on upvotes" do
+ expect(Issue.order_upvotes_desc.to_a).to eq [issue2, issue]
+ end
+
+ it "orders on downvotes" do
+ expect(Issue.order_downvotes_desc.to_a).to eq [issue, issue2]
+ end
+ end
+
+ describe "#upvotes" do
+ it "counts the number of upvotes" do
+ expect(issue.upvotes).to be 0
+ end
+ end
+
+ describe "#downvotes" do
+ it "counts the number of downvotes" do
+ expect(issue.downvotes).to be 1
+ end
+ end
+
+ describe "#toggle_award_emoji" do
+ it "adds an emoji if it isn't awarded yet" do
+ expect { issue.toggle_award_emoji("thumbsup", award_emoji.user) }.to change { AwardEmoji.count }.by 1
+ end
+
+ it "toggles already awarded emoji" do
+
+ expect { issue.toggle_award_emoji("thumbsdown", award_emoji.user) }.to change { AwardEmoji.count }.by -1
+ end
+ end
+end
diff --git a/spec/models/concerns/issuable_spec.rb b/spec/models/concerns/issuable_spec.rb
index d5435916ea1..86ad9de883f 100644
--- a/spec/models/concerns/issuable_spec.rb
+++ b/spec/models/concerns/issuable_spec.rb
@@ -12,6 +12,10 @@ describe Issue, "Issuable" do
it { is_expected.to have_many(:todos).dependent(:destroy) }
end
+ describe 'Included modules' do
+ it { is_expected.to include_module(Awardable) }
+ end
+
describe "Validation" do
before do
allow(subject).to receive(:set_iid).and_return(false)
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 8b2fb77e28e..de1a233dfff 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -93,6 +93,7 @@ describe User, models: true do
it { is_expected.to have_one(:abuse_report) }
it { is_expected.to have_many(:spam_logs).dependent(:destroy) }
it { is_expected.to have_many(:todos).dependent(:destroy) }
+ it { is_expected.to have_many(:award_emoji).dependent(:destroy) }
end
describe 'validations' do
diff --git a/spec/services/notes/create_service_spec.rb b/spec/services/notes/create_service_spec.rb
index ff23f13e1cb..93e8a7094e2 100644
--- a/spec/services/notes/create_service_spec.rb
+++ b/spec/services/notes/create_service_spec.rb
@@ -14,7 +14,7 @@ describe Notes::CreateService, services: true do
noteable_type: 'Issue',
noteable_id: issue.id
}
-
+
@note = Notes::CreateService.new(project, user, opts).execute
end
@@ -28,18 +28,16 @@ describe Notes::CreateService, services: true do
project.team << [user, :master]
end
- it "creates emoji note" do
+ it "creates an award emoji" do
opts = {
note: ':smile: ',
noteable_type: 'Issue',
noteable_id: issue.id
}
+ note = Notes::CreateService.new(project, user, opts).execute
- @note = Notes::CreateService.new(project, user, opts).execute
-
- expect(@note).to be_valid
- expect(@note.note).to eq('smile')
- expect(@note.is_award).to be_truthy
+ expect(note).to be_valid
+ expect(note.name).to eq('smile')
end
it "creates regular note if emoji name is invalid" do
@@ -48,12 +46,10 @@ describe Notes::CreateService, services: true do
noteable_type: 'Issue',
noteable_id: issue.id
}
+ note = Notes::CreateService.new(project, user, opts).execute
- @note = Notes::CreateService.new(project, user, opts).execute
-
- expect(@note).to be_valid
- expect(@note.note).to eq(opts[:note])
- expect(@note.is_award).to be_falsy
+ expect(note).to be_valid
+ expect(note.note).to eq(opts[:note])
end
end
end
diff --git a/spec/services/todo_service_spec.rb b/spec/services/todo_service_spec.rb
index 82b7fbfa816..455b19c89cc 100644
--- a/spec/services/todo_service_spec.rb
+++ b/spec/services/todo_service_spec.rb
@@ -137,7 +137,6 @@ describe TodoService, services: true do
let(:note_on_commit) { create(:note_on_commit, project: project, author: john_doe, note: mentions) }
let(:note_on_confidential_issue) { create(:note_on_issue, noteable: confidential_issue, project: project, note: mentions) }
let(:note_on_project_snippet) { create(:note_on_project_snippet, project: project, author: john_doe, note: mentions) }
- let(:award_note) { create(:note, :award, project: project, noteable: issue, author: john_doe, note: 'thumbsup') }
let(:system_note) { create(:system_note, project: project, noteable: issue) }
it 'mark related pending todos to the noteable for the note author as done' do
@@ -150,13 +149,6 @@ describe TodoService, services: true do
expect(second_todo.reload).to be_done
end
- it 'mark related pending todos to the noteable for the award note author as done' do
- service.new_note(award_note, john_doe)
-
- expect(first_todo.reload).to be_done
- expect(second_todo.reload).to be_done
- end
-
it 'does not mark related pending todos it is a system note' do
service.new_note(system_note, john_doe)
@@ -286,6 +278,15 @@ describe TodoService, services: true do
expect(second_todo.reload).to be_done
end
end
+
+ describe '#new_award_emoji' do
+ it 'marks related pending todos to the target for the user as done' do
+ todo = create(:todo, user: john_doe, project: project, target: mr_assigned, author: author)
+ service.new_award_emoji(mr_assigned, john_doe)
+
+ expect(todo.reload).to be_done
+ end
+ end
end
def should_create_todo(attributes = {})
diff --git a/spec/services/toggle_award_emoji_service_spec.rb b/spec/services/toggle_award_emoji_service_spec.rb
new file mode 100644
index 00000000000..3d2f497fdec
--- /dev/null
+++ b/spec/services/toggle_award_emoji_service_spec.rb
@@ -0,0 +1,39 @@
+require 'spec_helper'
+
+describe ToggleAwardEmoji, services: true do
+ let(:project) { create(:project) }
+ let(:user) { create(:user) }
+ let(:issue) { create(:issue, project: project) }
+
+ before do
+ project.team << [user, :master]
+ end
+
+ describe '#execute' do
+ it 'removes related todos' do
+ expect_any_instance_of(TodoService).to receive(:new_award_emoji).with(issue, user)
+
+ ToggleAwardEmojiService.new(project, user).execute(issue, "thumbsdown")
+ end
+
+ it 'normalizes the emoji name' do
+ expect(issue).to receive(:toggle_award_emoji).with("thumbsup", user)
+
+ ToggleAwardEmojiService.new(project, user).execute(issue, ":+1:")
+ end
+
+ context 'when the emoji is set' do
+ it 'removes the emoji' do
+ create(:award_emoji, awardable: issue, user: user)
+
+ expect { ToggleAwardEmojiService.new(project, user).execute(issue, ":+1:") }.to change { AwardEmoji.count }.by(-1)
+ end
+ end
+
+ context 'when the award is not set yet' do
+ it 'awards the emoji' do
+ expect { ToggleAwardEmojiService.new(project, user).execute(issue, ":+1:") }.to change { AwardEmoji.count }.by(1)
+ end
+ end
+ end
+end