diff --git a/decidim-proposals/app/cells/decidim/proposals/proposal_g_cell.rb b/decidim-proposals/app/cells/decidim/proposals/proposal_g_cell.rb index 07fab9c4bb44..170a69ef949a 100644 --- a/decidim-proposals/app/cells/decidim/proposals/proposal_g_cell.rb +++ b/decidim-proposals/app/cells/decidim/proposals/proposal_g_cell.rb @@ -28,8 +28,6 @@ def metadata_cell_instance end def resource_image_path - return unless model.component.settings.attachments_allowed? - model.attachments.first&.url || proposal_image_placeholder end diff --git a/decidim-proposals/app/packs/stylesheets/decidim/proposals/proposals.scss b/decidim-proposals/app/packs/stylesheets/decidim/proposals/proposals.scss index 943d32ba8cd7..82b192441fd4 100644 --- a/decidim-proposals/app/packs/stylesheets/decidim/proposals/proposals.scss +++ b/decidim-proposals/app/packs/stylesheets/decidim/proposals/proposals.scss @@ -78,7 +78,7 @@ } #proposals { - .view-layout__links{ + .view-layout__links { svg { @apply inline-block w-5 h-5; diff --git a/decidim-proposals/spec/cells/decidim/proposals/proposal_g_cell_spec.rb b/decidim-proposals/spec/cells/decidim/proposals/proposal_g_cell_spec.rb new file mode 100644 index 000000000000..2ff2bb5bfb88 --- /dev/null +++ b/decidim-proposals/spec/cells/decidim/proposals/proposal_g_cell_spec.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +require "spec_helper" + +module Decidim::Proposals + describe ProposalGCell, type: :cell do + controller Decidim::Proposals::ProposalsController + + subject(:cell_html) { my_cell.call } + + let(:my_cell) { cell("decidim/proposals/proposal_g", proposal, card_size: :g) } + let(:component) { create(:proposal_component, :with_attachments_allowed) } + let!(:proposal) { create(:proposal, :evaluating, component:) } + let(:user) { create(:user, organization: proposal.participatory_space.organization) } + + before do + allow(controller).to receive(:current_user).and_return(user) + end + + describe "show" do + it "renders the proposal state item with appropriate class" do + expect(subject).to have_css("span.warning", text: "Evaluating") + end + + it "renders the proposal title" do + expect(subject).to have_content(translated_attribute(proposal.title)) + end + + context "when the proposal has an image" do + let!(:attachment) { create(:attachment, attached_to: proposal) } + + it "renders the proposal with an image" do + expect(subject).to have_css("img[src*='city']") + end + end + + context "when the proposal has no image" do + before { allow(proposal).to receive(:attachments).and_return([]) } + + it "renders a placeholder image" do + expect(subject).to have_css("img[src*='proposal_image_placeholder']") + end + end + end + end +end diff --git a/decidim-proposals/spec/system/proposals_spec.rb b/decidim-proposals/spec/system/proposals_spec.rb index f134431e483b..c06c8bb4d044 100644 --- a/decidim-proposals/spec/system/proposals_spec.rb +++ b/decidim-proposals/spec/system/proposals_spec.rb @@ -643,4 +643,57 @@ it_behaves_like "an uncommentable component" end end + + describe "viewing mode for proposals" do + let!(:proposal) { create(:proposal, :evaluating, component:) } + + context "when participants interact with the proposal view" do + it "provides an option for toggling between list and grid views" do + visit_component + expect(page).to have_css("use[href*='layout-grid-fill']") + expect(page).to have_css("use[href*='list-check']") + end + end + + context "when participants are viewing a grid of proposals" do + it "shows a grid of proposals with images" do + visit_component + find("a[href*='view_mode=grid']").click + expect(page).to have_css(".card__grid-grid") + expect(page).to have_css(".card__grid-img img, .card__grid-img svg") + end + end + + context "when participants are viewing a list of proposals" do + it "shows a list of proposals" do + visit_component + find("a[href*='view_mode=list']").click + expect(page).to have_css(".card__list-list") + end + end + + context "when proposals does not have attachments" do + it "shows a placeholder image" do + visit_component + find("a[href*='view_mode=grid']").click + expect(page).to have_css(".card__grid-img img[src*='proposal_image_placeholder']") + end + end + + context "when proposals have attachments" do + let!(:proposal) { create(:proposal, component:) } + let!(:attachment) { create(:attachment, attached_to: proposal) } + + before do + component.update!(settings: { attachments_allowed: true }) + end + + it "shows the proposal image" do + visit_component + + expect(page).to have_no_css(".card__grid-img img[src*='proposal_image_placeholder.svg']") + expect(page).to have_css(".card__grid-img img") + end + end + end end