Skip to content
Extraits de code Groupes Projets
photo_spec.rb 3,89 ko
Newer Older
  • Learn to ignore specific revisions
  • Raphael's avatar
    Raphael a validé
    #   Copyright (c) 2010, Diaspora Inc.  This file is
    
    Raphael's avatar
    Raphael a validé
    #   licensed under the Affero General Public License version 3 or later.  See
    
    Raphael's avatar
    Raphael a validé
    #   the COPYRIGHT file.
    
    require 'spec_helper'
    
    Raphael's avatar
    Raphael a validé
    
    describe Photo do
    
    Raphael's avatar
    Raphael a validé
      before do
        @user = Factory.create(:user)
    
    Raphael's avatar
    Raphael a validé
        @aspect = @user.aspect(:name => "losers")
        @album = @user.post :album, :name => "foo", :to => @aspect.id
    
        @fixture_filename = 'button.png'
    
        @fixture_name = File.join(File.dirname(__FILE__), '..', 'fixtures', @fixture_filename)
        @fail_fixture_name = File.join(File.dirname(__FILE__), '..', 'fixtures', 'msg.xml')
    
        @photo = Photo.new(:person => @user.person, :album => @album)
    
    Raphael's avatar
    Raphael a validé
      end
    
    ilya's avatar
    ilya a validé
    
    
      it 'has a constructor' do
    
        image = File.open(@fixture_name)
    
        photo = Photo.instantiate(
                  :person => @user.person, :album => @album, :user_file => image)
    
        photo.created_at.nil?.should be false
    
    ilya's avatar
    ilya a validé
        photo.image.read.nil?.should be false
      end
    
    
    Raphael's avatar
    Raphael a validé
      it 'should save a photo' do
    
    ilya's avatar
    ilya a validé
        @photo.image.store! File.open(@fixture_name)
    
        @photo.save.should == true
    
    Raphael's avatar
    Raphael a validé
        begin
          binary = @photo.image.read.force_encoding('BINARY')
          fixture_binary = File.open(@fixture_name).read.force_encoding('BINARY')
        rescue NoMethodError # Ruby 1.8 doesn't have force_encoding
          binary = @photo.image.read
          fixture_binary = File.open(@fixture_name).read
        end
    
    Raphael's avatar
    Raphael a validé
        binary.should == fixture_binary
      end
    
        photo = Photo.new(:person => @user.person)
    
    ilya's avatar
    ilya a validé
        photo.image = File.open(@fixture_name)
    
        photo.save
        photo.valid?.should be false
    
        photo.album = Album.create(:name => "foo", :person => @user.person)
    
        photo.save
        Photo.first.album.name.should == 'foo'
      end
    
    
      it 'should have a caption' do
        @photo.image.store! File.open(@fixture_name)
        @photo.caption = "cool story, bro"
    
    Raphael's avatar
    Raphael a validé
        @photo.save.should be_true
    
      it 'should remove its reference in user profile if it is referred' do
        @photo.image.store! File.open(@fixture_name)
        @photo.save
    
        @user.profile.image_url = @photo.image.url(:thumb_medium)
        @user.save
    
        @user.person.save
    
    Raphael's avatar
    Raphael a validé
        @user.profile.image_url.should == @photo.image.url(:thumb_medium)
    
        @user.reload.profile.image_url.should be nil
    
      it 'should not use the imported filename as the url' do
        @photo.image.store! File.open(@fixture_name)
        @photo.image.url.include?(@fixture_filename).should be false
    
        @photo.image.url(:thumb_medium).include?("/" + @fixture_filename).should be false
    
      describe 'non-image files' do
        it 'should not store' do
          file = File.open(@fail_fixture_name)
          @photo.image.should_receive(:check_whitelist!)
          lambda {
            @photo.image.store! file
          }.should raise_error
        end
    
    Raphael's avatar
    Raphael a validé
    
      end
    
      describe 'remote photos' do
    
        it 'should write the url on serialization' do
    
          @photo.image = File.open(@fixture_name)
    
    ilya's avatar
    ilya a validé
          @photo.image.store!
          @photo.save
    
          xml = @photo.to_xml.to_s
    
    maxwell's avatar
    maxwell a validé
    
    
          xml.include?(@photo.image.url).should be true
    
        it 'should have an album id on serialization' do
    
          @photo.image.store! File.open(@fixture_name)
    
          xml = @photo.to_xml.to_s
    
          xml.include?(@photo.album_id.to_s).should be true
    
    
        it 'should set the remote_photo on marshalling' do
    
          pending "did the socket get unstubbed?"
    
          @photo.image.store! File.open(@fixture_name)
    
    
    
          #security hax
          user2 = Factory.create(:user)
          aspect2 = user2.aspect(:name => "foobars")
          friend_users(@user, @aspect, user2, aspect2)
          @photo.person = user2.person
    
    
    ilya's avatar
    ilya a validé
          url = @photo.url
          thumb_url = @photo.url :thumb_medium
    
    
          xml = @photo.to_diaspora_xml
          id = @photo.id
    
          @photo.destroy
    
    ilya's avatar
    ilya a validé
          @user.receive xml, @photo.person
    
          new_photo = Photo.first(:id => id)
          new_photo.url.nil?.should be false
    
    ilya's avatar
    ilya a validé
          new_photo.url.include?(url).should be true
          new_photo.url(:thumb_medium).include?(thumb_url).should be true
    
    Raphael's avatar
    Raphael a validé
    end