diaspora/spec/controllers/photos_controller_spec.rb
2011-01-17 19:34:33 -08:00

146 lines
4.3 KiB
Ruby

# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
require 'spec_helper'
describe PhotosController do
render_views
let(:user1) {Factory.create(:user)}
let(:user2) {Factory.create(:user)}
let(:aspect1) { user1.aspects.create(:name => 'winners') }
let(:aspect2) { user2.aspects.create(:name => 'winners') }
let(:filename) { 'button.png' }
let(:fixture_name) { File.join(File.dirname(__FILE__), '..', 'fixtures', filename) }
let(:photo1) { user1.post(:photo, :user_file => File.open(fixture_name), :to => aspect1.id) }
let(:photo2) { user2.post(:photo, :user_file => File.open(fixture_name), :to => aspect2.id) }
before do
connect_users(user1, aspect1, user2, aspect2)
photo1; photo2
@controller.stub!(:current_user).and_return(user1)
sign_in :user, user1
end
it 'has working context' do
photo1.url.should_not be_nil
Photo.find(photo1.id).url.should_not be_nil
photo2.url.should_not be_nil
Photo.find(photo2.id).url.should_not be_nil
end
describe '#create' do
before do
@controller.stub!(:file_handler).and_return(File.open(fixture_name))
@params = {:photo => {:user_file => File.open(fixture_name), :aspect_ids => "all"} }
end
it 'can make a photo' do
lambda {
post :create, @params
}.should change(Photo, :count).by(1)
end
it 'can set the photo as the profile photo' do
old_url = user1.person.profile.image_url
@params[:photo][:set_profile_photo] = true
post :create, @params
user1.reload.person.profile.image_url.should_not == old_url
end
end
describe '#index' do
it "displays the logged in user's pictures" do
get :index, :person_id => user1.person.id.to_s
assigns[:person].should == user1.person
assigns[:posts].should == [photo1]
end
it "displays another person's pictures" do
get :index, :person_id => user2.person.id.to_s
assigns[:person].should == user2.person
assigns[:posts].should == [photo2]
end
end
describe '#show' do
it 'assigns the photo based on the photo id' do
get :show, :id => photo1.id
response.status.should == 200
assigns[:photo].should == photo1
assigns[:ownership].should be_true
end
it "renders a show page for another user's photo" do
get :show, :id => photo2.id
response.status.should == 200
assigns[:photo].should == photo2
assigns[:ownership].should be_false
end
end
describe '#edit' do
it 'lets the user edit a photo' do
get :edit, :id => photo1.id
response.status.should == 200
end
it 'does not let the user edit a photo that is not his' do
get :edit, :id => photo2.id
response.should redirect_to(:action => :index, :person_id => user1.person.id.to_s)
end
end
describe '#destroy' do
it 'allows the user to delete his photos' do
delete :destroy, :id => photo1.id
Photo.find_by_id(photo1.id).should be_nil
end
it 'will not let you destory posts you do not own' do
delete :destroy, :id => photo2.id
Photo.find_by_id(photo2.id).should be_true
end
end
describe "#update" do
it "updates the caption of a photo" do
put :update, :id => photo1.id, :photo => { :caption => "now with lasers!" }
photo1.reload.caption.should == "now with lasers!"
end
it "doesn't overwrite random attributes" do
new_user = Factory.create(:user)
params = { :caption => "now with lasers!", :person_id => new_user.id }
put :update, :id => photo1.id, :photo => params
photo1.reload.person_id.should == user1.person.id
end
it 'redirects if you do not have access to the post' do
params = { :caption => "now with lasers!" }
put :update, :id => photo2.id, :photo => params
response.should redirect_to(:action => :index, :person_id => user1.person.id.to_s)
end
end
describe "#make_profile_photo" do
it 'should return a 201 on a js success' do
get :make_profile_photo, :photo_id => photo1.id, :format => 'js'
response.code.should == "201"
end
it 'should return a 406 on failure' do
get :make_profile_photo, :photo_id => photo2.id
response.code.should == "406"
end
end
end