mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-10-30 10:49:03 -04:00
161 lines
5.0 KiB
Ruby
161 lines
5.0 KiB
Ruby
# 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
|