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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +17 -2
  3. data/Gemfile +6 -2
  4. data/README.md +59 -32
  5. data/lib/resizing/active_storage/service/resizing_service.rb +6 -2
  6. data/lib/resizing/active_storage/service.rb +9 -0
  7. data/lib/resizing/active_storage.rb +7 -0
  8. data/lib/resizing/carrier_wave/storage/file.rb +35 -16
  9. data/lib/resizing/carrier_wave/storage/remote.rb +7 -3
  10. data/lib/resizing/carrier_wave.rb +10 -11
  11. data/lib/resizing/client.rb +25 -23
  12. data/lib/resizing/configurable.rb +1 -1
  13. data/lib/resizing/configuration.rb +6 -16
  14. data/lib/resizing/http_clientable.rb +3 -3
  15. data/lib/resizing/mock_client.rb +6 -5
  16. data/lib/resizing/public_id.rb +5 -4
  17. data/lib/resizing/version.rb +1 -1
  18. data/lib/resizing.rb +15 -12
  19. data/resizing.gemspec +5 -8
  20. data/test/resizing/active_storage_service_test.rb +98 -0
  21. data/test/resizing/carrier_wave/storage/file_test.rb +149 -8
  22. data/test/resizing/carrier_wave/storage/remote_test.rb +75 -0
  23. data/test/resizing/carrier_wave_test.rb +99 -37
  24. data/test/resizing/client_test.rb +68 -12
  25. data/test/resizing/configurable_test.rb +82 -0
  26. data/test/resizing/configuration_test.rb +118 -2
  27. data/test/resizing/constants_test.rb +25 -0
  28. data/test/resizing/error_test.rb +73 -0
  29. data/test/resizing/http_clientable_test.rb +84 -0
  30. data/test/resizing/mock_client_test.rb +75 -0
  31. data/test/resizing/public_id_test.rb +1 -1
  32. data/test/resizing_module_test.rb +206 -0
  33. data/test/test_helper.rb +89 -9
  34. metadata +28 -36
  35. /data/{exe → bin}/console +0 -0
  36. /data/{exe → bin}/generate-changelog +0 -0
  37. /data/{exe → bin}/setup +0 -0
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Resizing
2
4
  class PublicId
3
- def initialize public_id
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 == nil
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Resizing
4
- VERSION = '1.2.0'
4
+ VERSION = '1.2.1'
5
5
  end
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
- class APIError < Error;
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
- self.client.post file_or_binary, options
55
+ client.post file_or_binary, options
53
56
  end
54
57
 
55
58
  def self.put(name, file_or_binary, options)
56
- self.client.put name, file_or_binary, options
59
+ client.put name, file_or_binary, options
57
60
  end
58
61
 
59
62
  def self.delete(name)
60
- self.client.delete name
63
+ client.delete name
61
64
  end
62
65
 
63
66
  def self.metadata(name, options)
64
- self.client.metadata name, options
67
+ client.metadata name, options
65
68
  end
66
69
 
67
70
  # TODO: refactoring
68
71
  #
69
72
  # identifier:
70
- # public_id: /projects/098a2a0d-c387-4135-a071-1254d6d7e70a/upload/images/28c49144-c00d-4cb5-8619-98ce95977b9c/v1Id850..
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 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 self.configure.enable_mock
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('>= 2.3.0')
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
- # NOP
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 test_store
18
- # f = Resizing::CarrierWave::Storage::File.new(uploader)
19
- # upload_file = File.new(uploader, path)
20
- # f.store(upload_file)
21
- # f.save!
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 uploader
25
- MiniTest::Mock.expect(:cache_path)
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
- VCR.use_cassette 'carrier_wave_test/remove_resizing_picture' do
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
- assert_nil model.resizing_picture_url
32
- end
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 test_do_not_raise_if_empty_column_is_removed
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
- VCR.use_cassette 'carrier_wave_test/remove_resizing_picture' do
40
- SecureRandom.stub :uuid, '28c49144-c00d-4cb5-8619-98ce95977b9c' do
41
- model.resizing_picture.remove!
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 = prepare_model_with_tempfile TestModel
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
- # assert_equal('http://192.168.56.101:5000/projects/098a2a0d-c387-4135-a071-1254d6d7e70a/upload/images/28c49144-c00d-4cb5-8619-98ce95977b9c/v1Id850__tqNsnoGWWUibtIBZ5NgjV45M/', model.resizing_picture_url)
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 expect_url
93
- 'http://192.168.56.101:5000/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/'+
94
- 'upload/images/14ea7aac-a194-4330-931f-6b562aec413d/v_8c5lEhDB5RT3PZp1Fn5PYGm9YVx_x0e'
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 prepare_model model
98
- VCR.use_cassette 'carrier_wave_test/save', record: :once do
99
- SecureRandom.stub :uuid, '28c49144-c00d-4cb5-8619-98ce95977b9c' do
100
- model = model.new
101
- file = File.open('test/data/images/sample1.jpg', 'r')
102
- uploaded_file = ActionDispatch::Http::UploadedFile.new(
103
- filename: File.basename(file.path),
104
- type: 'image/jpeg',
105
- tempfile: file
106
- )
107
-
108
- model.resizing_picture = uploaded_file
109
- return model
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 prepare_model_with_tempfile model
171
+ def prepare_model(model)
172
+ result = nil
115
173
  VCR.use_cassette 'carrier_wave_test/save', record: :once do
116
- SecureRandom.stub :uuid, '28c49144-c00d-4cb5-8619-98ce95977b9c' do
117
- model = model.new
118
- file = File.open('test/data/images/sample1.jpg', 'r')
119
- model.resizing_picture = file
120
- return model
121
- end
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