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.
95 lines
3.2 KiB
Ruby
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
|