We forgot to do so in commit f0ab7bcfc. We're still leaving one system
spec to test that these images are rendered when browsing the site.
We're also changing the existing component tests to check the `alt`
attribute, just like the remaining system test does.
63 lines
2.3 KiB
Ruby
63 lines
2.3 KiB
Ruby
require "rails_helper"
|
|
|
|
describe Budgets::Executions::ImageComponent do
|
|
let(:component) { Budgets::Executions::ImageComponent.new(investment) }
|
|
|
|
context "investment with image" do
|
|
let(:investment) { create(:budget_investment, :with_image) }
|
|
|
|
it "shows a milestone image if available" do
|
|
create(:milestone, :with_image, image_title: "Building in progress", milestoneable: investment)
|
|
|
|
render_inline component
|
|
|
|
expect(page).to have_css "img[alt='Building in progress']"
|
|
expect(page).not_to have_css "img[alt='#{investment.image.title}']"
|
|
end
|
|
|
|
it "shows the investment image if no milestone image is available" do
|
|
create(:milestone, :with_image, image_title: "Not related", milestoneable: create(:budget_investment))
|
|
|
|
render_inline component
|
|
|
|
expect(page).to have_css "img[alt='#{investment.image.title}']"
|
|
expect(page).not_to have_css "img[alt='Not related']"
|
|
end
|
|
|
|
it "shows the last milestone's image if the investment has multiple milestones with images associated" do
|
|
create(:milestone, milestoneable: investment)
|
|
create(:milestone, :with_image, image_title: "First image", milestoneable: investment)
|
|
create(:milestone, :with_image, image_title: "Second image", milestoneable: investment)
|
|
create(:milestone, milestoneable: investment)
|
|
|
|
render_inline component
|
|
|
|
expect(page).to have_css "img[alt='Second image']"
|
|
expect(page).not_to have_css "img[alt='First image']"
|
|
expect(page).not_to have_css "img[alt='#{investment.image.title}']"
|
|
end
|
|
end
|
|
|
|
context "investment and milestone without image" do
|
|
let(:investment) { Budget::Investment.new(title: "New and empty") }
|
|
|
|
it "shows the default image" do
|
|
render_inline component
|
|
|
|
expect(page).to have_css "img[src*='budget_execution_no_image'][alt='New and empty']"
|
|
end
|
|
|
|
it "shows a custom default image when available" do
|
|
stub_const("#{SiteCustomization::Image}::VALID_IMAGES", { "budget_execution_no_image" => [260, 80] })
|
|
create(:site_customization_image,
|
|
name: "budget_execution_no_image",
|
|
image: fixture_file_upload("logo_header-260x80.png"))
|
|
|
|
render_inline component
|
|
|
|
expect(page).to have_css "img[src$='logo_header-260x80.png'][alt='New and empty']"
|
|
expect(page).not_to have_css "img[src*='budget_execution_no_image']"
|
|
end
|
|
end
|
|
end
|