+ attachment model specs (create, delete)

pull/2412/head
Markus Kahl 10 years ago
parent 1e9f40587b
commit fb3a09a93c
  1. 24
      spec/factories/file_factory.rb
  2. 67
      spec/models/attachment_spec.rb

@ -40,4 +40,28 @@ FactoryGirl.define do
new "#{Rails.root}/spec/fixtures/files/#{name}"
end
end
factory :uploaded_file, class: Rack::Multipart::UploadedFile do
skip_create
name 'test.txt'
content 'test content'
content_type 'text/plain'
binary false
initialize_with do
OpenProject::Files.create_uploaded_file(
name: name,
content: content,
content_type: content_type,
binary: binary)
end
factory :uploaded_jpg do
name 'test.jpg'
content "\xFF\xD8\xFF\xE0\u0000\u0010JFIF\u0000\u0001\u0001\u0001\u0000H"
content_type 'image/jpeg'
binary true
end
end
end

@ -28,15 +28,20 @@
require 'spec_helper'
describe Attachment, type: :model do
let(:author) { FactoryGirl.create(:user) }
let(:author) { FactoryGirl.create :user }
let(:long_description) { 'a' * 300 }
let(:work_package) { FactoryGirl.create(:work_package, description: '') }
let(:attachment) {
FactoryGirl.build(:attachment,
author: author,
container: work_package,
filename: 'foo.jpg')
}
let(:work_package) { FactoryGirl.create :work_package, description: '' }
let(:file) { FactoryGirl.create :uploaded_jpg, name: 'test.jpg' }
let(:attachment) do
FactoryGirl.build(
:attachment,
author: author,
container: work_package,
content_type: nil, # so that it is detected
file: file)
end
describe 'create' do
context :save do
before do
@ -52,15 +57,29 @@ describe Attachment, type: :model do
expect(attachment.errors.full_messages[0]).to include I18n.t('activerecord.errors.messages.too_long', count: 255)
end
end
it('should create a jpg file called test') do
expect(File.exists?(attachment.diskfile.path)).to eq true
end
it('have the content type "image/jpeg"') do
expect(attachment.content_type).to eq 'image/jpeg'
end
context 'with wrong content-type' do
let(:file) { FactoryGirl.create :uploaded_jpg, content_type: 'text/html' }
it 'should detect the correct content-type' do
expect(attachment.content_type).to eq 'image/jpeg'
end
end
end
describe 'update' do
let!(:attachment) {
FactoryGirl.create(:attachment,
author: author,
container: work_package,
filename: 'foo.jpg')
}
before do
attachment.save!
end
context :update do
before do
attachment.description = long_description
@ -76,4 +95,24 @@ describe Attachment, type: :model do
end
end
end
##
# The tests assumes the default, file-based storage is configured and tests against that.
# I.e. it does not test fog attachments being deleted from the cloud storage (such as S3).
describe 'destroy' do
before do
attachment.save!
expect(File.exists?(attachment.file.path)).to eq true
attachment.destroy
attachment.run_callbacks(:commit)
# triggering after_commit callbacks manually as they are not triggered during rspec runs
# though in dev/production mode destroy does trigger these callbacks
end
it "deletes the attachment's file" do
expect(File.exists?(attachment.file.path)).to eq false
end
end
end

Loading…
Cancel
Save