resizing 1.2.0 → 1.2.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.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +17 -2
- data/Gemfile +6 -2
- data/README.md +59 -32
- data/lib/resizing/active_storage/service/resizing_service.rb +6 -2
- data/lib/resizing/active_storage/service.rb +9 -0
- data/lib/resizing/active_storage.rb +7 -0
- data/lib/resizing/carrier_wave/storage/file.rb +35 -16
- data/lib/resizing/carrier_wave/storage/remote.rb +7 -3
- data/lib/resizing/carrier_wave.rb +10 -11
- data/lib/resizing/client.rb +25 -23
- data/lib/resizing/configurable.rb +1 -1
- data/lib/resizing/configuration.rb +6 -16
- data/lib/resizing/http_clientable.rb +3 -3
- data/lib/resizing/mock_client.rb +6 -5
- data/lib/resizing/public_id.rb +5 -4
- data/lib/resizing/version.rb +1 -1
- data/lib/resizing.rb +15 -12
- data/resizing.gemspec +5 -8
- data/test/resizing/active_storage_service_test.rb +98 -0
- data/test/resizing/carrier_wave/storage/file_test.rb +149 -8
- data/test/resizing/carrier_wave/storage/remote_test.rb +75 -0
- data/test/resizing/carrier_wave_test.rb +99 -37
- data/test/resizing/client_test.rb +68 -12
- data/test/resizing/configurable_test.rb +82 -0
- data/test/resizing/configuration_test.rb +118 -2
- data/test/resizing/constants_test.rb +25 -0
- data/test/resizing/error_test.rb +73 -0
- data/test/resizing/http_clientable_test.rb +84 -0
- data/test/resizing/mock_client_test.rb +75 -0
- data/test/resizing/public_id_test.rb +1 -1
- data/test/resizing_module_test.rb +206 -0
- data/test/test_helper.rb +89 -9
- metadata +28 -36
- /data/{exe → bin}/console +0 -0
- /data/{exe → bin}/generate-changelog +0 -0
- /data/{exe → bin}/setup +0 -0
data/lib/resizing/public_id.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Resizing
|
|
2
4
|
class PublicId
|
|
3
|
-
def initialize
|
|
5
|
+
def initialize(public_id)
|
|
4
6
|
@public_id = public_id
|
|
5
7
|
parsed
|
|
6
8
|
end
|
|
@@ -38,13 +40,12 @@ module Resizing
|
|
|
38
40
|
|
|
39
41
|
def parsed
|
|
40
42
|
return nil if @public_id.nil?
|
|
43
|
+
|
|
41
44
|
unless defined? @parsed
|
|
42
45
|
@parsed = Resizing.separate_public_id(@public_id)
|
|
43
|
-
raise "type error #{@public_id}" if @parsed
|
|
46
|
+
raise "type error #{@public_id}" if @parsed.nil?
|
|
44
47
|
end
|
|
45
48
|
@parsed
|
|
46
49
|
end
|
|
47
|
-
|
|
48
|
-
private
|
|
49
50
|
end
|
|
50
51
|
end
|
data/lib/resizing/version.rb
CHANGED
data/lib/resizing.rb
CHANGED
|
@@ -15,16 +15,19 @@ module Resizing
|
|
|
15
15
|
autoload :CarrierWave, 'resizing/carrier_wave'
|
|
16
16
|
autoload :PublicId, 'resizing/public_id'
|
|
17
17
|
autoload :Video, 'resizing/video'
|
|
18
|
+
autoload :ActiveStorage, 'resizing/active_storage'
|
|
18
19
|
|
|
19
20
|
class Error < StandardError; end
|
|
20
21
|
class ConfigurationError < Error; end
|
|
21
|
-
|
|
22
|
+
|
|
23
|
+
class APIError < Error
|
|
22
24
|
def decoded_body
|
|
23
25
|
@decoded_body ||= {}
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
def decoded_body=(value)
|
|
27
29
|
raise ArgumentError, 'The decoded_body is expected to be passed a Hash.' unless value.is_a? Hash
|
|
30
|
+
|
|
28
31
|
@decoded_body = value
|
|
29
32
|
end
|
|
30
33
|
end
|
|
@@ -49,39 +52,39 @@ module Resizing
|
|
|
49
52
|
end
|
|
50
53
|
|
|
51
54
|
def self.post(file_or_binary, options)
|
|
52
|
-
|
|
55
|
+
client.post file_or_binary, options
|
|
53
56
|
end
|
|
54
57
|
|
|
55
58
|
def self.put(name, file_or_binary, options)
|
|
56
|
-
|
|
59
|
+
client.put name, file_or_binary, options
|
|
57
60
|
end
|
|
58
61
|
|
|
59
62
|
def self.delete(name)
|
|
60
|
-
|
|
63
|
+
client.delete name
|
|
61
64
|
end
|
|
62
65
|
|
|
63
66
|
def self.metadata(name, options)
|
|
64
|
-
|
|
67
|
+
client.metadata name, options
|
|
65
68
|
end
|
|
66
69
|
|
|
67
70
|
# TODO: refactoring
|
|
68
71
|
#
|
|
69
72
|
# identifier:
|
|
70
|
-
# public_id: /projects
|
|
71
|
-
# identifier:
|
|
72
|
-
# project_id:
|
|
73
|
-
# image_id:
|
|
74
|
-
# version:
|
|
73
|
+
# public_id: /projects/<project_id>/upload/images/<image_id>/v<version>
|
|
74
|
+
# identifier: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
75
|
+
# project_id: ^^^^^^^^^^^^^
|
|
76
|
+
# image_id: ^^^^^^^^^^
|
|
77
|
+
# version: ^^^^^^^^
|
|
75
78
|
def self.generate_identifier
|
|
76
79
|
Resizing.configure.generate_identifier
|
|
77
80
|
end
|
|
78
81
|
|
|
79
|
-
def self.separate_public_id
|
|
82
|
+
def self.separate_public_id(public_id)
|
|
80
83
|
public_id.match('/projects/(?<project_id>[0-9a-f-]+)/upload/images/(?<image_id>[^/]+)(/v(?<version>[^/]+))?')
|
|
81
84
|
end
|
|
82
85
|
|
|
83
86
|
def self.client
|
|
84
|
-
if
|
|
87
|
+
if configure.enable_mock
|
|
85
88
|
Resizing::MockClient.new
|
|
86
89
|
else
|
|
87
90
|
Resizing::Client.new
|
data/resizing.gemspec
CHANGED
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
|
12
12
|
spec.description = 'Client and utilities for Resizing '
|
|
13
13
|
spec.homepage = 'https://github.com/jksy/resizing-gem'
|
|
14
14
|
spec.license = 'MIT'
|
|
15
|
-
spec.required_ruby_version = Gem::Requirement.new('>=
|
|
15
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 3.0.0')
|
|
16
16
|
|
|
17
17
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
|
18
18
|
|
|
@@ -25,20 +25,17 @@ Gem::Specification.new do |spec|
|
|
|
25
25
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
26
26
|
`git ls-files -z`.split("\x0")
|
|
27
27
|
end
|
|
28
|
-
spec.bindir = 'exe'
|
|
29
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
30
28
|
spec.require_paths = ['lib']
|
|
31
29
|
spec.add_runtime_dependency 'faraday', '~> 2.3'
|
|
32
30
|
spec.add_runtime_dependency 'faraday-multipart'
|
|
33
|
-
spec.add_development_dependency 'rails', '> 6.0'
|
|
34
31
|
spec.add_development_dependency 'carrierwave', '~> 2.2.5'
|
|
35
32
|
spec.add_development_dependency 'fog-aws'
|
|
36
|
-
spec.add_development_dependency 'minitest'
|
|
33
|
+
spec.add_development_dependency 'minitest', '~> 5.16'
|
|
37
34
|
spec.add_development_dependency 'minitest-ci'
|
|
38
|
-
spec.add_development_dependency 'rubocop'
|
|
39
|
-
spec.add_development_dependency 'timecop'
|
|
40
|
-
spec.add_development_dependency 'vcr'
|
|
41
35
|
spec.add_development_dependency 'mysql2'
|
|
36
|
+
spec.add_development_dependency 'rubocop'
|
|
42
37
|
spec.add_development_dependency 'simplecov'
|
|
43
38
|
spec.add_development_dependency 'simplecov-cobertura'
|
|
39
|
+
spec.add_development_dependency 'timecop'
|
|
40
|
+
spec.add_development_dependency 'vcr'
|
|
44
41
|
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
module Resizing
|
|
6
|
+
module ActiveStorage
|
|
7
|
+
module Service
|
|
8
|
+
class ResizingServiceTest < Minitest::Test
|
|
9
|
+
def setup
|
|
10
|
+
@service = Resizing::ActiveStorage::Service::ResizingService.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def teardown
|
|
14
|
+
# NOP
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_service_initialization
|
|
18
|
+
assert_instance_of Resizing::ActiveStorage::Service::ResizingService, @service
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_upload_raises_not_implemented_error
|
|
22
|
+
assert_raises NotImplementedError do
|
|
23
|
+
@service.upload('test_key', StringIO.new('test data'))
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_download_raises_not_implemented_error
|
|
28
|
+
assert_raises NotImplementedError do
|
|
29
|
+
@service.download('test_key')
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_download_chunk_raises_not_implemented_error
|
|
34
|
+
assert_raises NotImplementedError do
|
|
35
|
+
@service.download_chunk('test_key', 0..99)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_delete_raises_not_implemented_error
|
|
40
|
+
assert_raises NotImplementedError do
|
|
41
|
+
@service.delete('test_key')
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_exist_raises_not_implemented_error
|
|
46
|
+
assert_raises NotImplementedError do
|
|
47
|
+
@service.exist?('test_key')
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_url_for_direct_upload_raises_not_implemented_error
|
|
52
|
+
assert_raises NotImplementedError do
|
|
53
|
+
@service.url_for_direct_upload(
|
|
54
|
+
'test_key',
|
|
55
|
+
expires_in: 3600,
|
|
56
|
+
content_type: 'image/png',
|
|
57
|
+
conteont_length: 1024,
|
|
58
|
+
checksum: 'test_checksum'
|
|
59
|
+
)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_headers_for_direct_upload_raises_not_implemented_error
|
|
64
|
+
assert_raises NotImplementedError do
|
|
65
|
+
@service.headers_for_direct_upload(
|
|
66
|
+
'test_key',
|
|
67
|
+
content_type: 'image/png',
|
|
68
|
+
checksum: 'test_checksum'
|
|
69
|
+
)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def test_private_url_raises_not_implemented_error
|
|
74
|
+
assert_raises NotImplementedError do
|
|
75
|
+
@service.send(
|
|
76
|
+
:private_url,
|
|
77
|
+
'test_key',
|
|
78
|
+
expires_in: 3600,
|
|
79
|
+
filename: 'test.png',
|
|
80
|
+
content_type: 'image/png',
|
|
81
|
+
disposition: :attachment
|
|
82
|
+
)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def test_public_url_raises_not_implemented_error
|
|
87
|
+
assert_raises NotImplementedError do
|
|
88
|
+
@service.send(
|
|
89
|
+
:public_url,
|
|
90
|
+
'test_key',
|
|
91
|
+
filename: 'test.png'
|
|
92
|
+
)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -7,22 +7,163 @@ module Resizing
|
|
|
7
7
|
module Storage
|
|
8
8
|
class FileTest < Minitest::Test
|
|
9
9
|
def setup
|
|
10
|
-
|
|
10
|
+
@configuration_template = {
|
|
11
|
+
image_host: 'http://192.168.56.101:5000',
|
|
12
|
+
video_host: 'http://192.168.56.101:5000',
|
|
13
|
+
project_id: 'e06e710d-f026-4dcf-b2c0-eab0de8bb83f',
|
|
14
|
+
secret_token: 'ewbym2r1pk49x1d2lxdbiiavnqp25j2kh00hsg3koy0ppm620x5mhlmgl3rq5ci8',
|
|
15
|
+
open_timeout: 10,
|
|
16
|
+
response_timeout: 20
|
|
17
|
+
}
|
|
18
|
+
Resizing.configure = @configuration_template
|
|
11
19
|
end
|
|
12
20
|
|
|
13
21
|
def teardown
|
|
14
22
|
# NOP
|
|
15
23
|
end
|
|
16
24
|
|
|
17
|
-
def
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
25
|
+
def test_initialize_without_identifier
|
|
26
|
+
model = TestModel.new
|
|
27
|
+
uploader = model.resizing_picture
|
|
28
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader)
|
|
29
|
+
|
|
30
|
+
assert_instance_of Resizing::CarrierWave::Storage::File, file
|
|
31
|
+
assert file.public_id.empty?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_initialize_with_identifier
|
|
35
|
+
model = TestModel.new
|
|
36
|
+
uploader = model.resizing_picture
|
|
37
|
+
identifier = '/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/upload/images/14ea7aac-a194-4330-931f-6b562aec413d/v_8c5lEhDB5RT3PZp1Fn5PYGm9YVx_x0e'
|
|
38
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader, identifier)
|
|
39
|
+
|
|
40
|
+
assert_instance_of Resizing::CarrierWave::Storage::File, file
|
|
41
|
+
assert_equal identifier, file.public_id.to_s
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_retrieve_sets_public_id
|
|
45
|
+
model = TestModel.new
|
|
46
|
+
uploader = model.resizing_picture
|
|
47
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader)
|
|
48
|
+
identifier = '/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/upload/images/14ea7aac-a194-4330-931f-6b562aec413d/v_8c5lEhDB5RT3PZp1Fn5PYGm9YVx_x0e'
|
|
49
|
+
|
|
50
|
+
file.retrieve(identifier)
|
|
51
|
+
|
|
52
|
+
assert_equal identifier, file.public_id.to_s
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_delete_does_nothing_when_public_id_empty
|
|
56
|
+
model = TestModel.new
|
|
57
|
+
uploader = model.resizing_picture
|
|
58
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader)
|
|
59
|
+
|
|
60
|
+
# Should not raise any error and should return early
|
|
61
|
+
result = file.delete
|
|
62
|
+
assert_nil result
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def test_current_path_returns_nil_for_new_model
|
|
66
|
+
model = TestModel.new
|
|
67
|
+
uploader = model.resizing_picture
|
|
68
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader)
|
|
69
|
+
|
|
70
|
+
assert_nil file.current_path
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def test_path_alias
|
|
74
|
+
model = TestModel.new
|
|
75
|
+
uploader = model.resizing_picture
|
|
76
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader)
|
|
77
|
+
|
|
78
|
+
assert_nil file.current_path
|
|
79
|
+
assert_nil file.path
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_authenticated_url_returns_nil
|
|
83
|
+
model = TestModel.new
|
|
84
|
+
uploader = model.resizing_picture
|
|
85
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader)
|
|
86
|
+
|
|
87
|
+
assert_nil file.authenticated_url
|
|
22
88
|
end
|
|
23
89
|
|
|
24
|
-
def
|
|
25
|
-
|
|
90
|
+
def test_authenticated_url_with_options_returns_nil
|
|
91
|
+
model = TestModel.new
|
|
92
|
+
uploader = model.resizing_picture
|
|
93
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader)
|
|
94
|
+
|
|
95
|
+
assert_nil file.authenticated_url(expires_in: 3600)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def test_extension_raises_not_implemented_error
|
|
99
|
+
model = TestModel.new
|
|
100
|
+
uploader = model.resizing_picture
|
|
101
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader)
|
|
102
|
+
|
|
103
|
+
assert_raises(NotImplementedError) do
|
|
104
|
+
file.extension
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def test_name_returns_image_id_from_public_id
|
|
109
|
+
model = TestModel.new
|
|
110
|
+
identifier = '/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/upload/images/14ea7aac-a194-4330-931f-6b562aec413d/v_8c5lEhDB5RT3PZp1Fn5PYGm9YVx_x0e'
|
|
111
|
+
# Use write_attribute to set the column directly
|
|
112
|
+
model.send(:write_attribute, :resizing_picture, identifier)
|
|
113
|
+
uploader = model.resizing_picture
|
|
114
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader, identifier)
|
|
115
|
+
|
|
116
|
+
# name returns image_id (UUID) from public_id
|
|
117
|
+
assert_equal '14ea7aac-a194-4330-931f-6b562aec413d', file.name
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def test_store_uploads_file_and_sets_public_id
|
|
121
|
+
VCR.use_cassette 'carrier_wave_test/save', record: :once do
|
|
122
|
+
model = TestModel.new
|
|
123
|
+
uploader = model.resizing_picture
|
|
124
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader)
|
|
125
|
+
|
|
126
|
+
source_file = ::File.open('test/data/images/sample1.jpg', 'r')
|
|
127
|
+
uploaded_file = ActionDispatch::Http::UploadedFile.new(
|
|
128
|
+
filename: ::File.basename(source_file.path),
|
|
129
|
+
type: 'image/jpeg',
|
|
130
|
+
tempfile: source_file
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
result = file.store(uploaded_file)
|
|
134
|
+
|
|
135
|
+
assert result
|
|
136
|
+
refute file.public_id.empty?
|
|
137
|
+
assert_equal 'image/jpeg', file.content_type
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def test_store_with_file_object
|
|
142
|
+
VCR.use_cassette 'carrier_wave_test/save', record: :once do
|
|
143
|
+
model = TestModel.new
|
|
144
|
+
uploader = model.resizing_picture
|
|
145
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader)
|
|
146
|
+
|
|
147
|
+
source_file = ::File.open('test/data/images/sample1.jpg', 'r')
|
|
148
|
+
|
|
149
|
+
result = file.store(source_file)
|
|
150
|
+
|
|
151
|
+
assert result
|
|
152
|
+
refute file.public_id.empty?
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def test_delete_with_valid_public_id
|
|
157
|
+
VCR.use_cassette 'carrier_wave_test/remove_resizing_picture' do
|
|
158
|
+
model = TestModel.new
|
|
159
|
+
identifier = '/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/upload/images/14ea7aac-a194-4330-931f-6b562aec413d/v_8c5lEhDB5RT3PZp1Fn5PYGm9YVx_x0e'
|
|
160
|
+
model.send(:write_attribute, :resizing_picture, identifier)
|
|
161
|
+
uploader = model.resizing_picture
|
|
162
|
+
file = Resizing::CarrierWave::Storage::File.new(uploader, identifier)
|
|
163
|
+
|
|
164
|
+
# This should call delete on Resizing API
|
|
165
|
+
file.delete
|
|
166
|
+
end
|
|
26
167
|
end
|
|
27
168
|
end
|
|
28
169
|
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
module Resizing
|
|
6
|
+
module CarrierWave
|
|
7
|
+
module Storage
|
|
8
|
+
class RemoteTest < Minitest::Test
|
|
9
|
+
def setup
|
|
10
|
+
@configuration_template = {
|
|
11
|
+
image_host: 'http://192.168.56.101:5000',
|
|
12
|
+
video_host: 'http://192.168.56.101:5000',
|
|
13
|
+
project_id: 'e06e710d-f026-4dcf-b2c0-eab0de8bb83f',
|
|
14
|
+
secret_token: 'ewbym2r1pk49x1d2lxdbiiavnqp25j2kh00hsg3koy0ppm620x5mhlmgl3rq5ci8',
|
|
15
|
+
open_timeout: 10,
|
|
16
|
+
response_timeout: 20
|
|
17
|
+
}
|
|
18
|
+
Resizing.configure = @configuration_template
|
|
19
|
+
|
|
20
|
+
model = TestModel.new
|
|
21
|
+
@uploader = model.resizing_picture
|
|
22
|
+
@storage = Remote.new(@uploader)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def teardown
|
|
26
|
+
# NOP
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_storage_has_required_methods
|
|
30
|
+
assert_respond_to @storage, :store!
|
|
31
|
+
assert_respond_to @storage, :remove!
|
|
32
|
+
assert_respond_to @storage, :cache!
|
|
33
|
+
assert_respond_to @storage, :retrieve_from_cache!
|
|
34
|
+
assert_respond_to @storage, :delete_dir!
|
|
35
|
+
assert_respond_to @storage, :clean_cache!
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_retrieve_from_cache_returns_nil
|
|
39
|
+
result = @storage.retrieve_from_cache!('identifier')
|
|
40
|
+
assert_nil result
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_delete_dir_does_nothing
|
|
44
|
+
# Should not raise any exception
|
|
45
|
+
assert_nil @storage.delete_dir!('/path/to/dir')
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_clean_cache_does_nothing
|
|
49
|
+
# Should not raise any exception
|
|
50
|
+
assert_nil @storage.clean_cache!(3600)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_storage_initialization
|
|
54
|
+
assert_instance_of Remote, @storage
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_retrieve_returns_nil_for_blank_identifier
|
|
58
|
+
result = @storage.retrieve!(nil)
|
|
59
|
+
assert_nil result
|
|
60
|
+
|
|
61
|
+
result = @storage.retrieve!('')
|
|
62
|
+
assert_nil result
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def test_retrieve_returns_file_for_valid_identifier
|
|
66
|
+
identifier = '/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/upload/images/14ea7aac-a194-4330-931f-6b562aec413d/v_8c5lEhDB5RT3PZp1Fn5PYGm9YVx_x0e'
|
|
67
|
+
result = @storage.retrieve!(identifier)
|
|
68
|
+
|
|
69
|
+
assert_instance_of Resizing::CarrierWave::Storage::File, result
|
|
70
|
+
assert_equal identifier, result.public_id.to_s
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -4,6 +4,8 @@ require 'test_helper'
|
|
|
4
4
|
|
|
5
5
|
module Resizing
|
|
6
6
|
class CarrierWaveTest < Minitest::Test
|
|
7
|
+
include VCRRequestAssertions
|
|
8
|
+
|
|
7
9
|
def setup
|
|
8
10
|
TestModel.delete_all
|
|
9
11
|
TestJPGModel.delete_all
|
|
@@ -23,24 +25,65 @@ module Resizing
|
|
|
23
25
|
|
|
24
26
|
def test_remove_resizing_picture
|
|
25
27
|
model = prepare_model TestModel
|
|
28
|
+
model.save!
|
|
29
|
+
|
|
30
|
+
# VCRカセットのDELETEリクエストが実際に発行されたことを確認
|
|
31
|
+
assert_vcr_requests_made 'carrier_wave_test/remove_resizing_picture' do
|
|
32
|
+
model.remove_resizing_picture!
|
|
33
|
+
model.save!
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# DELETEが成功した結果、URLがnilになることを確認
|
|
37
|
+
assert_nil model.resizing_picture_url
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_remove_calls_delete_immediately
|
|
41
|
+
model = prepare_model TestModel
|
|
42
|
+
model.save!
|
|
43
|
+
|
|
44
|
+
# remove!を呼んだとき即時にDELETEリクエストがとぶことを確認する
|
|
45
|
+
assert_vcr_requests_made 'carrier_wave_test/remove_resizing_picture' do
|
|
46
|
+
model.resizing_picture.remove!
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_blank_returns_true_after_remove
|
|
51
|
+
model = prepare_model TestModel
|
|
52
|
+
model.save!
|
|
26
53
|
|
|
27
|
-
|
|
28
|
-
SecureRandom.stub :uuid, '28c49144-c00d-4cb5-8619-98ce95977b9c' do
|
|
29
|
-
model.remove_resizing_picture!
|
|
54
|
+
refute model.resizing_picture.blank?, 'resizing_picture should not be blank before remove'
|
|
30
55
|
|
|
31
|
-
|
|
32
|
-
|
|
56
|
+
# DELETEリクエストが発行されたことを確認
|
|
57
|
+
assert_vcr_requests_made 'carrier_wave_test/remove_resizing_picture' do
|
|
58
|
+
model.remove_resizing_picture!
|
|
59
|
+
model.save!
|
|
33
60
|
end
|
|
61
|
+
|
|
62
|
+
assert model.resizing_picture.blank?, 'resizing_picture should be blank after remove'
|
|
63
|
+
assert_nil model.resizing_picture_url
|
|
34
64
|
end
|
|
35
65
|
|
|
36
|
-
def
|
|
66
|
+
def test_blank_returns_true_for_new_record
|
|
67
|
+
model = TestModel.new
|
|
68
|
+
assert model.resizing_picture.blank?, 'resizing_picture should be blank for new record'
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def test_remove_resizing_picture_with_flag_and_save
|
|
37
72
|
model = prepare_model TestModel
|
|
73
|
+
model.save!
|
|
74
|
+
|
|
75
|
+
refute model.resizing_picture.blank?, 'resizing_picture should not be blank before remove'
|
|
76
|
+
|
|
77
|
+
model.remove_resizing_picture = true
|
|
38
78
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
end
|
|
79
|
+
# save時にDELETEリクエストが発行されたことを確認
|
|
80
|
+
assert_vcr_requests_made 'carrier_wave_test/remove_resizing_picture' do
|
|
81
|
+
model.save!
|
|
43
82
|
end
|
|
83
|
+
|
|
84
|
+
# DELETEが成功した結果、blank?がtrueになることを確認
|
|
85
|
+
assert model.resizing_picture.blank?, 'resizing_picture should be blank after save'
|
|
86
|
+
assert_nil model.resizing_picture_url
|
|
44
87
|
end
|
|
45
88
|
|
|
46
89
|
def test_picture_url_return_correct_value_and_when_model_reloaded
|
|
@@ -84,42 +127,61 @@ module Resizing
|
|
|
84
127
|
end
|
|
85
128
|
|
|
86
129
|
def test_is_successful
|
|
87
|
-
model =
|
|
130
|
+
model = TestModel.new
|
|
131
|
+
|
|
132
|
+
# POSTリクエストが発行されたことを確認
|
|
133
|
+
assert_vcr_requests_made 'carrier_wave_test/save' do
|
|
134
|
+
file = File.open('test/data/images/sample1.jpg', 'r')
|
|
135
|
+
model.resizing_picture = file
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
assert_equal('http://192.168.56.101:5000/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/upload/images/14ea7aac-a194-4330-931f-6b562aec413d/v_8c5lEhDB5RT3PZp1Fn5PYGm9YVx_x0e/', model.resizing_picture_url)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def test_file_returns_same_instance_on_multiple_calls
|
|
142
|
+
model = prepare_model TestModel
|
|
88
143
|
model.save!
|
|
89
|
-
|
|
144
|
+
|
|
145
|
+
file1 = model.resizing_picture.file
|
|
146
|
+
file2 = model.resizing_picture.file
|
|
147
|
+
|
|
148
|
+
assert_same file1, file2
|
|
90
149
|
end
|
|
91
150
|
|
|
92
|
-
def
|
|
93
|
-
|
|
94
|
-
|
|
151
|
+
def test_file_returns_nil_for_blank_identifier
|
|
152
|
+
model = TestModel.new
|
|
153
|
+
assert_nil model.resizing_picture.file
|
|
95
154
|
end
|
|
96
155
|
|
|
97
|
-
def
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
end
|
|
111
|
-
end
|
|
156
|
+
def test_file_uses_read_column_when_identifier_nil
|
|
157
|
+
model = prepare_model TestModel
|
|
158
|
+
model.save!
|
|
159
|
+
model.reload
|
|
160
|
+
|
|
161
|
+
file = model.resizing_picture.file
|
|
162
|
+
refute_nil file
|
|
163
|
+
assert_instance_of Resizing::CarrierWave::Storage::File, file
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def expect_url
|
|
167
|
+
'http://192.168.56.101:5000/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/' \
|
|
168
|
+
'upload/images/14ea7aac-a194-4330-931f-6b562aec413d/v_8c5lEhDB5RT3PZp1Fn5PYGm9YVx_x0e'
|
|
112
169
|
end
|
|
113
170
|
|
|
114
|
-
def
|
|
171
|
+
def prepare_model(model)
|
|
172
|
+
result = nil
|
|
115
173
|
VCR.use_cassette 'carrier_wave_test/save', record: :once do
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
174
|
+
result = model.new
|
|
175
|
+
file = File.open('test/data/images/sample1.jpg', 'r')
|
|
176
|
+
uploaded_file = ActionDispatch::Http::UploadedFile.new(
|
|
177
|
+
filename: File.basename(file.path),
|
|
178
|
+
type: 'image/jpeg',
|
|
179
|
+
tempfile: file
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
result.resizing_picture = uploaded_file
|
|
122
183
|
end
|
|
184
|
+
result
|
|
123
185
|
end
|
|
124
186
|
end
|
|
125
187
|
end
|