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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/app/jobs/fogged/resources/aws_thumbnail_job.rb +32 -0
  3. data/app/jobs/fogged/resources/zencoder_poll_job.rb +11 -13
  4. data/app/models/fogged/resource.rb +39 -35
  5. data/app/models/fogged/resources/aws_encoder.rb +20 -8
  6. data/app/models/fogged/resources/encoder.rb +1 -1
  7. data/lib/fogged.rb +53 -38
  8. data/lib/fogged/engine.rb +0 -6
  9. data/lib/fogged/{acts_as_having_many_resources.rb → has_many_resources.rb} +3 -3
  10. data/lib/fogged/{acts_as_having_one_resource.rb → has_one_resource.rb} +3 -3
  11. data/lib/fogged/utils.rb +26 -0
  12. data/lib/fogged/version.rb +1 -1
  13. data/lib/fogged/with_directory.rb +9 -0
  14. data/lib/fogged/zencoder_additional_outputs.rb +7 -0
  15. data/test/controllers/concerns/resource_test_helper.rb +6 -0
  16. data/test/controllers/fogged/resources_controller/confirm_test.rb +7 -7
  17. data/test/controllers/fogged/resources_controller/create_test.rb +4 -6
  18. data/test/controllers/fogged/resources_controller/destroy_test.rb +4 -3
  19. data/test/controllers/fogged/resources_controller/show_test.rb +6 -6
  20. data/test/controllers/fogged/resources_controller/update_test.rb +3 -5
  21. data/test/dummy/app/models/image.rb +1 -1
  22. data/test/dummy/app/models/movie.rb +1 -1
  23. data/test/dummy/config/environments/production.rb +1 -1
  24. data/test/dummy/config/environments/test.rb +2 -1
  25. data/test/dummy/db/schema.rb +5 -5
  26. data/test/dummy/db/test.sqlite3 +0 -0
  27. data/test/dummy/log/development.log +234 -0
  28. data/test/dummy/log/test.log +61126 -0
  29. data/test/dummy/test/controllers/resources_controller/index_test.rb +5 -7
  30. data/test/dummy/test/models/image_test.rb +11 -0
  31. data/test/fixtures/fogged/resources.yml +18 -6
  32. data/test/fogged_test.rb +20 -0
  33. data/test/jobs/fogged/resources/aws_thumbnail_job_test.rb +52 -0
  34. data/test/jobs/fogged/resources/zencoder_poll_job_test.rb +8 -4
  35. data/test/models/fogged/resource_test.rb +5 -5
  36. data/test/models/fogged/resources/aws_encoder_test.rb +110 -15
  37. data/test/models/fogged/resources/encoder_test.rb +1 -1
  38. data/test/test_helper.rb +9 -6
  39. metadata +27 -11
  40. data/test/dummy/db/development.sqlite3 +0 -0
  41. 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", :use_route => :fogged
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, :use_route => :fogged
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, :use_route => :fogged
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
- resource_mov:
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 1
15
- token: 1234567890mov
15
+ name: resource mov <%= n %>
16
+ token: mov<%= n %>
17
+ <% end %>
16
18
 
17
- resource_png:
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 1
22
- token: 1234567890png
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
@@ -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
- @job.perform
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
- @job.perform
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
- @job.perform
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(:resource_png)
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(:resource_mov)
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
- Fogged.zencoder_enabled = true
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
- def setup
7
- super
8
- @resource = fogged_resources(:resource_mov)
9
- @encoder = AWSEncoder.new(@resource)
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
- @encoder.encode!
50
+ encoder.encode!
22
51
  end
23
52
 
24
- assert @resource.encoding?
25
- assert_equal 0, @resource.encoding_progress
26
- assert_equal "1234567890", @resource.encoding_job_id
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
- require "delayed_job_active_record"
64
+ encoder.encode!
33
65
 
34
- @resource = fogged_resources(:resource_png)
35
- @encoder = AWSEncoder.new(@resource)
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
- @encoder.encode!
80
+ encoder.encode!
39
81
  end
40
- refute @resource.encoding?
41
- refute @resource.encoding_job_id
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
 
@@ -5,7 +5,7 @@ module Fogged
5
5
  class EncoderTest < ActiveSupport::TestCase
6
6
  def setup
7
7
  super
8
- @resource = fogged_resources(:resource_mov)
8
+ @resource = fogged_resources(:resource_mov_1)
9
9
  end
10
10
 
11
11
  test "should aws encoder" do
@@ -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("../dummy/config/environment.rb", __FILE__)
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
- Rails.backtrace_cleaner.remove_silencers!
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 = File.expand_path("../fixtures", __FILE__)
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