# frozen_string_literal: true require 'spec_helper' RSpec.describe Blacklight::SearchContext::ServerItemPaginationComponent, type: :component do subject(:render) { render_inline(instance) } let(:current_document_id) { 9 } let(:current_document) { SolrDocument.new(id: current_document_id) } let(:search_session) { { 'document_id' => current_document_id, 'counter' => 1, 'total' => '3' } } let(:instance) { described_class.new(search_context: search_context, search_session: search_session, current_document: current_document) } before do allow(controller).to receive(:current_search_session).and_return(double(id: current_document_id)) controller.class.helper_method :current_search_session end context 'when there is no next or previous' do let(:search_context) { {} } it "does not render content" do expect(render.to_html).to be_blank end end context 'when there is exactly one search result with no next or previous document' do let(:search_context) { { prev: nil, next: nil } } let(:search_session) { { 'document_id' => current_document_id, 'counter' => 1, 'total' => '1' } } it "renders single page count" do expect(render.to_html).to include '1 of 1' expect(render.css('span.previous').to_html).to be_blank expect(render.css('span.next').to_html).to be_blank end end context 'when there is next and previous' do let(:search_context) { { next: next_doc, prev: prev_doc } } let(:prev_doc) { SolrDocument.new(id: '777') } let(:next_doc) { SolrDocument.new(id: '888') } before do # allow(controller).to receive(:controller_tracking_method).and_return('track_catalog_path') allow(controller).to receive_messages(controller_name: 'catalog', link_to_previous_document: '', link_to_next_document: '') end it "renders content" do expect(render.css('.search-context.page-links').to_html).not_to be_blank end context "session and document are out of sync" do let(:current_document) { SolrDocument.new(id: current_document_id + 1) } it "does not render content" do expect(render.to_html).to be_blank end end end end