test/models/storage/test_file.rb in fog-azure-rm-0.1.1 vs test/models/storage/test_file.rb in fog-azure-rm-0.1.2

- old
+ new

@@ -1,294 +1,294 @@ -require File.expand_path '../../test_helper', __dir__ - -# Test class for Storage Container Model -class TestFile < Minitest::Test - def setup - @service = Fog::Storage::AzureRM.new(storage_account_credentials) - @directory = directory(@service) - @file = file(@service) - @raw_cloud_blob = storage_blob - - @mocked_response = mocked_storage_http_error - @blob = ApiStub::Models::Storage::File.blob - @metadata = ApiStub::Models::Storage::File.blob_metadata - @blob_list = ApiStub::Models::Storage::File.blob_list - @blob_https_url = ApiStub::Models::Storage::File.blob_https_url - end - - def test_model_methods - methods = [ - :save, - :body, - :body=, - :copy, - :copy_from_uri, - :destroy, - :public?, - :public_url, - :url - ] - methods.each do |method| - assert_respond_to @file, method - end - end - - def test_model_attributes - attributes = [ - :key, - :body, - :directory, - :accept_ranges, - :content_length, - :content_type, - :content_md5, - :content_encoding, - :content_language, - :cache_control, - :content_disposition, - :copy_completion_time, - :copy_status, - :copy_status_description, - :copy_id, - :copy_progress, - :copy_source, - :etag, - :last_modified, - :lease_duration, - :lease_state, - :lease_status, - :sequence_number, - :blob_type, - :metadata - ] - attributes.each do |attribute| - assert_respond_to @file, attribute - end - end - - def test_save_method_with_small_block_blob_success - @file.body = 'd' * 1025 # SINGLE_BLOB_PUT_THRESHOLD is 32 * 1024 * 1024 - - @service.stub :create_block_blob, @raw_cloud_blob do - assert @file.save - end - end - - def test_save_method_with_large_block_blob_success - @file.body = 'd' * (32 * 1024 * 1024 + 1) # SINGLE_BLOB_PUT_THRESHOLD is 32 * 1024 * 1024 - - @service.stub :multipart_save_block_blob, true do - @service.stub :get_blob_properties, @raw_cloud_blob do - assert @file.save - end - end - end - - def test_save_method_with_page_blob_success - options = { blob_type: 'PageBlob' } - @file.metadata = @metadata - @file.body = 'd' * 5 * 1024 * 1024 # MAXIMUM_CHUNK_SIZE is 4 * 1024 * 1024 - - @service.stub :save_page_blob, true do - @service.stub :get_blob_properties, @raw_cloud_blob do - assert @file.save(options) - end - end - end - - def test_save_method_with_not_update_body_success - options = { update_body: false } - @file.metadata = @metadata - - @service.stub :put_blob_metadata, true do - @service.stub :put_blob_properties, true do - @service.stub :get_blob_properties, @raw_cloud_blob do - assert @file.save(options) - end - end - end - end - - def test_save_method_without_directory_exception - assert_raises(ArgumentError) do - @file.attributes.delete(:directory) - @file.save - end - end - - def test_save_method_without_key_exception - assert_raises(ArgumentError) do - @file.attributes.delete(:key) - @file.save - end - end - - def test_save_method_create_without_body_exception - assert_raises(ArgumentError) do - @file.attributes.delete(:body) - @file.save - end - end - - def test_get_body_method_local_success - @file.attributes[:body] = 'body' - assert_equal 'body', @file.body - - @file.attributes[:body] = nil - @file.attributes[:last_modified] = nil - assert_equal '', @file.body - end - - def test_get_body_method_remote_success - @file.attributes[:body] = nil - remote_file = @file.dup - body_content = 'data' - @file.collection.stub :get, remote_file do - remote_file.stub :body, body_content do - body = @file.body - assert_equal body_content, body - assert_equal body_content, @file.attributes[:body] - end - end - end - - def test_get_body_method_remote_not_found_success - @file.attributes[:body] = nil - @file.collection.stub :get, nil do - body = @file.body - assert_equal '', body - assert_equal '', @file.attributes[:body] - end - end - - def test_set_body_method_success - @file.body = 'new_body' - assert_equal 'new_body', @file.attributes[:body] - end - - def test_copy_method_success - copy_id = @raw_cloud_blob.properties[:copy_id] - copy_status = 'pending' - - @service.stub :get_blob_properties, @raw_cloud_blob do - @service.stub :copy_blob, [copy_id, copy_status] do - @service.stub :wait_blob_copy_operation_to_finish, true do - target_file = @file.copy('target_container', 'target_blob') - assert_instance_of Fog::Storage::AzureRM::File, target_file - end - end - end - end - - def test_copy_from_uri_method_success - copy_id = @raw_cloud_blob.properties[:copy_id] - copy_status = 'pending' - - @service.stub :get_blob_properties, @raw_cloud_blob do - @service.stub :copy_blob_from_uri, [copy_id, copy_status] do - @service.stub :wait_blob_copy_operation_to_finish, true do - assert @file.copy_from_uri('source_uri') - end - end - end - end - - def test_copy_from_uri_method_without_directory_exception - assert_raises(ArgumentError) do - @file.attributes.delete(:directory) - @file.copy_from_uri('source_uri') - end - end - - def test_copy_from_uri_method_without_key_exception - assert_raises(ArgumentError) do - @file.attributes.delete(:key) - @file.copy_from_uri('source_uri') - end - end - - def test_destroy_method_success - @service.stub :delete_blob, true do - assert @file.destroy - assert @file.attributes[:body].nil? - end - end - - def test_destroy_method_without_directory_exception - assert_raises(ArgumentError) do - @file.attributes.delete(:directory) - @file.destroy - end - end - - def test_destroy_method_without_key_exception - assert_raises(ArgumentError) do - @file.attributes.delete(:key) - @file.destroy - end - end - - def test_public_method_success - @file.directory.acl = 'container' - assert @file.public? - - @file.directory.acl = 'blob' - assert @file.public? - - @file.directory.acl = nil - assert !@file.public? - end - - def test_public_method_without_directory_exception - assert_raises(ArgumentError) do - @file.attributes.delete(:directory) - @file.public? - end - end - - def test_public_url_method_success - @file.stub :public?, false do - assert @file.public_url.nil? - end - - @file.stub :public?, true do - @service.stub :get_blob_url, @blob_https_url do - assert @file.public_url, @blob_https_url - end - end - - http_url = @blob_https_url.gsub('https:', 'http:') - options = { scheme: 'https' } - @file.stub :public?, true do - @service.stub :get_blob_url, http_url do - assert @file.public_url(options), http_url - end - end - end - - def test_public_url_method_without_directory_exception - assert_raises(ArgumentError) do - @file.attributes.delete(:directory) - @file.public_url - end - end - - def test_public_url_method_without_key_exception - assert_raises(ArgumentError) do - @file.attributes.delete(:key) - @file.public_url - end - end - - def test_url_method_success - @file.collection.stub :get_url, @blob_https_url do - assert @file.url(Time.now + 3600), @blob_https_url - end - end - - def test_url_method_without_key_exception - assert_raises(ArgumentError) do - @file.attributes.delete(:key) - @file.url(Time.now + 3600) - end - end -end +require File.expand_path '../../test_helper', __dir__ + +# Test class for Storage Container Model +class TestFile < Minitest::Test + def setup + @service = Fog::Storage::AzureRM.new(storage_account_credentials) + @directory = directory(@service) + @file = file(@service) + @raw_cloud_blob = storage_blob + + @mocked_response = mocked_storage_http_error + @blob = ApiStub::Models::Storage::File.blob + @metadata = ApiStub::Models::Storage::File.blob_metadata + @blob_list = ApiStub::Models::Storage::File.blob_list + @blob_https_url = ApiStub::Models::Storage::File.blob_https_url + end + + def test_model_methods + methods = [ + :save, + :body, + :body=, + :copy, + :copy_from_uri, + :destroy, + :public?, + :public_url, + :url + ] + methods.each do |method| + assert_respond_to @file, method + end + end + + def test_model_attributes + attributes = [ + :key, + :body, + :directory, + :accept_ranges, + :content_length, + :content_type, + :content_md5, + :content_encoding, + :content_language, + :cache_control, + :content_disposition, + :copy_completion_time, + :copy_status, + :copy_status_description, + :copy_id, + :copy_progress, + :copy_source, + :etag, + :last_modified, + :lease_duration, + :lease_state, + :lease_status, + :sequence_number, + :blob_type, + :metadata + ] + attributes.each do |attribute| + assert_respond_to @file, attribute + end + end + + def test_save_method_with_small_block_blob_success + @file.body = 'd' * 1025 # SINGLE_BLOB_PUT_THRESHOLD is 32 * 1024 * 1024 + + @service.stub :create_block_blob, @raw_cloud_blob do + assert @file.save + end + end + + def test_save_method_with_large_block_blob_success + @file.body = 'd' * (32 * 1024 * 1024 + 1) # SINGLE_BLOB_PUT_THRESHOLD is 32 * 1024 * 1024 + + @service.stub :multipart_save_block_blob, true do + @service.stub :get_blob_properties, @raw_cloud_blob do + assert @file.save + end + end + end + + def test_save_method_with_page_blob_success + options = { blob_type: 'PageBlob' } + @file.metadata = @metadata + @file.body = 'd' * 5 * 1024 * 1024 # MAXIMUM_CHUNK_SIZE is 4 * 1024 * 1024 + + @service.stub :save_page_blob, true do + @service.stub :get_blob_properties, @raw_cloud_blob do + assert @file.save(options) + end + end + end + + def test_save_method_with_not_update_body_success + options = { update_body: false } + @file.metadata = @metadata + + @service.stub :put_blob_metadata, true do + @service.stub :put_blob_properties, true do + @service.stub :get_blob_properties, @raw_cloud_blob do + assert @file.save(options) + end + end + end + end + + def test_save_method_without_directory_exception + assert_raises(ArgumentError) do + @file.attributes.delete(:directory) + @file.save + end + end + + def test_save_method_without_key_exception + assert_raises(ArgumentError) do + @file.attributes.delete(:key) + @file.save + end + end + + def test_save_method_create_without_body_exception + assert_raises(ArgumentError) do + @file.attributes.delete(:body) + @file.save + end + end + + def test_get_body_method_local_success + @file.attributes[:body] = 'body' + assert_equal 'body', @file.body + + @file.attributes[:body] = nil + @file.attributes[:last_modified] = nil + assert_equal '', @file.body + end + + def test_get_body_method_remote_success + @file.attributes[:body] = nil + remote_file = @file.dup + body_content = 'data' + @file.collection.stub :get, remote_file do + remote_file.stub :body, body_content do + body = @file.body + assert_equal body_content, body + assert_equal body_content, @file.attributes[:body] + end + end + end + + def test_get_body_method_remote_not_found_success + @file.attributes[:body] = nil + @file.collection.stub :get, nil do + body = @file.body + assert_equal '', body + assert_equal '', @file.attributes[:body] + end + end + + def test_set_body_method_success + @file.body = 'new_body' + assert_equal 'new_body', @file.attributes[:body] + end + + def test_copy_method_success + copy_id = @raw_cloud_blob.properties[:copy_id] + copy_status = 'pending' + + @service.stub :get_blob_properties, @raw_cloud_blob do + @service.stub :copy_blob, [copy_id, copy_status] do + @service.stub :wait_blob_copy_operation_to_finish, true do + target_file = @file.copy('target_container', 'target_blob') + assert_instance_of Fog::Storage::AzureRM::File, target_file + end + end + end + end + + def test_copy_from_uri_method_success + copy_id = @raw_cloud_blob.properties[:copy_id] + copy_status = 'pending' + + @service.stub :get_blob_properties, @raw_cloud_blob do + @service.stub :copy_blob_from_uri, [copy_id, copy_status] do + @service.stub :wait_blob_copy_operation_to_finish, true do + assert @file.copy_from_uri('source_uri') + end + end + end + end + + def test_copy_from_uri_method_without_directory_exception + assert_raises(ArgumentError) do + @file.attributes.delete(:directory) + @file.copy_from_uri('source_uri') + end + end + + def test_copy_from_uri_method_without_key_exception + assert_raises(ArgumentError) do + @file.attributes.delete(:key) + @file.copy_from_uri('source_uri') + end + end + + def test_destroy_method_success + @service.stub :delete_blob, true do + assert @file.destroy + assert @file.attributes[:body].nil? + end + end + + def test_destroy_method_without_directory_exception + assert_raises(ArgumentError) do + @file.attributes.delete(:directory) + @file.destroy + end + end + + def test_destroy_method_without_key_exception + assert_raises(ArgumentError) do + @file.attributes.delete(:key) + @file.destroy + end + end + + def test_public_method_success + @file.directory.acl = 'container' + assert @file.public? + + @file.directory.acl = 'blob' + assert @file.public? + + @file.directory.acl = nil + assert !@file.public? + end + + def test_public_method_without_directory_exception + assert_raises(ArgumentError) do + @file.attributes.delete(:directory) + @file.public? + end + end + + def test_public_url_method_success + @file.stub :public?, false do + assert @file.public_url.nil? + end + + @file.stub :public?, true do + @service.stub :get_blob_url, @blob_https_url do + assert @file.public_url, @blob_https_url + end + end + + http_url = @blob_https_url.gsub('https:', 'http:') + options = { scheme: 'https' } + @file.stub :public?, true do + @service.stub :get_blob_url, http_url do + assert @file.public_url(options), http_url + end + end + end + + def test_public_url_method_without_directory_exception + assert_raises(ArgumentError) do + @file.attributes.delete(:directory) + @file.public_url + end + end + + def test_public_url_method_without_key_exception + assert_raises(ArgumentError) do + @file.attributes.delete(:key) + @file.public_url + end + end + + def test_url_method_success + @file.collection.stub :get_url, @blob_https_url do + assert @file.url(Time.now + 3600), @blob_https_url + end + end + + def test_url_method_without_key_exception + assert_raises(ArgumentError) do + @file.attributes.delete(:key) + @file.url(Time.now + 3600) + end + end +end