Files
growstuff/spec/views/gardens/show.html.haml_spec.rb
T
Daniel O'Connorandgoogle-labs-jules[bot] 744ec9b7ec Display layout preview and edit/view controls on garden show (#5003)
Add `Garden#has_layout?` method to detect whether a garden has an
existing layout. On `gardens#show`, if a garden has a layout, display
an SVG preview of the layout (placed plants and features) inside the
teaser bed frame, remove the "New" badge, update the title to
"Garden layout", and offer "Edit layout →" or "View layout →" controls.
If no layout exists, preserve the original "Map out this bed" teaser
and "New" badge.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-10-22 18:08:05 +00:00

107 lines
3.5 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
describe "gardens/show" do
context 'when the garden is active' do
before do
@owner = create(:member)
controller.stub(:current_user) { @owner }
@garden = create(:garden, owner: @owner)
@planting = create(:planting, garden: @garden, owner: @garden.owner)
@suggested_companions = create_list(:crop, 4)
assign(:garden, @garden)
assign(:current_plantings, [@planting])
assign(:finished_plantings, [])
assign(:suggested_companions, @suggested_companions)
render
end
it 'shows the location' do
expect(rendered).to have_content @garden.location
end
it 'links the breadcrumb to the garden itself' do
expect(view.content_for(:breadcrumbs)).to have_link(@garden.name, href: garden_path(@garden))
end
it 'shows the area' do
expect(rendered).to have_content pluralize(@garden.area, @garden.area_unit)
end
it 'shows the description' do
expect(rendered).to have_content "totally cool garden"
end
it 'renders markdown in the description' do
assert_select "strong", "totally"
end
it 'shows plantings on the garden page' do
expect(rendered).to have_content @planting.crop.name
end
it 'points people at the garden layout teaser with New indicator when garden has no layout' do
assert_select "a.garden-layout-teaser[href=?]", layout_member_garden_path(@owner, @garden)
expect(rendered).to have_content "New"
expect(rendered).to have_content "Map out this bed"
expect(rendered).to have_content "Try out the new garden layout tool"
end
end
context 'when the garden is active and has a layout' do
before do
@owner = create(:member)
controller.stub(:current_user) { @owner }
@garden = create(:garden, owner: @owner, layout_saved_at: Time.current)
@planting = create(:planting, garden: @garden, owner: @garden.owner)
assign(:garden, @garden)
assign(:current_plantings, [@planting])
assign(:finished_plantings, [])
assign(:suggested_companions, [])
render
end
it 'shows the layout SVG preview and edit controls without New badge' do
assert_select "a.garden-layout-teaser[href=?]", layout_member_garden_path(@owner, @garden)
assert_select "svg.garden-layout-teaser-svg"
expect(rendered).not_to have_content "New"
expect(rendered).to have_content "Garden layout"
expect(rendered).to have_content "Edit layout →"
end
end
context 'when viewing another member active garden with a layout' do
before do
@owner = create(:member)
@viewer = create(:member)
controller.stub(:current_user) { @viewer }
@garden = create(:garden, owner: @owner, layout_saved_at: Time.current)
assign(:garden, @garden)
assign(:current_plantings, [])
assign(:finished_plantings, [])
assign(:suggested_companions, [])
render
end
it 'shows view layout controls' do
expect(rendered).to have_content "Garden layout"
expect(rendered).to have_content "View layout →"
end
end
context 'when the garden is inactive' do
it "doesn't offer the layout, as nothing is growing there to place" do
garden = create(:inactive_garden)
controller.stub(:current_user) { garden.owner }
assign(:garden, garden)
assign(:current_plantings, [])
assign(:finished_plantings, [])
assign(:suggested_companions, [])
render
assert_select "a.garden-layout-teaser", count: 0
end
end
end