# frozen_string_literal: true require "rails_helper" describe "inbox/show.html.haml", type: :view do let(:user) { FactoryBot.create(:user) } before do sign_in user end subject(:rendered) { render } context "with an empty inbox" do before do assign :inbox, [] end it "displays an 'inbox is empty' message" do html = Nokogiri::HTML.parse(rendered) selector = "div.card.empty" expect(rendered).to have_css(selector) expect(html.css(selector).text.strip).to include "Your inbox is empty!" end end context "with some inbox entries" do let(:inbox_entry1) { InboxEntry.create(user:, question: FactoryBot.create(:question)) } let(:inbox_entry2) { InboxEntry.create(user:, question: FactoryBot.create(:question)) } before do assign :inbox, [inbox_entry2, inbox_entry1] end it "renders inbox entries" do expect(rendered).to have_css("#inbox_#{inbox_entry1.id}") expect(rendered).to have_css("#inbox_#{inbox_entry2.id}") end it "does not contain the empty inbox message" do expect(rendered).not_to have_css("p.empty") end it "does not render the paginator" do expect(rendered).not_to have_css("#paginator") end context "when more data is available" do before do assign :more_data_available, true assign :inbox_last_id, 1337 end it "renders the paginator" do expect(rendered).to have_css("#paginator") end it "has the correct params on the button" do expect(rendered).to have_css(%(input[type="hidden"][name="last_id"][value="1337"])) expect(rendered).not_to have_css(%(input[type="hidden"][name="author"])) end context "when passed an author" do before do assign :author, "jyrki" end it "has the correct params on the button" do expect(rendered).to have_css(%(input[type="hidden"][name="last_id"][value="1337"])) expect(rendered).to have_css(%(input[type="hidden"][name="author"])) end end end end end