mirror of
https://github.com/Growstuff/growstuff.git
synced 2025-12-24 01:57:46 -05:00
226 lines
8.3 KiB
Ruby
226 lines
8.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
describe PhotosController, :search do
|
|
login_member
|
|
|
|
describe 'GET index' do
|
|
describe 'all photos' do
|
|
let!(:photo) { FactoryBot.create(:photo, :reindex) }
|
|
|
|
before do
|
|
Photo.reindex
|
|
get :index
|
|
end
|
|
|
|
it "finds photos" do
|
|
expect(assigns(:photos).count).to eq 1
|
|
expect(assigns(:photos).first.id).to eq photo.id
|
|
end
|
|
end
|
|
|
|
describe '#index crop photos' do
|
|
let!(:photo) { FactoryBot.create(:photo, :reindex, owner: member, title: 'no assocations photo') }
|
|
let!(:crop_photo) { FactoryBot.create(:photo, :reindex, owner: member, title: 'photos of planting') }
|
|
let!(:planting) { FactoryBot.create(:planting, :reindex, crop:, owner: member) }
|
|
let!(:crop) { FactoryBot.create(:crop, :reindex) }
|
|
|
|
before do
|
|
planting.photos << crop_photo
|
|
Photo.reindex
|
|
get :index, params: { crop_slug: crop.to_param }
|
|
end
|
|
|
|
describe "find photos by crop" do
|
|
it "has indexed the photos of this crop" do
|
|
expect(Photo.search).to include crop_photo
|
|
end
|
|
|
|
it "assigns crop" do
|
|
expect(assigns(:crop)).to eq crop
|
|
end
|
|
|
|
it { expect(assigns(:photos).size).to eq 1 }
|
|
it { expect(assigns(:photos).first.crops).to include crop.id }
|
|
it { expect(assigns(:photos).first.id).to eq crop_photo.id }
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "GET new" do
|
|
let(:tomato) { FactoryBot.create(:tomato) }
|
|
let(:planting) { FactoryBot.create(:planting, crop: tomato, owner: member) }
|
|
let(:garden) { FactoryBot.create(:garden, owner: member) }
|
|
let(:harvest) { FactoryBot.create(:harvest, owner: member) }
|
|
let(:member) { FactoryBot.create(:member) }
|
|
let!(:auth) { FactoryBot.create(:flickr_authentication, member:) }
|
|
|
|
before do
|
|
sign_in member
|
|
member.stub(:flickr_photos) { [[], 0] }
|
|
member.stub(:flickr_sets) { { "foo" => "bar" } }
|
|
controller.stub(:current_member) { member }
|
|
end
|
|
|
|
describe "planting photos" do
|
|
before { get :new, params: { type: "planting", id: planting.id } }
|
|
|
|
it { expect(assigns(:flickr_auth)).to be_an_instance_of(Authentication) }
|
|
it { expect(assigns(:item)).to eq planting }
|
|
it { expect(flash[:alert]).not_to be_present }
|
|
it { expect(flash[:alert]).not_to be_present }
|
|
end
|
|
|
|
describe "harvest photos" do
|
|
before { get :new, params: { type: "harvest", id: harvest.id } }
|
|
|
|
it { expect(assigns(:item)).to eq harvest }
|
|
it { expect(flash[:alert]).not_to be_present }
|
|
end
|
|
|
|
describe "garden photos" do
|
|
before { get :new, params: { type: "garden", id: garden.id } }
|
|
|
|
it { expect(assigns(:item)).to eq garden }
|
|
it { expect(flash[:alert]).not_to be_present }
|
|
end
|
|
end
|
|
|
|
describe "POST create" do
|
|
before do
|
|
Photo.any_instance.stub(:flickr_metadata).and_return(title: "A Heartbreaking work of staggering genius",
|
|
license_name: "CC-BY",
|
|
license_url: "http://example.com/aybpl",
|
|
thumbnail_url: "http://example.com/thumb.jpg",
|
|
fullsize_url: "http://example.com/full.jpg",
|
|
link_url: "http://example.com")
|
|
end
|
|
|
|
let(:member) { FactoryBot.create(:member) }
|
|
let(:garden) { FactoryBot.create(:garden, owner: member) }
|
|
let(:planting) { FactoryBot.create(:planting, garden:, owner: member) }
|
|
let(:harvest) { FactoryBot.create(:harvest, owner: member) }
|
|
let(:photo) { FactoryBot.create(:photo, owner: member) }
|
|
|
|
describe "with valid params" do
|
|
before { controller.stub(:current_member) { member } }
|
|
|
|
describe "attaches the photo to a planting" do
|
|
before do
|
|
post :create, params: {
|
|
photo: { source_id: photo.source_id, source: 'flickr' },
|
|
type: "planting", id: planting.id
|
|
}
|
|
end
|
|
|
|
it { expect(flash[:alert]).not_to be_present }
|
|
it { expect(Photo.last.plantings.first).to eq planting }
|
|
end
|
|
|
|
describe "doesn't attach a photo to a planting twice" do
|
|
before do
|
|
post :create, params: {
|
|
photo: { source_id: photo.source_id, source: 'flickr' }, type: "planting", id: planting.id
|
|
}
|
|
post :create, params: {
|
|
photo: { source_id: photo.source_id, source: 'flickr' }, type: "planting", id: planting.id
|
|
}
|
|
end
|
|
|
|
it { expect(flash[:alert]).not_to be_present }
|
|
it { expect(Photo.last.plantings.size).to eq 1 }
|
|
end
|
|
|
|
it "attaches the photo to a harvest" do
|
|
post :create, params: { photo: { source_id: photo.source_id, source: 'flickr' }, type: "harvest", id: harvest.id }
|
|
expect(flash[:alert]).not_to be_present
|
|
Photo.last.harvests.first.should eq harvest
|
|
end
|
|
|
|
describe "doesn't attach a photo to a harvest twice" do
|
|
before do
|
|
post :create, params: {
|
|
photo: { source_id: photo.source_id, source: 'flickr' }, type: "harvest", id: harvest.id
|
|
}
|
|
post :create, params: {
|
|
photo: { source_id: photo.source_id, source: 'flickr' }, type: "harvest", id: harvest.id
|
|
}
|
|
end
|
|
|
|
it { expect(flash[:alert]).not_to be_present }
|
|
it { expect(Photo.last.harvests.size).to eq 1 }
|
|
end
|
|
|
|
it "doesn't attach photo to a comment" do
|
|
comment = FactoryBot.create(:comment)
|
|
expect do
|
|
post :create, params: {
|
|
photo: { source_id: photo.source_id, source: 'flickr' }, type: "comment", id: comment.id
|
|
}
|
|
end.to raise_error 'Photos not supported'
|
|
end
|
|
end
|
|
|
|
describe "for the second time" do
|
|
let(:planting) { FactoryBot.create(:planting, owner: member) }
|
|
let(:valid_params) { { photo: { source_id: 1 }, id: planting.id, type: 'planting' } }
|
|
|
|
it "does not add a photo twice" do
|
|
expect { post :create, params: valid_params }.to change(Photo, :count).by(1)
|
|
expect { post :create, params: valid_params }.not_to change(Photo, :count)
|
|
end
|
|
end
|
|
|
|
describe "with matching owners" do
|
|
before { controller.stub(:current_member) { member } }
|
|
|
|
describe "creates the planting/photo link" do
|
|
let(:planting) { FactoryBot.create(:planting, garden:, owner: member) }
|
|
let(:photo) { FactoryBot.create(:photo, owner: member) }
|
|
|
|
before { post :create, params: { photo: { source_id: photo.source_id, source: 'flickr' }, type: "planting", id: planting.id } }
|
|
|
|
it { expect(flash[:alert]).not_to be_present }
|
|
it { expect(Photo.last.plantings.first).to eq planting }
|
|
end
|
|
|
|
describe "creates the harvest/photo link" do
|
|
before do
|
|
post :create, params: { photo: { source_id: photo.source_id, source: 'flickr' }, type: "harvest", id: harvest.id }
|
|
end
|
|
|
|
it { expect(flash[:alert]).not_to be_present }
|
|
it { expect(Photo.last.harvests.first).to eq harvest }
|
|
end
|
|
end
|
|
|
|
describe "with mismatched owners" do
|
|
let(:photo) { FactoryBot.create(:photo) }
|
|
|
|
it "does not create the planting/photo link" do
|
|
# members will be auto-created, and different
|
|
another_planting = FactoryBot.create(:planting)
|
|
expect do
|
|
post :create, params: {
|
|
photo: { source_id: photo.source_id, source: 'flickr' },
|
|
type: "planting", id: another_planting.id
|
|
}
|
|
end.to raise_error(ActiveRecord::RecordInvalid)
|
|
expect(Photo.last.plantings.first).not_to eq another_planting
|
|
end
|
|
|
|
it "does not create the harvest/photo link" do
|
|
# members will be auto-created, and different
|
|
another_harvest = FactoryBot.create(:harvest)
|
|
expect do
|
|
post :create, params: {
|
|
photo: { source_id: photo.source_id, source: 'flickr' }, type: "harvest", id: another_harvest.id
|
|
}
|
|
end.to raise_error(ActiveRecord::RecordInvalid)
|
|
expect(Photo.last.harvests.first).not_to eq another_harvest
|
|
end
|
|
end
|
|
end
|
|
end
|