radiant-page_attachments-extension 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/LICENSE +20 -0
- data/README.md +129 -0
- data/Rakefile +57 -0
- data/VERSION +1 -0
- data/app/models/observe_page_attachments.rb +5 -0
- data/app/models/page_attachment.rb +28 -0
- data/app/models/page_attachment_associations.rb +20 -0
- data/app/models/page_attachment_tags.rb +261 -0
- data/app/models/page_attachments_interface.rb +19 -0
- data/app/views/admin/pages/_attachment.html.haml +12 -0
- data/app/views/admin/pages/_attachments_box.html.haml +12 -0
- data/db/migrate/001_create_page_attachments_extension_schema.rb +22 -0
- data/db/migrate/002_add_page_attachments_fields.rb +23 -0
- data/features/attachments.feature +42 -0
- data/features/step_definitions/attachment_steps.rb +61 -0
- data/features/support/env.rb +57 -0
- data/features/support/paths.rb +14 -0
- data/lib/difference_test_helper.rb +20 -0
- data/lib/radiant-page_attachments-extension.rb +0 -0
- data/lib/tasks/page_attachments_extension_tasks.rake +28 -0
- data/page_attachments_extension.rb +27 -0
- data/public/images/admin/drag_order.png +0 -0
- data/public/javascripts/admin/page_attachments.js +30 -0
- data/public/stylesheets/admin/page_attachments.css +133 -0
- data/radiant-page_attachments-extension.gemspec +139 -0
- data/spec/controllers/pages_controller_spec.rb +10 -0
- data/spec/datasets/page_attachments_dataset.rb +31 -0
- data/spec/fixtures/foo.txt +1 -0
- data/spec/fixtures/rails.png +0 -0
- data/spec/models/observe_page_attachments_spec.rb +14 -0
- data/spec/models/page_attachment_spec.rb +18 -0
- data/spec/models/page_attachment_tags_spec.rb +172 -0
- data/spec/models/page_spec.rb +32 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +39 -0
- data/vendor/plugins/acts_as_list/README +23 -0
- data/vendor/plugins/acts_as_list/init.rb +3 -0
- data/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb +256 -0
- data/vendor/plugins/acts_as_list/test/list_test.rb +332 -0
- data/vendor/plugins/attachment_fu/CHANGELOG +35 -0
- data/vendor/plugins/attachment_fu/LICENSE +20 -0
- data/vendor/plugins/attachment_fu/README +193 -0
- data/vendor/plugins/attachment_fu/Rakefile +22 -0
- data/vendor/plugins/attachment_fu/amazon_s3.yml.tpl +17 -0
- data/vendor/plugins/attachment_fu/init.rb +16 -0
- data/vendor/plugins/attachment_fu/install.rb +7 -0
- data/vendor/plugins/attachment_fu/lib/geometry.rb +93 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/cloud_file_backend.rb +211 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/db_file_backend.rb +39 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/file_system_backend.rb +126 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/s3_backend.rb +394 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/core_image_processor.rb +59 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/gd2_processor.rb +54 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/image_science_processor.rb +61 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/mini_magick_processor.rb +132 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb +57 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb +514 -0
- data/vendor/plugins/attachment_fu/rackspace_cloudfiles.yml.tpl +14 -0
- data/vendor/plugins/attachment_fu/test/backends/db_file_test.rb +16 -0
- data/vendor/plugins/attachment_fu/test/backends/file_system_test.rb +143 -0
- data/vendor/plugins/attachment_fu/test/backends/remote/cloudfiles_test.rb +102 -0
- data/vendor/plugins/attachment_fu/test/backends/remote/s3_test.rb +119 -0
- data/vendor/plugins/attachment_fu/test/base_attachment_tests.rb +77 -0
- data/vendor/plugins/attachment_fu/test/basic_test.rb +70 -0
- data/vendor/plugins/attachment_fu/test/database.yml +18 -0
- data/vendor/plugins/attachment_fu/test/extra_attachment_test.rb +67 -0
- data/vendor/plugins/attachment_fu/test/fixtures/attachment.rb +226 -0
- data/vendor/plugins/attachment_fu/test/fixtures/files/fake/rails.png +0 -0
- data/vendor/plugins/attachment_fu/test/fixtures/files/foo.txt +1 -0
- data/vendor/plugins/attachment_fu/test/fixtures/files/rails.png +0 -0
- data/vendor/plugins/attachment_fu/test/geometry_test.rb +108 -0
- data/vendor/plugins/attachment_fu/test/processors/core_image_test.rb +37 -0
- data/vendor/plugins/attachment_fu/test/processors/gd2_test.rb +31 -0
- data/vendor/plugins/attachment_fu/test/processors/image_science_test.rb +31 -0
- data/vendor/plugins/attachment_fu/test/processors/mini_magick_test.rb +103 -0
- data/vendor/plugins/attachment_fu/test/processors/rmagick_test.rb +255 -0
- data/vendor/plugins/attachment_fu/test/schema.rb +134 -0
- data/vendor/plugins/attachment_fu/test/test_helper.rb +150 -0
- data/vendor/plugins/attachment_fu/test/validation_test.rb +55 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/color.rb +27 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/effects.rb +31 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/perspective.rb +25 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/quality.rb +25 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/scale.rb +47 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/watermark.rb +32 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/processor.rb +123 -0
- metadata +178 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
|
2
|
+
|
3
|
+
class DbFileTest < Test::Unit::TestCase
|
4
|
+
include BaseAttachmentTests
|
5
|
+
attachment_model Attachment
|
6
|
+
|
7
|
+
def test_should_call_after_attachment_saved(klass = Attachment)
|
8
|
+
attachment_model.saves = 0
|
9
|
+
assert_created do
|
10
|
+
upload_file :filename => '/files/rails.png'
|
11
|
+
end
|
12
|
+
assert_equal 1, attachment_model.saves
|
13
|
+
end
|
14
|
+
|
15
|
+
test_against_subclass :test_should_call_after_attachment_saved, Attachment
|
16
|
+
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
|
2
|
+
require 'digest/sha2'
|
3
|
+
|
4
|
+
class FileSystemTest < Test::Unit::TestCase
|
5
|
+
include BaseAttachmentTests
|
6
|
+
attachment_model FileAttachment
|
7
|
+
|
8
|
+
def test_filesystem_size_for_file_attachment(klass = FileAttachment)
|
9
|
+
attachment_model klass
|
10
|
+
assert_created 1 do
|
11
|
+
attachment = upload_file :filename => '/files/rails.png'
|
12
|
+
assert_equal attachment.size, File.open(attachment.full_filename).stat.size
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
test_against_subclass :test_filesystem_size_for_file_attachment, FileAttachment
|
17
|
+
|
18
|
+
def test_should_not_overwrite_file_attachment(klass = FileAttachment)
|
19
|
+
attachment_model klass
|
20
|
+
assert_created 2 do
|
21
|
+
real = upload_file :filename => '/files/rails.png'
|
22
|
+
assert_valid real
|
23
|
+
assert !real.new_record?, real.errors.full_messages.join("\n")
|
24
|
+
assert !real.size.zero?
|
25
|
+
|
26
|
+
fake = upload_file :filename => '/files/fake/rails.png'
|
27
|
+
assert_valid fake
|
28
|
+
assert !fake.size.zero?
|
29
|
+
|
30
|
+
assert_not_equal File.open(real.full_filename).stat.size, File.open(fake.full_filename).stat.size
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
test_against_subclass :test_should_not_overwrite_file_attachment, FileAttachment
|
35
|
+
|
36
|
+
def test_should_store_file_attachment_in_filesystem(klass = FileAttachment)
|
37
|
+
attachment_model klass
|
38
|
+
attachment = nil
|
39
|
+
assert_created do
|
40
|
+
attachment = upload_file :filename => '/files/rails.png'
|
41
|
+
assert_valid attachment
|
42
|
+
assert File.exists?(attachment.full_filename), "#{attachment.full_filename} does not exist"
|
43
|
+
end
|
44
|
+
attachment
|
45
|
+
end
|
46
|
+
|
47
|
+
test_against_subclass :test_should_store_file_attachment_in_filesystem, FileAttachment
|
48
|
+
|
49
|
+
def test_should_delete_old_file_when_updating(klass = FileAttachment)
|
50
|
+
attachment_model klass
|
51
|
+
attachment = upload_file :filename => '/files/rails.png'
|
52
|
+
old_filename = attachment.full_filename
|
53
|
+
assert_not_created do
|
54
|
+
use_temp_file 'files/rails.png' do |file|
|
55
|
+
attachment.filename = 'rails2.png'
|
56
|
+
attachment.temp_paths.unshift File.join(fixture_path, file)
|
57
|
+
attachment.save!
|
58
|
+
assert File.exists?(attachment.full_filename), "#{attachment.full_filename} does not exist"
|
59
|
+
assert !File.exists?(old_filename), "#{old_filename} still exists"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
test_against_subclass :test_should_delete_old_file_when_updating, FileAttachment
|
65
|
+
|
66
|
+
def test_should_delete_old_file_when_renaming(klass = FileAttachment)
|
67
|
+
attachment_model klass
|
68
|
+
attachment = upload_file :filename => '/files/rails.png'
|
69
|
+
old_filename = attachment.full_filename
|
70
|
+
assert_not_created do
|
71
|
+
attachment.filename = 'rails2.png'
|
72
|
+
attachment.save
|
73
|
+
assert File.exists?(attachment.full_filename), "#{attachment.full_filename} does not exist"
|
74
|
+
assert !File.exists?(old_filename), "#{old_filename} still exists"
|
75
|
+
assert !attachment.reload.size.zero?
|
76
|
+
assert_equal 'rails2.png', attachment.filename
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
test_against_subclass :test_should_delete_old_file_when_renaming, FileAttachment
|
81
|
+
|
82
|
+
def test_path_partitioning_works_on_integer_id(klass = FileAttachment)
|
83
|
+
attachment_model klass
|
84
|
+
|
85
|
+
# Create a random attachment object, doesn't matter what.
|
86
|
+
attachment = upload_file :filename => '/files/rails.png'
|
87
|
+
old_id = attachment.id
|
88
|
+
attachment.id = 1
|
89
|
+
|
90
|
+
begin
|
91
|
+
assert_equal ["0000", "0001", "bar.txt"], attachment.send(:partitioned_path, "bar.txt")
|
92
|
+
ensure
|
93
|
+
attachment.id = old_id
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
test_against_subclass :test_path_partitioning_works_on_integer_id, FileAttachment
|
98
|
+
|
99
|
+
def test_path_partitioning_with_string_id_works_by_generating_hash(klass = FileAttachmentWithStringId)
|
100
|
+
attachment_model klass
|
101
|
+
|
102
|
+
# Create a random attachment object, doesn't matter what.
|
103
|
+
attachment = upload_file :filename => '/files/rails.png'
|
104
|
+
old_id = attachment.id
|
105
|
+
attachment.id = "hello world some long string"
|
106
|
+
hash = Digest::SHA512.hexdigest("hello world some long string")
|
107
|
+
|
108
|
+
begin
|
109
|
+
assert_equal [
|
110
|
+
hash[0..31],
|
111
|
+
hash[32..63],
|
112
|
+
hash[64..95],
|
113
|
+
hash[96..127],
|
114
|
+
"bar.txt"
|
115
|
+
], attachment.send(:partitioned_path, "bar.txt")
|
116
|
+
ensure
|
117
|
+
attachment.id = old_id
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
test_against_subclass :test_path_partitioning_with_string_id_works_by_generating_hash, FileAttachmentWithStringId
|
122
|
+
|
123
|
+
def test_path_partition_string_id_hashing_is_turned_off_if_id_is_uuid(klass = FileAttachmentWithUuid)
|
124
|
+
attachment_model klass
|
125
|
+
|
126
|
+
# Create a random attachment object, doesn't matter what.
|
127
|
+
attachment = upload_file :filename => '/files/rails.png'
|
128
|
+
old_id = attachment.id
|
129
|
+
attachment.id = "0c0743b698483569dc65909a8cdb3bf9"
|
130
|
+
|
131
|
+
begin
|
132
|
+
assert_equal [
|
133
|
+
"0c0743b698483569",
|
134
|
+
"dc65909a8cdb3bf9",
|
135
|
+
"bar.txt"
|
136
|
+
], attachment.send(:partitioned_path, "bar.txt")
|
137
|
+
ensure
|
138
|
+
attachment.id = old_id
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
test_against_subclass :test_path_partition_string_id_hashing_is_turned_off_if_id_is_uuid, FileAttachmentWithUuid
|
143
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'test_helper'))
|
2
|
+
require 'net/http'
|
3
|
+
|
4
|
+
class CloudfilesTest < Test::Unit::TestCase
|
5
|
+
def self.test_CloudFiles?
|
6
|
+
true unless ENV["TEST_CLOUDFILES"] == "false"
|
7
|
+
end
|
8
|
+
|
9
|
+
if test_CloudFiles? && File.exist?(File.join(File.dirname(__FILE__), '../../rackspace_cloudfiles.yml'))
|
10
|
+
include BaseAttachmentTests
|
11
|
+
attachment_model CloudFilesAttachment
|
12
|
+
|
13
|
+
def test_should_create_correct_container_name(klass = CloudFilesAttachment)
|
14
|
+
attachment_model klass
|
15
|
+
attachment = upload_file :filename => '/files/rails.png'
|
16
|
+
assert_equal attachment.cloudfiles_config[:container_name], attachment.container_name
|
17
|
+
end
|
18
|
+
|
19
|
+
test_against_subclass :test_should_create_correct_container_name, CloudFilesAttachment
|
20
|
+
|
21
|
+
def test_should_create_default_path_prefix(klass = CloudFilesAttachment)
|
22
|
+
attachment_model klass
|
23
|
+
attachment = upload_file :filename => '/files/rails.png'
|
24
|
+
assert_equal File.join(attachment_model.table_name, attachment.attachment_path_id), attachment.base_path
|
25
|
+
end
|
26
|
+
|
27
|
+
test_against_subclass :test_should_create_default_path_prefix, CloudFilesAttachment
|
28
|
+
|
29
|
+
def test_should_create_custom_path_prefix(klass = CloudFilesWithPathPrefixAttachment)
|
30
|
+
attachment_model klass
|
31
|
+
attachment = upload_file :filename => '/files/rails.png'
|
32
|
+
assert_equal File.join('some/custom/path/prefix', attachment.attachment_path_id), attachment.base_path
|
33
|
+
end
|
34
|
+
|
35
|
+
test_against_subclass :test_should_create_custom_path_prefix, CloudFilesWithPathPrefixAttachment
|
36
|
+
|
37
|
+
|
38
|
+
def test_should_create_valid_url(klass = CloudFilesAttachment)
|
39
|
+
attachment_model klass
|
40
|
+
attachment = upload_file :filename => '/files/rails.png'
|
41
|
+
assert_match(%r!http://cdn.cloudfiles.mosso.com/(.*?)/cloud_files_attachments/1/rails.png!, attachment.cloudfiles_url)
|
42
|
+
end
|
43
|
+
|
44
|
+
test_against_subclass :test_should_create_valid_url, CloudFilesAttachment
|
45
|
+
|
46
|
+
def test_should_save_attachment(klass = CloudFilesAttachment)
|
47
|
+
attachment_model klass
|
48
|
+
assert_created do
|
49
|
+
attachment = upload_file :filename => '/files/rails.png'
|
50
|
+
assert_valid attachment
|
51
|
+
assert attachment.image?
|
52
|
+
assert !attachment.size.zero?
|
53
|
+
assert_kind_of Net::HTTPOK, http_response_for(attachment.cloudfiles_url)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
test_against_subclass :test_should_save_attachment, CloudFilesAttachment
|
58
|
+
|
59
|
+
def test_should_delete_attachment_from_cloud_files_when_attachment_record_destroyed(klass = CloudFilesAttachment)
|
60
|
+
attachment_model klass
|
61
|
+
attachment = upload_file :filename => '/files/rails.png'
|
62
|
+
|
63
|
+
urls = [attachment.cloudfiles_url] + attachment.thumbnails.collect(&:cloudfiles_url)
|
64
|
+
|
65
|
+
urls.each {|url| assert_kind_of Net::HTTPOK, http_response_for(url) }
|
66
|
+
attachment.destroy
|
67
|
+
urls.each do |url|
|
68
|
+
begin
|
69
|
+
http_response_for(url)
|
70
|
+
rescue Net::HTTPForbidden, Net::HTTPNotFound
|
71
|
+
nil
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
test_against_subclass :test_should_delete_attachment_from_cloud_files_when_attachment_record_destroyed, CloudFilesAttachment
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
protected
|
81
|
+
def http_response_for(url)
|
82
|
+
url = URI.parse(url)
|
83
|
+
Net::HTTP.start(url.host, url.port) {|http| http.request_head(url.path) }
|
84
|
+
end
|
85
|
+
|
86
|
+
def s3_protocol
|
87
|
+
Technoweenie::AttachmentFu::Backends::S3Backend.protocol
|
88
|
+
end
|
89
|
+
|
90
|
+
def s3_hostname
|
91
|
+
Technoweenie::AttachmentFu::Backends::S3Backend.hostname
|
92
|
+
end
|
93
|
+
|
94
|
+
def s3_port_string
|
95
|
+
Technoweenie::AttachmentFu::Backends::S3Backend.port_string
|
96
|
+
end
|
97
|
+
else
|
98
|
+
def test_flunk_s3
|
99
|
+
puts "s3 config file not loaded, tests not running"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'test_helper'))
|
2
|
+
require 'net/http'
|
3
|
+
|
4
|
+
class S3Test < Test::Unit::TestCase
|
5
|
+
def self.test_S3?
|
6
|
+
true unless ENV["TEST_S3"] == "false"
|
7
|
+
end
|
8
|
+
|
9
|
+
if test_S3? && File.exist?(File.join(File.dirname(__FILE__), '../../amazon_s3.yml'))
|
10
|
+
include BaseAttachmentTests
|
11
|
+
attachment_model S3Attachment
|
12
|
+
|
13
|
+
def test_should_create_correct_bucket_name(klass = S3Attachment)
|
14
|
+
attachment_model klass
|
15
|
+
attachment = upload_file :filename => '/files/rails.png'
|
16
|
+
assert_equal attachment.s3_config[:bucket_name], attachment.bucket_name
|
17
|
+
end
|
18
|
+
|
19
|
+
test_against_subclass :test_should_create_correct_bucket_name, S3Attachment
|
20
|
+
|
21
|
+
def test_should_create_default_path_prefix(klass = S3Attachment)
|
22
|
+
attachment_model klass
|
23
|
+
attachment = upload_file :filename => '/files/rails.png'
|
24
|
+
assert_equal File.join(attachment_model.table_name, attachment.attachment_path_id), attachment.base_path
|
25
|
+
end
|
26
|
+
|
27
|
+
test_against_subclass :test_should_create_default_path_prefix, S3Attachment
|
28
|
+
|
29
|
+
def test_should_create_custom_path_prefix(klass = S3WithPathPrefixAttachment)
|
30
|
+
attachment_model klass
|
31
|
+
attachment = upload_file :filename => '/files/rails.png'
|
32
|
+
assert_equal File.join('some/custom/path/prefix', attachment.attachment_path_id), attachment.base_path
|
33
|
+
end
|
34
|
+
|
35
|
+
test_against_subclass :test_should_create_custom_path_prefix, S3WithPathPrefixAttachment
|
36
|
+
|
37
|
+
def test_should_create_valid_url(klass = S3Attachment)
|
38
|
+
attachment_model klass
|
39
|
+
attachment = upload_file :filename => '/files/rails.png'
|
40
|
+
assert_equal "#{s3_protocol}#{s3_hostname}#{s3_port_string}/#{attachment.bucket_name}/#{attachment.full_filename}", attachment.s3_url
|
41
|
+
end
|
42
|
+
|
43
|
+
test_against_subclass :test_should_create_valid_url, S3Attachment
|
44
|
+
|
45
|
+
def test_should_create_authenticated_url(klass = S3Attachment)
|
46
|
+
attachment_model klass
|
47
|
+
attachment = upload_file :filename => '/files/rails.png'
|
48
|
+
assert_match /^http.+AWSAccessKeyId.+Expires.+Signature.+/, attachment.authenticated_s3_url(:use_ssl => true)
|
49
|
+
end
|
50
|
+
|
51
|
+
test_against_subclass :test_should_create_authenticated_url, S3Attachment
|
52
|
+
|
53
|
+
def test_should_create_authenticated_url_for_thumbnail(klass = S3Attachment)
|
54
|
+
attachment_model klass
|
55
|
+
attachment = upload_file :filename => '/files/rails.png'
|
56
|
+
['large', :large].each do |thumbnail|
|
57
|
+
assert_match(
|
58
|
+
/^http.+rails_large\.png.+AWSAccessKeyId.+Expires.+Signature/,
|
59
|
+
attachment.authenticated_s3_url(thumbnail),
|
60
|
+
"authenticated_s3_url failed with #{thumbnail.class} parameter"
|
61
|
+
)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_should_save_attachment(klass = S3Attachment)
|
66
|
+
attachment_model klass
|
67
|
+
assert_created do
|
68
|
+
attachment = upload_file :filename => '/files/rails.png'
|
69
|
+
assert_valid attachment
|
70
|
+
assert attachment.image?
|
71
|
+
assert !attachment.size.zero?
|
72
|
+
assert_kind_of Net::HTTPOK, http_response_for(attachment.s3_url)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
test_against_subclass :test_should_save_attachment, S3Attachment
|
77
|
+
|
78
|
+
def test_should_delete_attachment_from_s3_when_attachment_record_destroyed(klass = S3Attachment)
|
79
|
+
attachment_model klass
|
80
|
+
attachment = upload_file :filename => '/files/rails.png'
|
81
|
+
|
82
|
+
urls = [attachment.s3_url] + attachment.thumbnails.collect(&:s3_url)
|
83
|
+
|
84
|
+
urls.each {|url| assert_kind_of Net::HTTPOK, http_response_for(url) }
|
85
|
+
attachment.destroy
|
86
|
+
urls.each do |url|
|
87
|
+
begin
|
88
|
+
http_response_for(url)
|
89
|
+
rescue Net::HTTPForbidden, Net::HTTPNotFound
|
90
|
+
nil
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
test_against_subclass :test_should_delete_attachment_from_s3_when_attachment_record_destroyed, S3Attachment
|
96
|
+
|
97
|
+
protected
|
98
|
+
def http_response_for(url)
|
99
|
+
url = URI.parse(url)
|
100
|
+
Net::HTTP.start(url.host, url.port) {|http| http.request_head(url.path) }
|
101
|
+
end
|
102
|
+
|
103
|
+
def s3_protocol
|
104
|
+
Technoweenie::AttachmentFu::Backends::S3Backend.protocol
|
105
|
+
end
|
106
|
+
|
107
|
+
def s3_hostname
|
108
|
+
Technoweenie::AttachmentFu::Backends::S3Backend.hostname
|
109
|
+
end
|
110
|
+
|
111
|
+
def s3_port_string
|
112
|
+
Technoweenie::AttachmentFu::Backends::S3Backend.port_string
|
113
|
+
end
|
114
|
+
else
|
115
|
+
def test_flunk_s3
|
116
|
+
puts "s3 config file not loaded, tests not running"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module BaseAttachmentTests
|
2
|
+
def test_should_create_file_from_uploaded_file
|
3
|
+
assert_created do
|
4
|
+
attachment = upload_file :filename => '/files/foo.txt'
|
5
|
+
assert_valid attachment
|
6
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
7
|
+
assert attachment.image?
|
8
|
+
assert !attachment.size.zero?
|
9
|
+
#assert_equal 3, attachment.size
|
10
|
+
assert_nil attachment.width
|
11
|
+
assert_nil attachment.height
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_should_create_file_from_merb_temp_file
|
16
|
+
assert_created do
|
17
|
+
attachment = upload_merb_file :filename => '/files/foo.txt'
|
18
|
+
assert_valid attachment
|
19
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
20
|
+
assert attachment.image?
|
21
|
+
assert !attachment.size.zero?
|
22
|
+
#assert_equal 3, attachment.size
|
23
|
+
assert_nil attachment.width
|
24
|
+
assert_nil attachment.height
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_reassign_attribute_data
|
29
|
+
assert_created 1 do
|
30
|
+
attachment = upload_file :filename => '/files/rails.png'
|
31
|
+
assert_valid attachment
|
32
|
+
assert attachment.size > 0, "no data was set"
|
33
|
+
|
34
|
+
attachment.set_temp_data 'wtf'
|
35
|
+
assert attachment.save_attachment?
|
36
|
+
attachment.save!
|
37
|
+
|
38
|
+
assert_equal 'wtf', attachment_model.find(attachment.id).send(:current_data)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_no_reassign_attribute_data_on_nil
|
43
|
+
assert_created 1 do
|
44
|
+
attachment = upload_file :filename => '/files/rails.png'
|
45
|
+
assert_valid attachment
|
46
|
+
assert attachment.size > 0, "no data was set"
|
47
|
+
|
48
|
+
attachment.set_temp_data nil
|
49
|
+
assert !attachment.save_attachment?
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_should_overwrite_old_contents_when_updating
|
54
|
+
attachment = upload_file :filename => '/files/rails.png'
|
55
|
+
assert_not_created do # no new db_file records
|
56
|
+
use_temp_file 'files/rails.png' do |file|
|
57
|
+
attachment.filename = 'rails2.png'
|
58
|
+
attachment.temp_paths.unshift File.join(fixture_path, file)
|
59
|
+
attachment.save!
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_should_save_without_updating_file
|
65
|
+
attachment = upload_file :filename => '/files/foo.txt'
|
66
|
+
assert_valid attachment
|
67
|
+
assert !attachment.save_attachment?
|
68
|
+
assert_nothing_raised { attachment.save! }
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_should_handle_nil_file_upload
|
72
|
+
attachment = attachment_model.create :uploaded_data => ''
|
73
|
+
assert_raise ActiveRecord::RecordInvalid do
|
74
|
+
attachment.save!
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|