middleman-image-uploader-tag 0.0.1

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.
@@ -0,0 +1,132 @@
1
+ require './test/test_helper'
2
+
3
+ class CloudinaryCDNTest < Minitest::Test
4
+ attr_reader :cdn
5
+
6
+ def setup
7
+ @cdn = Middleman::ImageUploaderTag::CloudinaryCDN
8
+ end
9
+
10
+ def test_implemented
11
+ assert cdn
12
+ end
13
+
14
+ def test_config_required_for_initializing
15
+ assert_raises ArgumentError do
16
+ cdn.new
17
+ end
18
+
19
+ assert_instance_of cdn, cdn.new(config)
20
+ end
21
+
22
+ def test_initialization_set_properties_from_valid_config
23
+ clear_config!
24
+ cdn_config = Cloudinary.config
25
+
26
+ assert_equal nil, cdn_config.cloud_name
27
+ assert_equal nil, cdn_config.api_key
28
+ assert_equal nil, cdn_config.api_secret
29
+ assert_equal nil, cdn_config.enhance_image_tag
30
+ assert_equal nil, cdn_config.static_image_support
31
+ assert_equal nil, cdn_config.secure
32
+
33
+ cdn.new config
34
+
35
+ assert_equal config[:cloud_name], cdn_config.cloud_name
36
+ assert_equal config[:api_key], cdn_config.api_key
37
+ assert_equal config[:api_secret], cdn_config.api_secret
38
+ assert_equal config[:enhance_image_tag], cdn_config.enhance_image_tag
39
+ assert_equal config[:static_image_support], cdn_config.static_image_support
40
+ assert_equal config[:secure], cdn_config.secure
41
+ end
42
+
43
+ def test_config_should_provide_required_options
44
+ clear_config!
45
+
46
+ cdn.const_get(:OBLIGATORY_OPTIONS).each do |option|
47
+ assert_raises Middleman::ImageUploaderTag::AuthorizationRequired do
48
+ bad_config = config
49
+ bad_config.delete option
50
+ cdn.new bad_config
51
+ end
52
+ end
53
+ end
54
+
55
+ def test_public_interface
56
+ new_cdn = cdn.new(config)
57
+ assert_respond_to new_cdn, :get_remote_link
58
+ assert_respond_to new_cdn, :upload_to_cloud
59
+ end
60
+
61
+ def test_upload_to_cloud_expects_image_path_argument
62
+ assert_raises Middleman::ImageUploaderTag::NotFound do
63
+ cdn.new(config).upload_to_cloud nil
64
+ end
65
+
66
+ assert_raises Middleman::ImageUploaderTag::NotFound do
67
+ cdn.new(config).upload_to_cloud 'fake.jpg'
68
+ end
69
+ end
70
+
71
+ def test_upload_to_cloud
72
+ image_path = extension.image_location('test.jpg')
73
+ `touch #{image_path}` unless File.exists? image_path
74
+
75
+ mock = Minitest::Mock.new
76
+ mock.expect :upload, { 'secure_url': 'http://cdn.com/test.jpg' }, [
77
+ image_path,
78
+ { use_filename: true, unique_filename: false }
79
+ ]
80
+
81
+ Cloudinary.stub_const(:Uploader, mock) do
82
+ cdn.new(config).upload_to_cloud(image_path)
83
+ end
84
+
85
+ mock.verify
86
+ end
87
+
88
+ def test_get_remote_link_expects_image_path_argument
89
+ assert_raises Middleman::ImageUploaderTag::NotFound do
90
+ cdn.new(config).get_remote_link nil
91
+ end
92
+
93
+ assert_raises Middleman::ImageUploaderTag::NotFound do
94
+ cdn.new(config).get_remote_link 'fake.jpg'
95
+ end
96
+ end
97
+
98
+ def test_get_remote_link
99
+ image_path = extension.image_location('test.jpg')
100
+ `touch #{image_path}` unless File.exists? image_path
101
+
102
+ Cloudinary::Uploader.instance_eval do
103
+ def upload(file, options)
104
+ { 'secure_url': 'http://cdn.com/test.jpg' }
105
+ end
106
+ end
107
+
108
+ assert_equal 'http://cdn.com/test.jpg', cdn.new(config).get_remote_link(image_path)
109
+ end
110
+
111
+ private
112
+
113
+ def config
114
+ {
115
+ cloud_name: ENV['CLOUDINARY_CLOUD_NAME'],
116
+ api_key: ENV['CLOUDINARY_API_KEY'],
117
+ api_secret: ENV['CLOUDINARY_API_SECRET'],
118
+ enhance_image_tag: false,
119
+ static_image_support: true,
120
+ secure: true
121
+ }
122
+ end
123
+
124
+ def clear_config!
125
+ Cloudinary.class_variable_set(:@@config, OpenStruct.new({}))
126
+ end
127
+
128
+ def extension
129
+ Middleman::ImageUploaderTag::Extension.new(Class.new(Middleman::Application)).class
130
+ end
131
+ end
132
+
@@ -0,0 +1,174 @@
1
+ require './test/test_helper'
2
+ require 'minitest/stub_const'
3
+ require 'fileutils'
4
+
5
+ class ExtensionTest < Minitest::Test
6
+ attr_reader :application, :ext_instance, :ext_class
7
+
8
+ def setup
9
+ @application = Class.new(Middleman::Application)
10
+ @ext_instance = Middleman::ImageUploaderTag::Extension.new(@application)
11
+ @ext_instance.app = @application
12
+ @ext_class = @ext_instance.class
13
+ end
14
+
15
+ def test_implemented
16
+ assert Middleman::ImageUploaderTag::Extension
17
+ end
18
+
19
+ def test_app
20
+ assert_equal application, ext_class.app
21
+ end
22
+
23
+ def test_provider_options
24
+ assert_equal ext_instance.options, ext_class.provider_options
25
+ end
26
+
27
+ def test_remote_images_dir
28
+ set_provider_options ext_class, remote_images_dir: 'test_folder'
29
+ assert_equal 'test_folder', ext_class.remote_images_dir
30
+
31
+ set_provider_options ext_class, remote_images_dir: nil
32
+ assert_equal 'remote_images', ext_class.remote_images_dir
33
+ end
34
+
35
+ def test_create_images_dir!
36
+ remote_images_dir = File.join(application.root, 'source', ext_class.remote_images_dir)
37
+
38
+ assert Dir.exists?(remote_images_dir)
39
+
40
+ FileUtils.rm_rf(remote_images_dir)
41
+ refute Dir.exists?(remote_images_dir)
42
+
43
+ ext_class.create_images_dir!
44
+ assert Dir.exists?(remote_images_dir)
45
+ end
46
+
47
+ def test_helpers_being_defined
48
+ assert_respond_to application, :remote_image_tag
49
+ assert_respond_to application, :remote_image_tag_link
50
+ end
51
+
52
+ def test_remote_image_tag_helper
53
+ # I`m not sure if it`s the right way..
54
+ create_fake_image!('test.jpg')
55
+ image = ext_class.image_location('test.jpg')
56
+ called = false
57
+ name_called = ''
58
+
59
+ application.class.class_eval do
60
+ define_method :image_tag do |name, params|
61
+ params ||= {}
62
+ called = true
63
+ name_called = name
64
+ 'test.jpg'
65
+ end
66
+ end
67
+
68
+ application.stub :remote_image_tag_link, image do
69
+ application.remote_image_tag 'test.jpg'
70
+ end
71
+
72
+ assert_equal true, called
73
+ assert_equal image, name_called
74
+ end
75
+
76
+ def test_remote_image_tag_link_helper
77
+ create_fake_image!('test.jpg')
78
+ image = ext_class.image_location('test.jpg')
79
+
80
+ mock = Minitest::Mock.new
81
+ mock.expect :get_remote_path, image, ['test.jpg']
82
+
83
+ ::Middleman::ImageUploaderTag.stub_const(:Extension, mock) do
84
+ application.remote_image_tag_link 'test.jpg'
85
+ end
86
+
87
+ mock.verify
88
+ end
89
+
90
+ def test_image_location
91
+ remote_images_dir = File.join(application.root, 'source', ext_class.remote_images_dir)
92
+
93
+ assert_equal remote_images_dir + '/test.jpg', ext_class.image_location('test.jpg')
94
+ assert_equal remote_images_dir + '/test.jpg', ext_class.image_location('/test.jpg')
95
+ assert_equal remote_images_dir + '/test/test.jpg', ext_class.image_location('test/test.jpg')
96
+ end
97
+
98
+ def test_provider
99
+ set_provider_options ext_class, provider_options_stub
100
+
101
+ assert_instance_of Middleman::ImageUploaderTag::CloudinaryCDN, ext_class.provider
102
+ end
103
+
104
+ def test_get_remote_path_during_development
105
+ create_fake_image!('test.jpg')
106
+ create_fake_image!('test/test.jpg')
107
+
108
+ set_app_config environment: :development
109
+
110
+ assert_equal 'test.jpg', ext_class.get_remote_path('test.jpg')
111
+ assert_equal '/test.jpg', ext_class.get_remote_path('/test.jpg')
112
+ assert_equal 'test/test.jpg', ext_class.get_remote_path('test/test.jpg')
113
+ end
114
+
115
+ def test_get_remote_path_raises_exception_for_absent_image
116
+ image = ext_class.image_location('/test.jpg')
117
+ File.delete(image) if File.exist? image
118
+
119
+ assert_raises Middleman::ImageUploaderTag::NotFound do
120
+ ext_class.get_remote_path 'test.jpg'
121
+ end
122
+ end
123
+
124
+ def test_get_remote_path_during_build
125
+ set_app_config environment: :build
126
+ create_fake_image!('test.jpg')
127
+ image = ext_class.image_location('test.jpg')
128
+
129
+ mock = Minitest::Mock.new
130
+ mock.expect :get_remote_link, image, [image]
131
+
132
+ ext_class.stub :provider, mock do
133
+ ext_class.get_remote_path 'test.jpg'
134
+ end
135
+ mock.verify
136
+ end
137
+
138
+ private
139
+
140
+ def set_app_config(options = {})
141
+ options.each do |key, value|
142
+ application.config.public_send(:"#{key}=", value)
143
+ end
144
+ end
145
+
146
+ def set_provider_options(extension, options = {})
147
+ provider_options = extension.provider_options
148
+
149
+ options.each do |key, value|
150
+ if provider_options.respond_to?(key)
151
+ # reset internal state because of the nil guard technic
152
+ extension.class_variable_set("@@#{key}", nil)
153
+
154
+ provider_options.public_send(:"#{key}=", value)
155
+ end
156
+ end
157
+ end
158
+
159
+ def provider_options_stub
160
+ { provider: :cloudinary,
161
+ provider_config: { api_key: 'test', api_secret: 'test', cloud_name: 'test' }
162
+ }
163
+ end
164
+
165
+ def create_fake_image!(name)
166
+ image = ext_class.image_location(name)
167
+ dir = File.dirname(image)
168
+ Dir.mkdir(dir) unless Dir.exists? dir
169
+
170
+ `touch #{image}` unless File.exists? image
171
+ end
172
+
173
+ end
174
+
@@ -0,0 +1,10 @@
1
+ PROJECT_ROOT_PATH = File.dirname(File.dirname(__FILE__))
2
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-image-uploader-tag')
3
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman', 'image-uploader-tag',
4
+ 'cdns', 'cloudinary')
5
+ require 'minitest/autorun'
6
+ require 'minitest/unit'
7
+ require 'minitest/pride'
8
+
9
+ ENV['MM_ROOT'] = File.join(PROJECT_ROOT_PATH, 'test', 'fixtures', 'test')
10
+
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: middleman-image-uploader-tag
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Aliaksandr Buhayeu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: middleman-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.3.12
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.3.12
27
+ - !ruby/object:Gem::Dependency
28
+ name: cloudinary
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 5.6.1
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 5.6.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: fivemat
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.3.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.3.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest-stub-const
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: "\n The remote_image_tag helper provide you automatic image upload
84
+ to external\n hosting services with public back-link mapping\n "
85
+ email:
86
+ - aliaksandr.buhayeu@gmail.com
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - Gemfile
93
+ - README.md
94
+ - Rakefile
95
+ - features/support/env.rb
96
+ - lib/middleman-image-uploader-tag.rb
97
+ - lib/middleman/image-uploader-tag/cdns/base.rb
98
+ - lib/middleman/image-uploader-tag/cdns/cloudinary.rb
99
+ - lib/middleman/image-uploader-tag/exceptions.rb
100
+ - lib/middleman/image-uploader-tag/extension.rb
101
+ - lib/middleman/image-uploader-tag/version.rb
102
+ - lib/middleman_extension.rb
103
+ - middleman-image-uploader-tag.gemspec
104
+ - test/fixtures/test/.gitignore
105
+ - test/fixtures/test/Gemfile
106
+ - test/fixtures/test/config.rb
107
+ - test/fixtures/test/source/images/background.png
108
+ - test/fixtures/test/source/images/middleman.png
109
+ - test/fixtures/test/source/index.html.erb
110
+ - test/fixtures/test/source/javascripts/all.js
111
+ - test/fixtures/test/source/layouts/layout.erb
112
+ - test/fixtures/test/source/stylesheets/all.css
113
+ - test/fixtures/test/source/stylesheets/normalize.css
114
+ - test/lib/middleman/image-uploader-tag/cdns/cloudinary_test.rb
115
+ - test/lib/middleman/image-uploader-tag/extension_test.rb
116
+ - test/test_helper.rb
117
+ homepage: https://github.com/aliaksandrb/middleman-image-uploader-tag
118
+ licenses:
119
+ - MIT
120
+ metadata: {}
121
+ post_install_message:
122
+ rdoc_options: []
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ requirements: []
136
+ rubyforge_project:
137
+ rubygems_version: 2.4.6
138
+ signing_key:
139
+ specification_version: 4
140
+ summary: Image tag helper with automatic upload to external services
141
+ test_files: []
142
+ has_rdoc: