describe 'spotlight/feature_pages/_sidebar.html.erb', type: :view do
let(:exhibit) { FactoryBot.create(:exhibit) }
let!(:parent1) { FactoryBot.create(:feature_page, exhibit: exhibit, title: 'Parent Page') }
let!(:parent2) { FactoryBot.create(:feature_page, exhibit: exhibit, title: 'Two') }
let!(:child1) { FactoryBot.create(:feature_page, exhibit: exhibit, parent_page: parent1, title: 'Three', weight: 4) }
let!(:child2) { FactoryBot.create(:feature_page, exhibit: exhibit, parent_page: parent2, title: 'Four') }
let!(:child3) { FactoryBot.create(:feature_page, exhibit: exhibit, parent_page: parent1, title: 'Five', weight: 2) }
let!(:child4) { FactoryBot.create(:feature_page, exhibit: exhibit, parent_page: parent1, title: 'Six', published: false) }
let!(:child5) { FactoryBot.create(:feature_page, exhibit: FactoryBot.create(:exhibit), title: 'Seven') }
before do
allow(view).to receive_messages(current_exhibit: parent1.exhibit)
allow(view).to receive_messages(feature_page_path: '/feature/9')
assign(:exhibit, parent1.exhibit)
end
it 'renders a list of pages for a parent page' do
assign(:page, parent1)
allow(view).to receive(:current_page?).and_return(true, false)
render
# Checking that they are sorted accoding to weight
expect(rendered).to have_selector 'li.active h4', text: 'Parent Page'
expect(rendered).to have_selector '#sidebar ol.sidenav li:nth-child(1) a', text: 'Five'
expect(rendered).to have_selector '#sidebar ol.sidenav li:nth-child(2) a', text: 'Three'
expect(rendered).to have_selector 'li h4 a', text: 'Two' # a different parent page
expect(rendered).to have_link 'Four' # different parent
expect(rendered).not_to have_link 'Six' # not published
expect(rendered).not_to have_link 'Seven' # different exhibit
end
it 'renders a list of pages from a child page' do
assign(:page, child1)
render
# Checking that they are sorted accoding to weight
expect(rendered).to have_selector 'h4', text: 'Parent Page'
expect(rendered).to have_selector '#sidebar ol.sidenav li:nth-child(1) a', text: 'Five'
expect(rendered).to have_selector '#sidebar ol.sidenav li:nth-child(2) a', text: 'Three'
expect(rendered).to have_content 'Two' # not selected page
expect(rendered).to have_link 'Four' # different parent
expect(rendered).not_to have_link 'Six' # not published
end
end