diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-01-20 18:10:29 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-01-20 18:10:29 +0300 |
commit | ef8c47e97e1c178291e4857314a3f53875d75062 (patch) | |
tree | 89ef0c1cd34e864aad1346a0ee07bccb81a9ac65 /spec/support | |
parent | f2ebc27236ecef67e67da1da864bbf58e9b9c267 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/support')
3 files changed, 68 insertions, 47 deletions
diff --git a/spec/support/helpers/graphql_helpers.rb b/spec/support/helpers/graphql_helpers.rb index 35c298a4d48..013a870796c 100644 --- a/spec/support/helpers/graphql_helpers.rb +++ b/spec/support/helpers/graphql_helpers.rb @@ -510,8 +510,12 @@ module GraphqlHelpers end end - def global_id_of(model) - model.to_global_id.to_s + def global_id_of(model, id: nil, model_name: nil) + if id || model_name + ::Gitlab::GlobalId.build(model, id: id, model_name: model_name).to_s + else + model.to_global_id.to_s + end end def missing_required_argument(path, argument) diff --git a/spec/support/shared_examples/models/concerns/can_housekeep_repository_shared_examples.rb b/spec/support/shared_examples/models/concerns/can_housekeep_repository_shared_examples.rb deleted file mode 100644 index 2f0b95427d2..00000000000 --- a/spec/support/shared_examples/models/concerns/can_housekeep_repository_shared_examples.rb +++ /dev/null @@ -1,45 +0,0 @@ -# frozen_string_literal: true - -RSpec.shared_examples 'can housekeep repository' do - context 'with a clean redis state', :clean_gitlab_redis_shared_state do - describe '#pushes_since_gc' do - context 'without any pushes' do - it 'returns 0' do - expect(resource.pushes_since_gc).to eq(0) - end - end - - context 'with a number of pushes' do - it 'returns the number of pushes' do - 3.times { resource.increment_pushes_since_gc } - - expect(resource.pushes_since_gc).to eq(3) - end - end - end - - describe '#increment_pushes_since_gc' do - it 'increments the number of pushes since the last GC' do - 3.times { resource.increment_pushes_since_gc } - - expect(resource.pushes_since_gc).to eq(3) - end - end - - describe '#reset_pushes_since_gc' do - it 'resets the number of pushes since the last GC' do - 3.times { resource.increment_pushes_since_gc } - - resource.reset_pushes_since_gc - - expect(resource.pushes_since_gc).to eq(0) - end - end - - describe '#pushes_since_gc_redis_shared_state_key' do - it 'returns the proper redis key format' do - expect(resource.send(:pushes_since_gc_redis_shared_state_key)).to eq("#{resource_key}/#{resource.id}/pushes_since_gc") - end - end - end -end diff --git a/spec/support/shared_examples/requests/api/graphql/noteable_shared_examples.rb b/spec/support/shared_examples/requests/api/graphql/noteable_shared_examples.rb new file mode 100644 index 00000000000..9cf5bc04f65 --- /dev/null +++ b/spec/support/shared_examples/requests/api/graphql/noteable_shared_examples.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true + +# Requires `query(fields)`, `path_to_noteable`, `project`, and `noteable` bindings +RSpec.shared_examples 'a noteable graphql type we can query' do + let(:note_factory) { :note } + let(:discussion_factory) { :discussion_note } + + describe '.discussions' do + let(:fields) do + "discussions { nodes { #{all_graphql_fields_for('Discussion')} } }" + end + + def expected + noteable.discussions.map do |discussion| + include( + 'id' => global_id_of(discussion), + 'replyId' => global_id_of(discussion, id: discussion.reply_id), + 'createdAt' => discussion.created_at.iso8601, + 'notes' => include( + 'nodes' => have_attributes(size: discussion.notes.size) + ) + ) + end + end + + it 'can fetch discussions' do + create(discussion_factory, project: project, noteable: noteable) + + post_graphql(query(fields), current_user: current_user) + + expect(graphql_data_at(*path_to_noteable, :discussions, :nodes)) + .to match_array(expected) + end + end + + describe '.notes' do + let(:fields) do + "notes { nodes { #{all_graphql_fields_for('Note', max_depth: 2)} } }" + end + + def expected + noteable.notes.map do |note| + include( + 'id' => global_id_of(note), + 'project' => include('id' => global_id_of(project)), + 'author' => include('id' => global_id_of(note.author)), + 'createdAt' => note.created_at.iso8601, + 'body' => eq(note.note) + ) + end + end + + it 'can fetch notes' do + create(note_factory, project: project, noteable: noteable) + + post_graphql(query(fields), current_user: current_user) + + expect(graphql_data_at(*path_to_noteable, :notes, :nodes)) + .to match_array(expected) + end + end +end |