Files
grecia/spec/components/budgets/executions/image_component_spec.rb
Javi Martín 10cdfadb9b Move executions images system tests to the component
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.
2024-11-07 14:21:55 +01:00

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