spec/components/sdg/goals/index_component_spec.rb
require "rails_helper"
describe SDG::Goals::IndexComponent do
let!(:goals) { SDG::Goal.all }
let!(:phases) { SDG::Phase.all }
let!(:component) { SDG::Goals::IndexComponent.new(goals, header: nil, phases: phases) }
before do
Setting["feature.sdg"] = true
end
describe "header" do
it "renders the default header when a custom one is not defined" do
render_inline component
expect(page).to have_css "h1", exact_text: "Sustainable Development Goals"
end
it "renders a custom header" do
sdg_web_section = WebSection.find_by!(name: "sdg")
header = create(:widget_card, cardable: sdg_web_section)
component = SDG::Goals::IndexComponent.new(goals, header: header, phases: phases)
render_inline component
expect(page).to have_content header.title
expect(page).not_to have_css "h1", exact_text: "Sustainable Development Goals"
end
end
it "renders phases" do
render_inline component
expect(page).to have_content "Sensitization"
expect(page).to have_content "Planning"
expect(page).to have_content "Monitoring"
end
describe "Cards are ordered" do
scenario "by order field" do
create(:widget_card, cardable: SDG::Phase["planning"], title: "Card One", order: 3)
create(:widget_card, cardable: SDG::Phase["planning"], title: "Card Two", order: 2)
create(:widget_card, cardable: SDG::Phase["planning"], title: "Card Three", order: 1)
render_inline component
expect("Card Three").to appear_before("Card Two")
expect("Card Two").to appear_before("Card One")
end
scenario "by created_at with cards have same order" do
create(:widget_card, cardable: SDG::Phase["planning"], title: "Card One", order: 1)
create(:widget_card, cardable: SDG::Phase["planning"], title: "Card Two", order: 1)
create(:widget_card, cardable: SDG::Phase["planning"], title: "Card Three", order: 1)
render_inline component
expect("Card One").to appear_before("Card Two")
expect("Card Two").to appear_before("Card Three")
end
end
end