104 lines
2.6 KiB
Ruby
104 lines
2.6 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'spec_helper'
|
||
|
|
||
|
describe Resolvers::ErrorTracking::SentryErrorsResolver do
|
||
|
include GraphqlHelpers
|
||
|
|
||
|
let_it_be(:project) { create(:project) }
|
||
|
let_it_be(:current_user) { create(:user) }
|
||
|
let_it_be(:error_collection) { Gitlab::ErrorTracking::ErrorCollection.new(project: project) }
|
||
|
|
||
|
let(:list_issues_service) { spy('ErrorTracking::ListIssuesService') }
|
||
|
|
||
|
let(:issues) { nil }
|
||
|
let(:pagination) { nil }
|
||
|
|
||
|
describe '#resolve' do
|
||
|
context 'insufficient user permission' do
|
||
|
let(:user) { create(:user) }
|
||
|
|
||
|
it 'returns nil' do
|
||
|
context = { current_user: user }
|
||
|
|
||
|
expect(resolve_errors({}, context)).to eq nil
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'user with permission' do
|
||
|
before do
|
||
|
project.add_developer(current_user)
|
||
|
|
||
|
allow(ErrorTracking::ListIssuesService)
|
||
|
.to receive(:new)
|
||
|
.and_return list_issues_service
|
||
|
end
|
||
|
|
||
|
context 'when after arg given' do
|
||
|
let(:after) { "1576029072000:0:0" }
|
||
|
|
||
|
it 'gives the cursor arg' do
|
||
|
expect(ErrorTracking::ListIssuesService)
|
||
|
.to receive(:new)
|
||
|
.with(project, current_user, { cursor: after })
|
||
|
.and_return list_issues_service
|
||
|
|
||
|
resolve_errors({ after: after })
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when no issues fetched' do
|
||
|
before do
|
||
|
allow(list_issues_service)
|
||
|
.to receive(:execute)
|
||
|
.and_return(
|
||
|
issues: nil
|
||
|
)
|
||
|
end
|
||
|
it 'returns nil' do
|
||
|
expect(resolve_errors).to eq nil
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when issues returned' do
|
||
|
let(:issues) { [:issue_1, :issue_2] }
|
||
|
let(:pagination) do
|
||
|
{
|
||
|
'next' => { 'cursor' => 'next' },
|
||
|
'previous' => { 'cursor' => 'prev' }
|
||
|
}
|
||
|
end
|
||
|
|
||
|
before do
|
||
|
allow(list_issues_service)
|
||
|
.to receive(:execute)
|
||
|
.and_return(
|
||
|
issues: issues,
|
||
|
pagination: pagination
|
||
|
)
|
||
|
end
|
||
|
|
||
|
it 'sets the issues' do
|
||
|
expect(resolve_errors).to contain_exactly(*issues)
|
||
|
end
|
||
|
|
||
|
it 'sets the pagination variables' do
|
||
|
result = resolve_errors
|
||
|
expect(result.next_cursor).to eq 'next'
|
||
|
expect(result.previous_cursor).to eq 'prev'
|
||
|
end
|
||
|
|
||
|
it 'returns an externally paginated array' do
|
||
|
expect(resolve_errors).to be_a Gitlab::Graphql::ExternallyPaginatedArray
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def resolve_errors(args = {}, context = { current_user: current_user })
|
||
|
resolve(described_class, obj: error_collection, args: args, ctx: context)
|
||
|
end
|
||
|
end
|