Rspec::ApiHelpers
Usefull Rspec helpers for APIs (currently JSONAPI and AM-JSON adapters are supported)
Installation
Add this line to your application's Gemfile:
gem 'rspec-api_helpers', '1.0.3'
And then execute:
$ bundle
Or install it yourself as:
$ gem install rspec-api_helpers
Usage
This Gem expects you to have set your rspec to use Rake::Test helpers as described
here because it checks last_response
attributes.
In your rails_helper.rb
add in the top:
require 'rspec/api_helpers'
Then you need to specify the adapter you want.
RSpec.configure do |config|
config.include Rspec::ApiHelpers.with(adapter: :json_api)
end
Other possible options for the adapter is active_model
.
You can also inject your custom made class by providing the class:
RSpec.configure do |config|
config.include Rspec::ApiHelpers.with(adapter: Adapter::Hal)
end
Examples
The library heavily uses dynamic scopes through procs (an alternative to eval).
General
it_returns_status(200)
It expects the HTTP response status to be 200.
it_includes_in_headers('SESSION_TOKEN' => proc{@user.token})
It expects the HTTP response to include this header (and value).
Resource
it_returns_attributes(resource: 'user', model: proc{@user}, attrs: [
:email, :name
])
It expects the JSON resource to contain :email and :name attributes and
be equal with with @user
methods.
it_returns_attribute_values(
resource: 'user', model: proc{@user}, attrs: [
:id, :name, :email, :admin, :activated, :created_at, :updated_at
], modifiers: {
[:created_at, :updated_at] => proc{|i| i.iso8601},
:id => proc{|i| i.to_s}
}
)
It expects the JSON resource to contain specific attribute values as above but for
:updated_at
, :created_at
and id
it applies specific methods first, defined in the
modifier
hash (note that the methods are applied in the JSON resource, not in the variable)
it_returns_no_attributes(
resource: 'user', attrs: [:foo1, :foo2, :foo3]
)
It expects the JSON resource to NOT contain any of those attributes.
Collection
it_returns_collection_size(resource: 'users', size: 6)
It expects the JSON collection to have 6
resources.
it_returns_collection_attributes(
resource: 'users', attrs: [
:id, :name, :email, :admin, :activated, :created_at, :updated_at
]
)
It expects the JSON collection to have those attributes (no value checking).
it_returns_no_collection_attributes(
resource: 'users', attrs: [
:foo
]
)
It expects the JSON collection NOT to have those attributes (no value checking).
it_returns_collection_attribute_values(
resource: 'users', model: proc{User.first!}, attrs: [
:id, :name, :email, :admin, :activated, :created_at, :updated_at
], modifiers: {
[:created_at, :updated_at] => proc{|i| i.iso8601},
:id => proc{|i| i.to_s}
}
)
It expects the JSON collection to contain specific attribute values as above but for
:updated_at
, :created_at
and id
it applies specific methods first, defined in the
modifier
hash (note that the methods are applied in the JSON resource, not in the variable)
To Do
- Enhance documentation
- Better dir structure (break example group methods to modules)
- Support for nested resources
- Add tests
- Support for HAL/Siren adapter
Contributing
- Fork it ( https://github.com/[my-github-username]/rspec-api_helpers/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request