Files
growstuff/spec/features/gardens/index_spec.rb
T

161 lines
5.0 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# frozen_string_literal: true
require 'rails_helper'
require 'custom_matchers'
describe "Gardens#index", :js do
context "Logged in as member" do
include_context 'signed in member'
let(:member) { create(:member, login_name: 'shadow') }
context "with 10 gardens" do
before do
create_list(:garden, 10, owner: member)
visit member_gardens_path(member_slug: member.slug)
end
include_examples 'is accessible'
it "displays each of the gardens" do
member.gardens.each do |garden|
expect(page).to have_text garden.name
end
end
it "links to each garden" do
member.gardens.each do |garden|
open_all_gardens
expect(page).to have_link("Open #{garden.name} ›", href: garden_path(garden))
end
end
end
context "with inactive gardens" do
let!(:active_garden) { create(:garden, name: "My active garden", owner: member) }
let!(:inactive_garden) { create(:inactive_garden, name: "retired garden", owner: member) }
before { visit member_gardens_path(member_slug: member.slug) }
it "show active garden" do
expect(page).to have_text active_garden.name
end
it "does not show inactive garden" do
expect(page).to have_no_text inactive_garden.name
end
it "links to active garden" do
open_all_gardens
expect(page).to have_link("Open #{active_garden.name} ›", href: garden_path(active_garden))
end
it "does not link to inactive gardens" do
open_all_gardens
expect(page).to have_no_link("Open #{inactive_garden.name} ›", href: garden_path(inactive_garden))
end
it "no longer has an include in-active tickbox, but links to the inactive gardens" do
expect(page).to have_no_text 'include in-active'
expect(page).to have_text 'Gardens no longer in use'
expect(page).to have_link 'Inactive gardens', href: member_inactive_gardens_path(member)
end
end
context 'with plantings' do
let(:maize) { create(:maize) }
let(:tomato) { create(:tomato) }
let!(:planting) do
create(:planting, owner: member, crop: maize, garden: member.gardens.first)
end
let!(:finished_planting) do
create(:finished_planting, owner: member, crop: tomato, garden: member.gardens.first)
end
before do
visit member_gardens_path(member_slug: member.slug)
end
it "shows planting in garden, as a chip whose menu leads to it" do
expect(page).to have_css('.chip', text: planting.crop.name)
click_link "Actions for #{planting.crop.name}"
expect(page).to have_link('View', href: planting_path(planting))
end
it "does not show finished planting" do
expect(page).to have_no_text(finished_planting.crop.name)
end
end
end
describe 'badges' do
let(:garden) { member.gardens.first }
let(:member) { create(:member, login_name: 'robbieburns') }
let(:crop) { create(:crop) }
before do
# time to harvest = 50 day
# time to finished = 90 days
create(:harvest,
harvested_at: 50.days.ago,
crop:,
planting: create(:planting,
crop:,
planted_at: 100.days.ago,
finished_at: 10.days.ago))
crop.plantings.each(&:update_harvest_days!)
crop.update_lifespan_medians
crop.update_harvest_medians
garden.update! name: 'super awesome garden'
assert planting
visit member_gardens_path(member_slug: member.slug)
end
describe 'harvest still growing' do
let!(:planting) do
create(:planting,
crop:,
owner: member,
garden:,
planted_at: Time.zone.today)
end
it { expect(page).to have_link href: planting_path(planting) }
it { expect(page).to have_link href: garden_path(planting.garden) }
it { expect(page).to have_text '7 weeks' }
it { expect(page).to have_no_text 'harvesting now' }
end
describe 'harvesting now' do
let!(:planting) do
create(:planting,
crop:,
owner: member, garden:,
planted_at: 51.days.ago)
end
it { expect(crop.median_days_to_first_harvest).to eq 50 }
it { expect(crop.median_lifespan).to eq 90 }
it { expect(page).to have_text 'harvesting now' }
it { expect(page).to have_no_text 'Predicted weeks until harvest' }
end
describe 'super late' do
let!(:planting) do
create(:planting,
crop:, owner: member,
garden:, planted_at: 260.days.ago)
end
it { expect(page).to have_text 'super late' }
it { expect(page).to have_no_text 'harvesting now' }
it { expect(page).to have_no_text 'Predicted weeks until harvest' }
it { expect(page).to have_no_text 'Predicted weeks until planting is finished' }
end
end
end