95 lines
3.1 KiB
Ruby
95 lines
3.1 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).not_to be_rendered
|
|
end
|
|
end
|
|
|
|
it "does not render anything given nil" do
|
|
render_inline Shared::BannerComponent.new(nil)
|
|
|
|
expect(page).not_to be_rendered
|
|
end
|
|
end
|