fogged 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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