summaryrefslogtreecommitdiff
path: root/spec/models/award_emoji_spec.rb
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-04-19 15:08:32 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-04-19 15:08:32 +0000
commit846dc476d835e43b123e0d66da3a60ed07f10641 (patch)
tree02231005811495589ab8bf4a2f4d52f80dc95117 /spec/models/award_emoji_spec.rb
parent2ef0b7f13d72eee215e3491a8db4623cbcdd845c (diff)
downloadgitlab-ce-846dc476d835e43b123e0d66da3a60ed07f10641.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/models/award_emoji_spec.rb')
-rw-r--r--spec/models/award_emoji_spec.rb85
1 files changed, 76 insertions, 9 deletions
diff --git a/spec/models/award_emoji_spec.rb b/spec/models/award_emoji_spec.rb
index 54f1d842acc..4da19267b1c 100644
--- a/spec/models/award_emoji_spec.rb
+++ b/spec/models/award_emoji_spec.rb
@@ -59,17 +59,41 @@ RSpec.describe AwardEmoji do
end
end
- it 'accepts custom emoji' do
- user = create(:user)
- group = create(:group)
- group.add_maintainer(user)
+ context 'custom emoji' do
+ let_it_be(:user) { create(:user) }
+ let_it_be(:group) { create(:group) }
+ let_it_be(:emoji) { create(:custom_emoji, name: 'partyparrot', namespace: group) }
- project = create(:project, namespace: group)
- issue = create(:issue, project: project)
- emoji = create(:custom_emoji, name: 'partyparrot', namespace: group)
- new_award = build(:award_emoji, user: user, awardable: issue, name: emoji.name)
+ before do
+ group.add_maintainer(user)
+ end
+
+ %i[issue merge_request note_on_issue snippet].each do |awardable_type|
+ let_it_be(:project) { create(:project, namespace: group) }
+ let(:awardable) { create(awardable_type, project: project) }
+
+ it "is accepted on #{awardable_type}" do
+ new_award = build(:award_emoji, user: user, awardable: awardable, name: emoji.name)
- expect(new_award).to be_valid
+ expect(new_award).to be_valid
+ end
+ end
+
+ it 'is accepted on subgroup issue' do
+ subgroup = create(:group, parent: group)
+ project = create(:project, namespace: subgroup)
+ issue = create(:issue, project: project)
+ new_award = build(:award_emoji, user: user, awardable: issue, name: emoji.name)
+
+ expect(new_award).to be_valid
+ end
+
+ it 'is not supported on personal snippet (yet)' do
+ snippet = create(:personal_snippet)
+ new_award = build(:award_emoji, user: snippet.author, awardable: snippet, name: 'null')
+
+ expect(new_award).not_to be_valid
+ end
end
end
@@ -223,4 +247,47 @@ RSpec.describe AwardEmoji do
end
end
end
+
+ describe '#url' do
+ let_it_be(:custom_emoji) { create(:custom_emoji) }
+ let_it_be(:project) { create(:project, namespace: custom_emoji.group) }
+ let_it_be(:issue) { create(:issue, project: project) }
+
+ def build_award(name)
+ build(:award_emoji, awardable: issue, name: name)
+ end
+
+ it 'is nil for built-in emoji' do
+ new_award = build_award('tada')
+
+ count = ActiveRecord::QueryRecorder.new do
+ expect(new_award.url).to be_nil
+ end.count
+ expect(count).to be_zero
+ end
+
+ it 'is nil for unrecognized emoji' do
+ new_award = build_award('null')
+
+ expect(new_award.url).to be_nil
+ end
+
+ it 'is set for custom emoji' do
+ new_award = build_award(custom_emoji.name)
+
+ expect(new_award.url).to eq(custom_emoji.url)
+ end
+
+ context 'feature flag disabled' do
+ before do
+ stub_feature_flags(custom_emoji: false)
+ end
+
+ it 'does not query' do
+ new_award = build_award(custom_emoji.name)
+
+ expect(ActiveRecord::QueryRecorder.new { new_award.url }.count).to be_zero
+ end
+ end
+ end
end