diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-15 00:10:22 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-15 00:10:22 +0300 |
commit | 5b829393a732143e31e2f9a62b6ca2cfb7ebb147 (patch) | |
tree | 85260ce9fd49ea62df0cea5b750f8c0db1b5a082 /spec | |
parent | f69bc1dab50e86440bb4ffdc507ca5efd94bf459 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/finders/pending_todos_finder_spec.rb | 28 | ||||
-rw-r--r-- | spec/frontend/behaviors/shortcuts/keybindings_spec.js | 11 | ||||
-rw-r--r-- | spec/graphql/types/ci/runner_type_spec.rb | 6 | ||||
-rw-r--r-- | spec/lib/gitlab/highlight_spec.rb | 22 | ||||
-rw-r--r-- | spec/models/todo_spec.rb | 12 | ||||
-rw-r--r-- | spec/services/discussions/resolve_service_spec.rb | 45 |
6 files changed, 113 insertions, 11 deletions
diff --git a/spec/finders/pending_todos_finder_spec.rb b/spec/finders/pending_todos_finder_spec.rb index b17915f0d59..f317d8b1633 100644 --- a/spec/finders/pending_todos_finder_spec.rb +++ b/spec/finders/pending_todos_finder_spec.rb @@ -3,8 +3,11 @@ require 'spec_helper' RSpec.describe PendingTodosFinder do - let(:user) { create(:user) } - let(:user2) { create(:user) } + let_it_be(:user) { create(:user) } + let_it_be(:user2) { create(:user) } + let_it_be(:issue) { create(:issue) } + let_it_be(:note) { create(:note) } + let(:users) { [user, user2] } describe '#execute' do @@ -30,20 +33,16 @@ RSpec.describe PendingTodosFinder do end it 'supports retrieving of todos for a specific todo target' do - issue = create(:issue) - note = create(:note) todo = create(:todo, :pending, user: user, target: issue) create(:todo, :pending, user: user, target: note) - todos = described_class.new(users, target_id: issue.id).execute + todos = described_class.new(users, target_id: issue.id, target_type: 'Issue').execute expect(todos).to eq([todo]) end it 'supports retrieving of todos for a specific target type' do - issue = create(:issue) - note = create(:note) todo = create(:todo, :pending, user: user, target: issue) create(:todo, :pending, user: user, target: note) @@ -61,5 +60,20 @@ RSpec.describe PendingTodosFinder do expect(todos).to eq([todo]) end + + it 'supports retrieving of todos for specific discussion' do + first_discussion_note = create(:discussion_note_on_issue, noteable: issue, project: issue.project) + note_2 = create(:note, discussion_id: first_discussion_note.discussion_id) + note_3 = create(:note, discussion_id: first_discussion_note.discussion_id) + todo1 = create(:todo, :pending, target: issue, note: note_2, user: note_2.author) + todo2 = create(:todo, :pending, target: issue, note: note_3, user: note_3.author) + create(:todo, :pending, note: note, user: user) + discussion = Discussion.lazy_find(first_discussion_note.discussion_id) + users = [note_2.author, note_3.author, user] + + todos = described_class.new(users, discussion: discussion).execute + + expect(todos).to contain_exactly(todo1, todo2) + end end end diff --git a/spec/frontend/behaviors/shortcuts/keybindings_spec.js b/spec/frontend/behaviors/shortcuts/keybindings_spec.js index 53ce06e78c6..3ad44a16ae1 100644 --- a/spec/frontend/behaviors/shortcuts/keybindings_spec.js +++ b/spec/frontend/behaviors/shortcuts/keybindings_spec.js @@ -5,6 +5,7 @@ import { getCustomizations, keybindingGroups, TOGGLE_PERFORMANCE_BAR, + HIDE_APPEARING_CONTENT, LOCAL_STORAGE_KEY, WEB_IDE_COMMIT, } from '~/behaviors/shortcuts/keybindings'; @@ -95,4 +96,14 @@ describe('~/behaviors/shortcuts/keybindings', () => { expect(keysFor(TOGGLE_PERFORMANCE_BAR)).toEqual(['p b']); }); }); + + describe('when tooltips or popovers are visible', () => { + beforeEach(() => { + setupCustomizations(); + }); + + it('returns the default keybinding for the command', () => { + expect(keysFor(HIDE_APPEARING_CONTENT)).toEqual(['esc']); + }); + }); }); diff --git a/spec/graphql/types/ci/runner_type_spec.rb b/spec/graphql/types/ci/runner_type_spec.rb index dfe4a30c5b7..f27216f4d39 100644 --- a/spec/graphql/types/ci/runner_type_spec.rb +++ b/spec/graphql/types/ci/runner_type_spec.rb @@ -2,15 +2,17 @@ require 'spec_helper' -RSpec.describe Types::Ci::RunnerType do +RSpec.describe GitlabSchema.types['CiRunner'] do specify { expect(described_class.graphql_name).to eq('CiRunner') } + specify { expect(described_class).to require_graphql_authorizations(:read_runner) } + it 'contains attributes related to a runner' do expected_fields = %w[ id description contacted_at maximum_timeout access_level active status version short_sha revision locked run_untagged ip_address runner_type tag_list ] - expect(described_class).to have_graphql_fields(*expected_fields) + expect(described_class).to include_graphql_fields(*expected_fields) end end diff --git a/spec/lib/gitlab/highlight_spec.rb b/spec/lib/gitlab/highlight_spec.rb index 74388273c8d..1f06019c929 100644 --- a/spec/lib/gitlab/highlight_spec.rb +++ b/spec/lib/gitlab/highlight_spec.rb @@ -143,9 +143,21 @@ RSpec.describe Gitlab::Highlight do end describe 'highlight timeouts' do - context 'when there is a timeout error while highlighting' do - let(:result) { described_class.highlight(file_name, content) } + let(:result) { described_class.highlight(file_name, content, language: "ruby") } + + context 'when there is an attempt' do + it "increments the attempt counter with a defined language" do + expect { result }.to change { highlight_attempt_total("ruby") } + end + + it "increments the attempt counter with an undefined language" do + expect do + described_class.highlight(file_name, content) + end.to change { highlight_attempt_total("undefined") } + end + end + context 'when there is a timeout error while highlighting' do before do allow(Timeout).to receive(:timeout).twice.and_raise(Timeout::Error) # This is done twice because it's rescued first and then @@ -177,6 +189,12 @@ RSpec.describe Gitlab::Highlight do .get(source: source) end + def highlight_attempt_total(source) + Gitlab::Metrics + .counter(:file_highlighting_attempt, 'Counts the times highlighting has been attempted on a file') + .get(source: source) + end + def over_highlight_size_limit(source) Gitlab::Metrics .counter(:over_highlight_size_limit, diff --git a/spec/models/todo_spec.rb b/spec/models/todo_spec.rb index caa0a886abf..651e2cf273f 100644 --- a/spec/models/todo_spec.rb +++ b/spec/models/todo_spec.rb @@ -376,6 +376,18 @@ RSpec.describe Todo do end end + describe '.for_note' do + it 'returns todos that belongs to notes' do + note_1 = create(:note, noteable: issue, project: issue.project) + note_2 = create(:note, noteable: issue, project: issue.project) + todo_1 = create(:todo, note: note_1) + todo_2 = create(:todo, note: note_2) + create(:todo, note: create(:note)) + + expect(described_class.for_note([note_1, note_2])).to contain_exactly(todo_1, todo_2) + end + end + describe '.group_by_user_id_and_state' do let_it_be(:user1) { create(:user) } let_it_be(:user2) { create(:user) } diff --git a/spec/services/discussions/resolve_service_spec.rb b/spec/services/discussions/resolve_service_spec.rb index 2e30455eb0a..24de1d90526 100644 --- a/spec/services/discussions/resolve_service_spec.rb +++ b/spec/services/discussions/resolve_service_spec.rb @@ -121,5 +121,50 @@ RSpec.describe Discussions::ResolveService do service.execute end end + + context 'when resolving a discussion' do + def resolve_discussion(discussion, user) + described_class.new(project, user, one_or_more_discussions: discussion).execute + end + + context 'in a design' do + let_it_be(:design) { create(:design, :with_file, issue: create(:issue, project: project)) } + let_it_be(:user_1) { create(:user) } + let_it_be(:user_2) { create(:user) } + let_it_be(:discussion_1) { create(:diff_note_on_design, noteable: design, project: project, author: user_1).to_discussion } + let_it_be(:discussion_2) { create(:diff_note_on_design, noteable: design, project: project, author: user_2).to_discussion } + + before do + project.add_developer(user_1) + project.add_developer(user_2) + end + + context 'when user resolving discussion has open todos' do + let!(:user_1_todo_for_discussion_1) { create(:todo, :pending, user: user_1, target: design, note: discussion_1.notes.first, project: project) } + let!(:user_1_todo_2_for_discussion_1) { create(:todo, :pending, user: user_1, target: design, note: discussion_1.notes.first, project: project) } + let!(:user_1_todo_for_discussion_2) { create(:todo, :pending, user: user_1, target: design, note: discussion_2.notes.first, project: project) } + let!(:user_2_todo_for_discussion_1) { create(:todo, :pending, user: user_2, target: design, note: discussion_1.notes.first, project: project) } + + it 'marks user todos for given discussion as done' do + resolve_discussion(discussion_1, user_1) + + expect(user_1_todo_for_discussion_1.reload).to be_done + expect(user_1_todo_2_for_discussion_1.reload).to be_done + expect(user_1_todo_for_discussion_2.reload).to be_pending + expect(user_2_todo_for_discussion_1.reload).to be_pending + end + end + end + + context 'in a merge request' do + let!(:user_todo_for_discussion) { create(:todo, :pending, user: user, target: merge_request, note: discussion.notes.first, project: project) } + + it 'does not mark user todo as done' do + resolve_discussion(discussion, user) + + expect(user_todo_for_discussion).to be_pending + end + end + end end end |