sagar verma
sagar verma

Reputation: 432

how to test carrierwave fog google in rspec with setting up the configuration

I have below configuration and I wanted to write TC for it in ruby. I am new to ruby and wanted to understand how we can set the configuration of Fog to point to mock and use it in test-case.

class TestUploader < CarrierWave::Uploader::Base

  storage :fog

  def fog_credentials
    {
      :provider => 'google',
      :google_project =>'my project',
      :google_json_key_location =>'myCredentialFile.json'

    }
  end


  def fog_provider
    'fog/google'
  end

  def fog_directory
    '{#bucket-name}'
  end

  def store_dir

    when :File
      "#{file.getpath}/file"
    when :audio
      "#{file.getpath}/audio"
    else
      p " Invalid file "
    end
  end
end

class TestModel

  mount_uploader :images, TestUploader

end

Could someone please assist me from configuring to write and execute the unit test on it with few example. Any help would be really appreciated.

Upvotes: 0

Views: 598

Answers (1)

Rogelio Monter
Rogelio Monter

Reputation: 1218

From the test I did, I got the following sample code working with Google Cloud Storage using Fog gem:

require "fog/google"

# Uncomment the following line if you want to use Mock
#Fog.mock!

# Bucket name
bucket = "an-existing-bucket"

# Timestamp used as sample string
test = Time.now.utc.strftime("%Y%m%d%H%M%S")

connection = Fog::Storage.new({
  :provider => "Google",
  :google_project => "your-project",
  :google_json_key_location => "path-to-key.json",
})

# Lists objects in a bucket
puts connection.list_objects(bucket)

#Creates new object
connection.put_object(bucket, test, test)
puts "Object #{test} was created."

It works in production, but fails using mock mode with the following error:

`not_implemented': Contributions welcome! (Fog::Errors::MockNotImplemented)

It seems that it is not implemented as shown at the put_object method definition in the documentation.

Also, this is said in this GitHub issue:

Closing issue. 1.0.0 is out, and we have no more mocks for json backed objects.


Credentials

As shown in the Fog's documentation, to configure Google Credentials you have to them as follows:

connection = Fog::Storage.new({
  :provider                         => 'Google',
  :google_storage_access_key_id     => YOUR_SECRET_ACCESS_KEY_ID,
  :google_storage_secret_access_key => YOUR_SECRET_ACCESS_KEY
})

Mock

In the GitHub - Fog::Google documentation, there is also a minimal config to integrate Fog with Carrierwave.

In order to use the Cloud Storage mock, you can use the following line:

Fog.mock!
connection = Fog::Storage.new(config_hash)

Provider Specific Resources

In the provider documentation section, you will find links to provider specific documentation and examples.

Community supported providers can get assistance by filing Github Issues on the appropriate repository.

Provider Documentation Examples Support Type
Google Documentation fog-google-examples Community

In order to maximize the benefits of open source, you are encouraged submit bugs to Github Issues

In this GitHub example, you could find an implementation for Google Cloud Storage.

Class List

At the RubyGems documentation for fog-google, you can find the class definitions and parameters. For example, the list_objects method:

#list_objects(bucket, options = {}) ⇒ Google::Apis::StorageV1::Objects Lists objects in a bucket matching some criteria.

Parameters:

  • bucket (String) — Name of bucket to list
  • options (Hash) (defaults to: {}) — Optional hash of options Options Hash (options):
  • :delimiter (String) — Delimiter to collapse objects under to emulate a directory-like mode
  • :max_results (Integer) — Maximum number of results to retrieve
  • :page_token (String) — Token to select a particular page of results
  • :prefix (String) — String that an object must begin with in order to be returned
  • :projection ("full", "noAcl") — Set of properties to return (defaults to “noAcl”)
  • :versions (Boolean) — If true, lists all versions of an object as distinct results (defaults to False)

Returns:

  • (Google::Apis::StorageV1::Objects)

Upvotes: 1

Related Questions