mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-07-30 09:17:44 -04:00
* Bump actions/cache from 5 to 6 Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/cache dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> * Bump axe-core-rspec from 4.11.3 to 4.12.0 Bumps [axe-core-rspec](https://github.com/dequelabs/axe-core-gems) from 4.11.3 to 4.12.0. - [Release notes](https://github.com/dequelabs/axe-core-gems/releases) - [Changelog](https://github.com/dequelabs/axe-core-gems/blob/develop/CHANGELOG.md) - [Commits](https://github.com/dequelabs/axe-core-gems/compare/v4.11.3...v4.12.0) --- updated-dependencies: - dependency-name: axe-core-rspec dependency-version: 4.12.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Merge pull request #4683 from Growstuff/refactor-harvests-remove-elasticsearch-14630838429921835504 Refactor harvests to remove Elasticsearch * Refactor Seeds to remove Elasticsearch dependency (#4684) * Refactor Seeds to remove Elasticsearch dependency This commit refactors the `SeedsController` and `Seed` model to remove dependency on Elasticsearch and Searchkick. Key changes: - Removed `SearchSeeds` concern from the `Seed` model. - Reimplemented `Seed.homepage_records` using ActiveRecord. - Refactored `SeedsController#index` to use ActiveRecord for filtering, eager loading, and pagination. - Deleted `app/models/concerns/search_seeds.rb`. - Updated relevant specs to remove Searchkick-specific tags and setup. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> * Remove Seed.reindex * Remove trait * Fix tests --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> * Refactor Plantings to remove Elasticsearch dependency (#4686) * Refactor Plantings to remove Elasticsearch dependency This commit refactors the Plantings controller, model, and views to use ActiveRecord instead of Searchkick/Elasticsearch. Key changes: - Refactored `PlantingsController#index` to use an ActiveRecord-based `plantings` method. - Moved `homepage_records` logic from `SearchPlantings` concern to the `Planting` model using ActiveRecord scopes. - Removed `SearchPlantings` concern and deleted the file. - Updated `home/_plantings.html.haml` and `plantings/index.rss.haml` to use dot notation for `Planting` object attributes. - Updated specs to remove Searchkick-related setup and assertions. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> * Fix Planting.reindex * Fix test * Mark test pending --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> * Fix plantings ICS feed regression and enable request spec (#4687) * Fix plantings ICS feed regression and enable request spec - Update `app/views/plantings/index.ics.erb` to use ActiveRecord method calls instead of hash bracket access. - Enable `spec/requests/plantings_spec.rb` and update it to account for mirrored harvest events. - Add `config/initializers/faraday_patch.rb` to fix Searchkick/Faraday 2.x compatibility issues. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> * Delete config/initializers/faraday_patch.rb * Apply suggestion from @CloCkWeRX * Apply suggestions from code review Co-authored-by: Daniel O'Connor <daniel.oconnor@gmail.com> * Apply suggestion from @CloCkWeRX --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> * Block Semrush crawler in Rack Attack initializer Added a blocklist entry for the Semrush crawler to prevent abusive requests. * Bump sitemap_generator from 6.3.0 to 7.0.2 Bumps [sitemap_generator](https://github.com/kjvarga/sitemap_generator) from 6.3.0 to 7.0.2. - [Changelog](https://github.com/kjvarga/sitemap_generator/blob/master/CHANGES.md) - [Commits](https://github.com/kjvarga/sitemap_generator/compare/v6.3.0...v7.0.2) --- updated-dependencies: - dependency-name: sitemap_generator dependency-version: 7.0.2 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> * Bump carrierwave from 3.0.7 to 3.1.3 Bumps [carrierwave](https://github.com/carrierwaveuploader/carrierwave) from 3.0.7 to 3.1.3. - [Release notes](https://github.com/carrierwaveuploader/carrierwave/releases) - [Changelog](https://github.com/carrierwaveuploader/carrierwave/blob/master/CHANGELOG.md) - [Commits](https://github.com/carrierwaveuploader/carrierwave/compare/v3.0.7...v3.1.3) --- updated-dependencies: - dependency-name: carrierwave dependency-version: 3.1.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * Bump rubocop from 1.88.0 to 1.88.1 (#4691) Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.88.0 to 1.88.1. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.88.0...v1.88.1) --- updated-dependencies: - dependency-name: rubocop dependency-version: 1.88.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump sitemap_generator from 7.0.2 to 7.0.3 (#4692) Bumps [sitemap_generator](https://github.com/kjvarga/sitemap_generator) from 7.0.2 to 7.0.3. - [Changelog](https://github.com/kjvarga/sitemap_generator/blob/master/CHANGES.md) - [Commits](https://github.com/kjvarga/sitemap_generator/compare/v7.0.2...v7.0.3) --- updated-dependencies: - dependency-name: sitemap_generator dependency-version: 7.0.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump sitemap_generator from 7.0.3 to 7.1.0 Bumps [sitemap_generator](https://github.com/kjvarga/sitemap_generator) from 7.0.3 to 7.1.0. - [Changelog](https://github.com/kjvarga/sitemap_generator/blob/master/CHANGES.md) - [Commits](https://github.com/kjvarga/sitemap_generator/compare/v7.0.3...v7.1.0) --- updated-dependencies: - dependency-name: sitemap_generator dependency-version: 7.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Bump haml_lint from 0.74.0 to 0.75.0 (#4694) Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.74.0 to 0.75.0. - [Release notes](https://github.com/sds/haml-lint/releases) - [Changelog](https://github.com/sds/haml-lint/blob/main/CHANGELOG.md) - [Commits](https://github.com/sds/haml-lint/compare/v0.74.0...v0.75.0) --- updated-dependencies: - dependency-name: haml_lint dependency-version: 0.75.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump rubocop from 1.88.1 to 1.88.2 Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.88.1 to 1.88.2. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.88.1...v1.88.2) --- updated-dependencies: - dependency-name: rubocop dependency-version: 1.88.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Cesy <cesy.avon@gmail.com> Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
249 lines
8.4 KiB
Ruby
249 lines
8.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
describe HarvestsController do
|
|
login_member
|
|
|
|
def valid_attributes
|
|
{
|
|
owner_id: subject.current_member.id,
|
|
crop_id: create(:crop).id,
|
|
plant_part_id: create(:plant_part).id,
|
|
harvested_at: '2017-01-01'
|
|
}
|
|
end
|
|
|
|
describe "GET index" do
|
|
let!(:first_member) { create(:member) }
|
|
let(:second_member) { create(:member) }
|
|
let(:tomato) { create(:tomato) }
|
|
let(:maize) { create(:maize) }
|
|
let!(:tomato_harvest) { create(:harvest, owner_id: first_member.id, crop_id: tomato.id) }
|
|
let!(:maize_harvest) { create(:harvest, owner_id: second_member.id, crop_id: maize.id) }
|
|
|
|
describe "assigns all harvests as @harvests" do
|
|
before { get :index, params: {} }
|
|
|
|
it { expect(assigns(:harvests).size).to eq 2 }
|
|
it { expect(assigns(:harvests)).to include(tomato_harvest) }
|
|
it { expect(assigns(:harvests)).to include(maize_harvest) }
|
|
end
|
|
|
|
describe "picks up owner from params and shows owner's harvests only" do
|
|
before { get :index, params: { member_slug: first_member.slug } }
|
|
|
|
it { expect(assigns(:owner)).to eq first_member }
|
|
it { expect(assigns(:harvests).size).to eq 1 }
|
|
it { expect(assigns(:harvests)[0].slug).to eq tomato_harvest.slug }
|
|
end
|
|
|
|
describe "picks up crop from params and shows the harvests for the crop only" do
|
|
before { get :index, params: { crop_slug: maize.name } }
|
|
|
|
it { expect(assigns(:crop)).to eq maize }
|
|
it { expect(assigns(:harvests).size).to eq 1 }
|
|
it { expect(assigns(:harvests)[0].slug).to eq maize_harvest.slug }
|
|
end
|
|
|
|
describe "generates a csv" do
|
|
before { get :index, format: "csv" }
|
|
|
|
it { expect(response).to have_http_status :ok }
|
|
end
|
|
end
|
|
|
|
describe "GET show" do
|
|
let(:harvest) { Harvest.create! valid_attributes }
|
|
|
|
describe "assigns the requested harvest as @harvest" do
|
|
before { get :show, params: { slug: harvest.to_param } }
|
|
|
|
it { expect(assigns(:harvest)).to eq(harvest) }
|
|
end
|
|
end
|
|
|
|
describe "GET new" do
|
|
before { get :new, params: {} }
|
|
|
|
describe "assigns a new harvest as @harvest" do
|
|
it { expect(assigns(:harvest)).to be_a_new(Harvest) }
|
|
end
|
|
|
|
describe "sets the date of the harvest to today" do
|
|
it { expect(assigns(:harvest).harvested_at).to eq(Time.zone.today) }
|
|
end
|
|
end
|
|
|
|
describe "GET edit" do
|
|
let(:harvest) { Harvest.create! valid_attributes }
|
|
|
|
describe "assigns the requested harvest as @harvest" do
|
|
before { get :edit, params: { slug: harvest.to_param } }
|
|
|
|
it { expect(assigns(:harvest)).to eq(harvest) }
|
|
end
|
|
end
|
|
|
|
describe "POST create" do
|
|
describe "with valid params" do
|
|
it "creates a new Harvest" do
|
|
expect do
|
|
post :create, params: { harvest: valid_attributes }
|
|
end.to change(Harvest, :count).by(1)
|
|
end
|
|
|
|
describe "assigns a newly created harvest as @harvest" do
|
|
before { post :create, params: { harvest: valid_attributes } }
|
|
|
|
it { expect(assigns(:harvest)).to be_a(Harvest) }
|
|
it { expect(assigns(:harvest)).to be_persisted }
|
|
end
|
|
|
|
describe "redirects to the created harvest" do
|
|
before { post :create, params: { harvest: valid_attributes } }
|
|
|
|
it { expect(response).to redirect_to(Harvest.last) }
|
|
end
|
|
|
|
describe "links to planting" do
|
|
let(:planting) { create(:planting, owner_id: member.id, garden: member.gardens.first) }
|
|
|
|
before { post :create, params: { harvest: valid_attributes.merge(planting_id: planting.id) } }
|
|
|
|
it { expect(Harvest.last.planting.id).to eq(planting.id) }
|
|
end
|
|
|
|
describe "updates planting rating" do
|
|
let(:planting) { create(:planting, owner_id: member.id, garden: member.gardens.first) }
|
|
|
|
it "updates the planting rating when provided" do
|
|
post :create, params: {
|
|
harvest: valid_attributes.merge(
|
|
planting_id: planting.id,
|
|
crop_id: planting.crop_id,
|
|
overall_rating: 4
|
|
)
|
|
}
|
|
expect(planting.reload.overall_rating).to eq(4)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "with invalid params" do
|
|
it "assigns a newly created but unsaved harvest as @harvest" do
|
|
# Trigger the behavior that occurs when invalid params are submitted
|
|
Harvest.any_instance.stub(:save).and_return(false)
|
|
post :create, params: { harvest: { "crop_id" => "invalid value" } }
|
|
expect(assigns(:harvest)).to be_a_new(Harvest)
|
|
end
|
|
|
|
describe "re-renders the 'new' template" do
|
|
# Trigger the behavior that occurs when invalid params are submitted
|
|
before { post :create, params: { harvest: { "crop_id" => "invalid value" } } }
|
|
|
|
it { expect(response).to render_template("new") }
|
|
end
|
|
end
|
|
|
|
describe "not my planting" do
|
|
let(:not_my_planting) { create(:planting) }
|
|
let(:harvest) { create(:harvest) }
|
|
|
|
describe "does not save planting_id" do
|
|
before do
|
|
allow(Harvest).to receive(:new).and_return(harvest)
|
|
post :create, params: { harvest: valid_attributes.merge(planting_id: not_my_planting.id) }
|
|
end
|
|
|
|
it { expect(harvest.planting_id).not_to eq(not_my_planting.id) }
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "PUT update" do
|
|
describe "with valid params" do
|
|
let(:harvest) { Harvest.create! valid_attributes }
|
|
|
|
it "updates the requested harvest" do
|
|
new_crop = create(:crop)
|
|
expect do
|
|
put :update, params: { slug: harvest.to_param, harvest: { crop_id: new_crop.id } }
|
|
harvest.reload
|
|
end.to change(harvest, :crop_id).to(new_crop.id)
|
|
end
|
|
|
|
describe "assigns the requested harvest as @harvest" do
|
|
before { put :update, params: { slug: harvest.to_param, harvest: valid_attributes } }
|
|
|
|
it { expect(assigns(:harvest)).to eq(harvest) }
|
|
end
|
|
|
|
describe "redirects to the harvest" do
|
|
before { put :update, params: { slug: harvest.to_param, harvest: valid_attributes } }
|
|
|
|
it { expect(response).to redirect_to(harvest) }
|
|
end
|
|
|
|
describe "updates planting rating" do
|
|
let(:planting) { create(:planting, owner_id: member.id, garden: member.gardens.first) }
|
|
let(:harvest) do
|
|
create(:harvest, valid_attributes.merge(planting_id: planting.id, crop_id: planting.crop_id))
|
|
end
|
|
|
|
it "updates the planting rating when provided" do
|
|
put :update, params: { slug: harvest.to_param, harvest: { overall_rating: 3 } }
|
|
expect(planting.reload.overall_rating).to eq(3)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "with invalid params" do
|
|
it "assigns the harvest as @harvest" do
|
|
harvest = Harvest.create! valid_attributes
|
|
# Trigger the behavior that occurs when invalid params are submitted
|
|
Harvest.any_instance.stub(:save).and_return(false)
|
|
put :update, params: { slug: harvest.to_param, harvest: { "crop_id" => "invalid value" } }
|
|
expect(assigns(:harvest)).to eq(harvest)
|
|
end
|
|
|
|
it "re-renders the 'edit' template" do
|
|
harvest = Harvest.create! valid_attributes
|
|
put :update, params: { slug: harvest.to_param, harvest: { "crop_id" => "invalid value" } }
|
|
expect(response).to render_template("edit")
|
|
end
|
|
end
|
|
|
|
describe "not my planting" do
|
|
let(:not_my_planting) { create(:planting) }
|
|
let(:harvest) { create(:harvest) }
|
|
|
|
describe "does not save planting_id" do
|
|
before do
|
|
put :update, params: {
|
|
slug: harvest.to_param,
|
|
harvest: valid_attributes.merge(planting_id: not_my_planting.id)
|
|
}
|
|
end
|
|
|
|
it { expect(harvest.planting_id).to be_nil }
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "DELETE destroy" do
|
|
it "destroys the requested harvest" do
|
|
harvest = Harvest.create! valid_attributes
|
|
expect do
|
|
delete :destroy, params: { slug: harvest.to_param }
|
|
end.to change(Harvest, :count).by(-1)
|
|
end
|
|
|
|
it "redirects to the harvests list" do
|
|
harvest = Harvest.create! valid_attributes
|
|
delete :destroy, params: { slug: harvest.to_param }
|
|
expect(response).to redirect_to(harvests_url)
|
|
end
|
|
end
|
|
end
|