Files
growstuff/spec/features/home/home_spec.rb
2025-08-31 13:01:51 +09:30

112 lines
3.2 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
describe "home page", :search do
subject { page }
let(:member) { FactoryBot.create(:member) }
let(:photo) { FactoryBot.create(:photo, owner: member) }
let(:crop) { FactoryBot.create(:crop, created_at: 1.day.ago) }
let(:planting) { FactoryBot.create(:planting, owner: member, crop:) }
let(:seed) { FactoryBot.create(:tradable_seed, owner: member, crop:) }
let(:harvest) { FactoryBot.create(:harvest, owner: member, crop:) }
let!(:tradable_seed) { FactoryBot.create(:tradable_seed, :reindex, finished: false) }
let!(:finished_seed) { FactoryBot.create(:tradable_seed, :reindex, finished: true) }
let!(:untradable_seed) { FactoryBot.create(:untradable_seed, :reindex) }
before do
# Add photos, so they can appear on home page
planting.photos << photo
seed.photos << photo
harvest.photos << photo
Crop.reindex
Planting.reindex
Seed.reindex
Harvest.reindex
Photo.reindex
visit root_path
end
shared_examples 'shows seeds' do
it "show tradeable seed" do
expect(subject).to have_link href: seed_path(tradable_seed)
end
it "does not show finished seeds" do
expect(subject).to have_no_link href: seed_path(finished_seed)
end
it "does not show untradable seeds" do
expect(subject).to have_no_link href: seed_path(untradable_seed)
end
it { is_expected.to have_link 'View all seeds »' }
end
shared_examples 'show plantings' do
describe 'shows plantings section' do
it { expect(subject).to have_text 'Recently Planted' }
it { expect(subject).to have_link href: planting_path(planting) }
end
end
shared_examples 'show harvests' do
describe 'shows harvests section' do
it { expect(subject).to have_text 'Recently Harvested' }
it { expect(subject).to have_link href: harvest_path(harvest) }
end
end
shared_examples "show crops" do
describe 'shows crops section' do
before { crop.reindex }
it { is_expected.to have_text 'Some of our crops' }
it { is_expected.to have_link href: crop_path(crop) }
end
describe 'shows recently added crops' do
it { is_expected.to have_text 'Recently Added' }
it 'link to newest crops' do
expect(subject).to have_link crop.name, href: crop_path(crop)
end
end
it 'includes a link to all crops' do
expect(subject).to have_link 'View all crops'
end
end
context 'when anonymous' do
it_behaves_like 'show crops'
it_behaves_like 'show plantings'
it_behaves_like 'show harvests'
it_behaves_like 'shows seeds'
it_behaves_like 'is accessible'
it { is_expected.to have_text 'community of food gardeners' }
it { is_expected.to have_text 'Want to install Growstuff on your phone?' }
end
context "when signed in" do
include_context 'signed in member'
it_behaves_like 'show crops'
it_behaves_like 'show plantings'
it_behaves_like 'show harvests'
it_behaves_like 'shows seeds'
it_behaves_like 'is accessible'
describe 'should say welcome' do
before { visit root_path }
it { expect(page).to have_content "Welcome to #{ENV.fetch('GROWSTUFF_SITE_NAME', nil)}, #{member.login_name}" }
end
end
end