diff options
Diffstat (limited to 'spec/lib/gitlab/graphql/pagination/keyset/connection_spec.rb')
-rw-r--r-- | spec/lib/gitlab/graphql/pagination/keyset/connection_spec.rb | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/spec/lib/gitlab/graphql/pagination/keyset/connection_spec.rb b/spec/lib/gitlab/graphql/pagination/keyset/connection_spec.rb index 0ac54a20fcc..02e67488d3f 100644 --- a/spec/lib/gitlab/graphql/pagination/keyset/connection_spec.rb +++ b/spec/lib/gitlab/graphql/pagination/keyset/connection_spec.rb @@ -21,6 +21,47 @@ RSpec.describe Gitlab::Graphql::Pagination::Keyset::Connection do Gitlab::Json.parse(Base64Bp.urlsafe_decode64(cursor)) end + # see: https://gitlab.com/gitlab-org/gitlab/-/issues/297358 + context 'the relation has been preloaded' do + let(:projects) { Project.all.preload(:issues) } + let(:nodes) { projects.first.issues } + + before do + project = create(:project) + create_list(:issue, 3, project: project) + end + + it 'is loaded' do + expect(nodes).to be_loaded + end + + it 'does not error when accessing pagination information' do + connection.first = 2 + + expect(connection).to have_attributes( + has_previous_page: false, + has_next_page: true + ) + end + + it 'can generate cursors' do + connection.send(:ordered_items) # necessary to generate the order-list + + expect(connection.cursor_for(nodes.first)).to be_a(String) + end + + it 'can read the next page' do + connection.send(:ordered_items) # necessary to generate the order-list + ordered = nodes.reorder(id: :desc) + next_page = described_class.new(nodes, + context: context, + max_page_size: 3, + after: connection.cursor_for(ordered.second)) + + expect(next_page.sliced_nodes).to contain_exactly(ordered.third) + end + end + it_behaves_like 'a connection with collection methods' it_behaves_like 'a redactable connection' do |