Files
grecia/spec/components/shared/banner_component_spec.rb
taitus 2b35144540 Unify expectations on spec components folder
In this PR (https://github.com/consul/consul/pull/4683) a new syntax was introduced
in the component specs to check that the component was not rendering.
It seems interesting to add this syntax to the rest of the cases and thus unify the way
we check that a component is not rendering.
2021-11-04 10:49:36 +01:00

95 lines
3.2 KiB
Ruby

require "rails_helper"
describe Shared::BannerComponent do
it "renders given a banner" do
banner = create(:banner,
title: "Vote now!",
description: "Banner description",
target_url: "http://www.url.com",
post_started_at: (Date.current - 4.days),
post_ended_at: (Date.current + 10.days),
background_color: "#FF0000",
font_color: "#FFFFFF"
)
render_inline Shared::BannerComponent.new(banner)
expect(page.find(".banner")).to have_content "Vote now!"
expect(page.find(".banner")).to have_content "Banner description"
expect(page.find(".banner")[:style]).to eq("background-color:#FF0000;")
expect(page.find("h2")[:style]).to eq("color:#FFFFFF;")
expect(page.find("h3")[:style]).to eq("color:#FFFFFF;")
expect(page).to have_link href: "http://www.url.com"
end
it "renders given a section" do
create(:banner, web_sections: [WebSection.find_by!(name: "debates")], title: "Debate banner")
create(:banner, web_sections: [WebSection.find_by!(name: "proposals")], title: "Proposal banner")
render_inline Shared::BannerComponent.new("debates")
expect(page.find(".banner")).to have_content "Debate banner"
expect(page).not_to have_content "Proposal banner"
end
context "several banners available in the same section" do
before do
create(:banner,
web_sections: [WebSection.find_by!(name: "debates")],
title: "First banner",
description: "First description",
target_url: "/first_target"
)
create(:banner,
web_sections: [WebSection.find_by!(name: "debates")],
title: "Second banner",
description: "Second description",
target_url: "/second_target"
)
end
it "only renders one banner" do
render_inline Shared::BannerComponent.new("debates")
expect(page).to have_css ".banner", count: 1
end
it "consistently renders one banner" do
render_inline Shared::BannerComponent.new("debates")
if page.has_content?("First banner")
expect(page).to have_content "First description"
expect(page).to have_css "[href='/first_target']"
expect(page).not_to have_content "Second banner"
else
expect(page).to have_content "Second description"
expect(page).to have_css "[href='/second_target']"
end
end
it "only renders active banners" do
Banner.first.update!(post_ended_at: Date.current - 1.day)
render_inline Shared::BannerComponent.new("debates")
expect(page).to have_content "Second banner"
expect(page).not_to have_content "First banner"
end
it "does not render anything with no active banners" do
Banner.all.each { |banner| banner.update!(post_ended_at: Date.current - 1.day) }
render_inline Shared::BannerComponent.new("debates")
expect(page.native.inner_html).to be_empty
end
end
it "does not render anything given nil" do
render_inline Shared::BannerComponent.new(nil)
expect(page.native.inner_html).to be_empty
end
end