fogged 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/jobs/fogged/resources/aws_thumbnail_job.rb +32 -0
- data/app/jobs/fogged/resources/zencoder_poll_job.rb +11 -13
- data/app/models/fogged/resource.rb +39 -35
- data/app/models/fogged/resources/aws_encoder.rb +20 -8
- data/app/models/fogged/resources/encoder.rb +1 -1
- data/lib/fogged.rb +53 -38
- data/lib/fogged/engine.rb +0 -6
- data/lib/fogged/{acts_as_having_many_resources.rb → has_many_resources.rb} +3 -3
- data/lib/fogged/{acts_as_having_one_resource.rb → has_one_resource.rb} +3 -3
- data/lib/fogged/utils.rb +26 -0
- data/lib/fogged/version.rb +1 -1
- data/lib/fogged/with_directory.rb +9 -0
- data/lib/fogged/zencoder_additional_outputs.rb +7 -0
- data/test/controllers/concerns/resource_test_helper.rb +6 -0
- data/test/controllers/fogged/resources_controller/confirm_test.rb +7 -7
- data/test/controllers/fogged/resources_controller/create_test.rb +4 -6
- data/test/controllers/fogged/resources_controller/destroy_test.rb +4 -3
- data/test/controllers/fogged/resources_controller/show_test.rb +6 -6
- data/test/controllers/fogged/resources_controller/update_test.rb +3 -5
- data/test/dummy/app/models/image.rb +1 -1
- data/test/dummy/app/models/movie.rb +1 -1
- data/test/dummy/config/environments/production.rb +1 -1
- data/test/dummy/config/environments/test.rb +2 -1
- data/test/dummy/db/schema.rb +5 -5
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +234 -0
- data/test/dummy/log/test.log +61126 -0
- data/test/dummy/test/controllers/resources_controller/index_test.rb +5 -7
- data/test/dummy/test/models/image_test.rb +11 -0
- data/test/fixtures/fogged/resources.yml +18 -6
- data/test/fogged_test.rb +20 -0
- data/test/jobs/fogged/resources/aws_thumbnail_job_test.rb +52 -0
- data/test/jobs/fogged/resources/zencoder_poll_job_test.rb +8 -4
- data/test/models/fogged/resource_test.rb +5 -5
- data/test/models/fogged/resources/aws_encoder_test.rb +110 -15
- data/test/models/fogged/resources/encoder_test.rb +1 -1
- data/test/test_helper.rb +9 -6
- metadata +27 -11
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/integration/navigation_test.rb +0 -10
@@ -10,13 +10,13 @@ class ResourcesControllerIndexTest < ActionController::TestCase
|
|
10
10
|
end
|
11
11
|
|
12
12
|
test "should index all resources for movies" do
|
13
|
-
get :index, :type => "movie"
|
13
|
+
get :index, :type => "movie"
|
14
14
|
|
15
15
|
assert_json_resources(Movie.all.map(&:resources).flatten)
|
16
16
|
end
|
17
17
|
|
18
18
|
test "should index resources for a movie" do
|
19
|
-
get :index, :type => "movie", :type_id => @movie.id
|
19
|
+
get :index, :type => "movie", :type_id => @movie.id
|
20
20
|
|
21
21
|
assert_json_resources(@movie.resources.to_a)
|
22
22
|
end
|
@@ -25,8 +25,7 @@ class ResourcesControllerIndexTest < ActionController::TestCase
|
|
25
25
|
resources = movies(:movie_one, :movie_two).map(&:resources).flatten
|
26
26
|
get :index,
|
27
27
|
:type => "movie",
|
28
|
-
:type_ids => movies(:movie_one, :movie_two).map(&:id)
|
29
|
-
:use_route => :fogged
|
28
|
+
:type_ids => movies(:movie_one, :movie_two).map(&:id)
|
30
29
|
|
31
30
|
assert_json_resources(resources)
|
32
31
|
end
|
@@ -42,14 +41,13 @@ class ResourcesControllerIndexTest < ActionController::TestCase
|
|
42
41
|
get :index,
|
43
42
|
:type => "movie",
|
44
43
|
:type_id => @movie.id,
|
45
|
-
:query => "test"
|
46
|
-
:use_route => :fogged
|
44
|
+
:query => "test"
|
47
45
|
|
48
46
|
assert_json_resources([res])
|
49
47
|
end
|
50
48
|
|
51
49
|
test "should index resources with invalid movie id" do
|
52
|
-
get :index, :type => "movie", :type_id => 1234567890
|
50
|
+
get :index, :type => "movie", :type_id => 1234567890
|
53
51
|
|
54
52
|
assert_json_resources([])
|
55
53
|
end
|
@@ -21,4 +21,15 @@ class ImageTest < ActiveSupport::TestCase
|
|
21
21
|
|
22
22
|
refute @image.update(:resource => resource)
|
23
23
|
end
|
24
|
+
|
25
|
+
test "image url changing the storage name" do
|
26
|
+
d = "foobar"
|
27
|
+
@image.update!(:resource => fogged_resources(:resource_png_1))
|
28
|
+
Fogged.storage.directories.create(:key => d)
|
29
|
+
|
30
|
+
url = Fogged.with_directory(d) { @image.resource.url }
|
31
|
+
|
32
|
+
assert url.include?(d)
|
33
|
+
refute @image.resource.url.include?(d)
|
34
|
+
end
|
24
35
|
end
|
@@ -7,19 +7,23 @@ resource_text_<%= n %>:
|
|
7
7
|
token: qwertzuiop<%= n %>
|
8
8
|
<% end %>
|
9
9
|
|
10
|
-
|
10
|
+
<% 5.times do |n| %>
|
11
|
+
resource_mov_<%= n %>:
|
11
12
|
extension: mov
|
12
13
|
uploading: false
|
13
14
|
content_type: video/quicktime
|
14
|
-
name: resource mov
|
15
|
-
token:
|
15
|
+
name: resource mov <%= n %>
|
16
|
+
token: mov<%= n %>
|
17
|
+
<% end %>
|
16
18
|
|
17
|
-
|
19
|
+
<% 5.times do |n| %>
|
20
|
+
resource_png_<%= n %>:
|
18
21
|
extension: png
|
19
22
|
uploading: false
|
20
23
|
content_type: image/png
|
21
|
-
name: resource png
|
22
|
-
token:
|
24
|
+
name: resource png <%= n %>
|
25
|
+
token: png<%= n %>
|
26
|
+
<% end %>
|
23
27
|
|
24
28
|
encoding_resource:
|
25
29
|
extension: mov
|
@@ -29,3 +33,11 @@ encoding_resource:
|
|
29
33
|
token: 1234567890mov
|
30
34
|
encoding_job_id: 1234567890
|
31
35
|
encoding_progress: 10
|
36
|
+
|
37
|
+
resource_thumbnail:
|
38
|
+
extension: png
|
39
|
+
uploading: false
|
40
|
+
content_type: image/png
|
41
|
+
name: resource png thumbnail
|
42
|
+
token: pngthumbnail
|
43
|
+
encoding_progress: 0
|
data/test/fogged_test.rb
CHANGED
@@ -4,4 +4,24 @@ class FoggedTest < ActiveSupport::TestCase
|
|
4
4
|
test "truth" do
|
5
5
|
assert_kind_of Module, Fogged
|
6
6
|
end
|
7
|
+
|
8
|
+
test "should return directory public url" do
|
9
|
+
assert_equal "https://test.s3.amazonaws.com/", Fogged.directory_public_url("test")
|
10
|
+
end
|
11
|
+
|
12
|
+
test "should return resources public url" do
|
13
|
+
assert_equal "https://test.s3.amazonaws.com/", Fogged.resources_public_url
|
14
|
+
end
|
15
|
+
|
16
|
+
test "should check if file exists" do
|
17
|
+
refute Fogged.file_exists?("foobar")
|
18
|
+
|
19
|
+
Fogged.resources.files.create(
|
20
|
+
:key => "foobar",
|
21
|
+
:body => "foo",
|
22
|
+
:public => true
|
23
|
+
)
|
24
|
+
|
25
|
+
assert Fogged.file_exists?("foobar")
|
26
|
+
end
|
7
27
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module Fogged
|
4
|
+
module Resources
|
5
|
+
class AWSThumbnailJobTest < ActiveSupport::TestCase
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
@resource = fogged_resources(:resource_thumbnail)
|
9
|
+
Fogged.thumbnail_sizes = %w(50x50 100x100)
|
10
|
+
end
|
11
|
+
|
12
|
+
test "should thumbnail the image" do
|
13
|
+
in_a_fork do
|
14
|
+
require "mini_magick"
|
15
|
+
Rails.application.config.active_job.queue_adapter = :delayed_job
|
16
|
+
Fogged.configure
|
17
|
+
|
18
|
+
Resource.any_instance.expects(:url).twice.returns("http://lorempixel.com/800/600/cats")
|
19
|
+
|
20
|
+
AWSThumbnailJob.perform_now(@resource)
|
21
|
+
|
22
|
+
Fogged.thumbnail_sizes.each_with_index do |size, index|
|
23
|
+
key = @resource.send(:fogged_name_for, :thumbnails, index)
|
24
|
+
f = Fogged.resources.files.get(key)
|
25
|
+
Tempfile.open(["thumbnail", ".png"]) do |t|
|
26
|
+
t.write(f.body)
|
27
|
+
t.flush
|
28
|
+
output_size = FastImage.size(t.path)
|
29
|
+
assert_equal size, "#{output_size.first}x#{output_size.second}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
refute @resource.encoding?
|
33
|
+
assert_equal 100, @resource.reload.encoding_progress
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
test "should not thumbnail with unknown image" do
|
38
|
+
in_a_fork do
|
39
|
+
require "mini_magick"
|
40
|
+
Rails.application.config.active_job.queue_adapter = :delayed_job
|
41
|
+
Fogged.configure
|
42
|
+
|
43
|
+
Resource.any_instance.expects(:url).returns("http://localhost:7777/image")
|
44
|
+
|
45
|
+
assert_raise(MiniMagick::Error) do
|
46
|
+
AWSThumbnailJob.perform_now(@resource)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -6,13 +6,14 @@ module Fogged
|
|
6
6
|
def setup
|
7
7
|
super
|
8
8
|
@resource = fogged_resources(:encoding_resource)
|
9
|
-
@job = ZencoderPollJob.new(@resource.id)
|
10
9
|
end
|
11
10
|
|
12
11
|
test "should poll job with status success" do
|
13
12
|
in_a_fork do
|
14
13
|
require "zencoder"
|
15
14
|
require "delayed_job_active_record"
|
15
|
+
Rails.application.config.active_job.queue_adapter = :delayed_job
|
16
|
+
Fogged.configure
|
16
17
|
|
17
18
|
Zencoder::Job.expects(:progress).with("1234567890").returns(
|
18
19
|
OpenStruct.new(:body => progress_output("finished"))
|
@@ -22,7 +23,7 @@ module Fogged
|
|
22
23
|
)
|
23
24
|
|
24
25
|
assert_no_difference("Delayed::Job.count") do
|
25
|
-
@
|
26
|
+
ZencoderPollJob.perform_now(@resource)
|
26
27
|
end
|
27
28
|
refute @resource.reload.encoding?
|
28
29
|
assert_equal 800, @resource.width
|
@@ -36,13 +37,15 @@ module Fogged
|
|
36
37
|
in_a_fork do
|
37
38
|
require "zencoder"
|
38
39
|
require "delayed_job_active_record"
|
40
|
+
Rails.application.config.active_job.queue_adapter = :delayed_job
|
41
|
+
Fogged.configure
|
39
42
|
|
40
43
|
Zencoder::Job.expects(:progress).with("1234567890").returns(
|
41
44
|
OpenStruct.new(:body => progress_output(status))
|
42
45
|
)
|
43
46
|
|
44
47
|
assert_difference("Delayed::Job.count") do
|
45
|
-
@
|
48
|
+
ZencoderPollJob.perform_now(@resource)
|
46
49
|
end
|
47
50
|
assert @resource.reload.encoding?
|
48
51
|
assert_equal 55, @resource.encoding_progress
|
@@ -54,6 +57,7 @@ module Fogged
|
|
54
57
|
in_a_fork do
|
55
58
|
require "zencoder"
|
56
59
|
require "delayed_job_active_record"
|
60
|
+
Fogged.configure
|
57
61
|
|
58
62
|
Zencoder::Job.expects(:progress).with("1234567890").returns(
|
59
63
|
OpenStruct.new(:body => progress_output("unknown"))
|
@@ -61,7 +65,7 @@ module Fogged
|
|
61
65
|
|
62
66
|
assert_raise(ArgumentError) do
|
63
67
|
assert_no_difference("Delayed::Job.count") do
|
64
|
-
@
|
68
|
+
ZencoderPollJob.perform_now(@resource)
|
65
69
|
end
|
66
70
|
end
|
67
71
|
end
|
@@ -48,7 +48,7 @@ module Fogged
|
|
48
48
|
end
|
49
49
|
|
50
50
|
test "should process resource image" do
|
51
|
-
@resource = fogged_resources(:
|
51
|
+
@resource = fogged_resources(:resource_png_1)
|
52
52
|
|
53
53
|
@resource.process!
|
54
54
|
assert_equal 800, @resource.width
|
@@ -57,7 +57,7 @@ module Fogged
|
|
57
57
|
end
|
58
58
|
|
59
59
|
test "should process resource video" do
|
60
|
-
@resource = fogged_resources(:
|
60
|
+
@resource = fogged_resources(:resource_mov_1)
|
61
61
|
|
62
62
|
@resource.process!
|
63
63
|
|
@@ -69,10 +69,10 @@ module Fogged
|
|
69
69
|
in_a_fork do
|
70
70
|
require "zencoder"
|
71
71
|
require "delayed_job_active_record"
|
72
|
+
Rails.application.config.active_job.queue_adapter = :delayed_job
|
73
|
+
Fogged.configure
|
72
74
|
|
73
|
-
|
74
|
-
|
75
|
-
@resource = fogged_resources(:resource_mov)
|
75
|
+
@resource = fogged_resources(:resource_mov_1)
|
76
76
|
Zencoder::Job.expects(:create).returns(
|
77
77
|
OpenStruct.new(:body => create_output)
|
78
78
|
)
|
@@ -3,42 +3,137 @@ require "test_helper"
|
|
3
3
|
module Fogged
|
4
4
|
module Resources
|
5
5
|
class AWSEncoderTest < ActiveSupport::TestCase
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
test "should not encode video file without delayed job" do
|
7
|
+
resource = fogged_resources(:resource_mov_1)
|
8
|
+
encoder = AWSEncoder.new(resource)
|
9
|
+
|
10
|
+
in_a_fork do
|
11
|
+
encoder.encode!
|
12
|
+
|
13
|
+
refute resource.encoding?
|
14
|
+
refute resource.encoding_job_id
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
test "should not encode video file without zencoder" do
|
19
|
+
resource = fogged_resources(:resource_mov_2)
|
20
|
+
encoder = AWSEncoder.new(resource)
|
21
|
+
|
22
|
+
in_a_fork do
|
23
|
+
require "delayed_job_active_record"
|
24
|
+
Rails.application.config.active_job.queue_adapter = :delayed_job
|
25
|
+
Fogged.configure
|
26
|
+
|
27
|
+
assert_no_difference("Delayed::Job.count") do
|
28
|
+
encoder.encode!
|
29
|
+
end
|
30
|
+
|
31
|
+
refute resource.encoding?
|
32
|
+
refute resource.encoding_job_id
|
33
|
+
end
|
10
34
|
end
|
11
35
|
|
12
36
|
test "should encode video file" do
|
37
|
+
resource = fogged_resources(:resource_mov_3)
|
38
|
+
encoder = AWSEncoder.new(resource)
|
39
|
+
|
13
40
|
in_a_fork do
|
14
41
|
require "zencoder"
|
15
42
|
require "delayed_job_active_record"
|
43
|
+
Rails.application.config.active_job.queue_adapter = :delayed_job
|
44
|
+
Fogged.configure
|
16
45
|
|
17
46
|
Zencoder::Job.expects(:create).returns(
|
18
47
|
OpenStruct.new(:body => create_output)
|
19
48
|
)
|
20
49
|
assert_difference("Delayed::Job.count") do
|
21
|
-
|
50
|
+
encoder.encode!
|
22
51
|
end
|
23
52
|
|
24
|
-
assert
|
25
|
-
assert_equal 0,
|
26
|
-
assert_equal "1234567890",
|
53
|
+
assert resource.encoding?
|
54
|
+
assert_equal 0, resource.encoding_progress
|
55
|
+
assert_equal "1234567890", resource.encoding_job_id
|
27
56
|
end
|
28
57
|
end
|
29
58
|
|
30
|
-
test "should not encode image file" do
|
59
|
+
test "should not encode image file without delayed job" do
|
60
|
+
resource = fogged_resources(:resource_png_1)
|
61
|
+
encoder = AWSEncoder.new(resource)
|
62
|
+
|
31
63
|
in_a_fork do
|
32
|
-
|
64
|
+
encoder.encode!
|
33
65
|
|
34
|
-
|
35
|
-
|
66
|
+
refute resource.encoding?
|
67
|
+
refute resource.encoding_job_id
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
test "should not encode image file without minimagick" do
|
72
|
+
resource = fogged_resources(:resource_png_2)
|
73
|
+
encoder = AWSEncoder.new(resource)
|
74
|
+
|
75
|
+
in_a_fork do
|
76
|
+
require "delayed_job_active_record"
|
77
|
+
Fogged.configure
|
36
78
|
|
37
79
|
assert_no_difference("Delayed::Job.count") do
|
38
|
-
|
80
|
+
encoder.encode!
|
39
81
|
end
|
40
|
-
refute
|
41
|
-
refute
|
82
|
+
refute resource.encoding?
|
83
|
+
refute resource.encoding_job_id
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
test "should encode image file" do
|
88
|
+
resource = fogged_resources(:resource_png_3)
|
89
|
+
encoder = AWSEncoder.new(resource)
|
90
|
+
|
91
|
+
in_a_fork do
|
92
|
+
require "mini_magick"
|
93
|
+
require "delayed_job_active_record"
|
94
|
+
Rails.application.config.active_job.queue_adapter = :delayed_job
|
95
|
+
Fogged.configure
|
96
|
+
Fogged.thumbnail_sizes = %w(50x50 60x60)
|
97
|
+
|
98
|
+
assert_difference("Delayed::Job.count") do
|
99
|
+
encoder.encode!
|
100
|
+
end
|
101
|
+
assert resource.encoding?
|
102
|
+
assert_equal 0, resource.encoding_progress
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
test "should encode video with additional outputs" do
|
107
|
+
resource = fogged_resources(:resource_mov_3)
|
108
|
+
encoder = AWSEncoder.new(resource)
|
109
|
+
|
110
|
+
in_a_fork do
|
111
|
+
require "zencoder"
|
112
|
+
require "delayed_job_active_record"
|
113
|
+
Rails.application.config.active_job.queue_adapter = :delayed_job
|
114
|
+
Fogged.configure do |config|
|
115
|
+
config.zencoder_additional_outputs do |bucket, res|
|
116
|
+
[
|
117
|
+
{
|
118
|
+
:url => "s3://#{bucket}/#{res.token}-custom1.mp4",
|
119
|
+
:video_codec => "mpeg4",
|
120
|
+
:quality => 1,
|
121
|
+
:public => 1
|
122
|
+
}
|
123
|
+
]
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
Zencoder::Job.expects(:create).with { |options| assert_equal 4, options[:output].size }.returns(
|
128
|
+
OpenStruct.new(:body => create_output)
|
129
|
+
)
|
130
|
+
assert_difference("Delayed::Job.count") do
|
131
|
+
encoder.encode!
|
132
|
+
end
|
133
|
+
|
134
|
+
assert resource.encoding?
|
135
|
+
assert_equal 0, resource.encoding_progress
|
136
|
+
assert_equal "1234567890", resource.encoding_job_id
|
42
137
|
end
|
43
138
|
end
|
44
139
|
|
data/test/test_helper.rb
CHANGED
@@ -7,20 +7,23 @@ SimpleCov.start "rails"
|
|
7
7
|
require "minitest/reporters"
|
8
8
|
Minitest::Reporters.use!(Minitest::Reporters::DefaultReporter.new)
|
9
9
|
|
10
|
-
require File.expand_path("
|
10
|
+
require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
|
11
|
+
ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
|
12
|
+
ActiveRecord::Migrator.migrations_paths << File.expand_path('../../db/migrate', __FILE__)
|
13
|
+
|
11
14
|
require "rails/test_help"
|
12
15
|
require "mocha/mini_test"
|
13
16
|
|
14
|
-
|
15
|
-
|
16
|
-
# Run any available migration from dummy app
|
17
|
-
ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
|
17
|
+
Minitest.backtrace_filter = Minitest::BacktraceFilter.new
|
18
18
|
|
19
19
|
# Load support files
|
20
20
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
21
21
|
|
22
22
|
# Load fixtures from the engine
|
23
|
-
ActiveSupport::TestCase.fixture_path
|
23
|
+
if ActiveSupport::TestCase.respond_to?(:fixture_path=)
|
24
|
+
ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
|
25
|
+
ActiveSupport::TestCase.fixtures :all
|
26
|
+
end
|
24
27
|
Fogged.test_mode!
|
25
28
|
|
26
29
|
class ActiveSupport::TestCase
|