Skip to content

pezra/rspec-hal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status Code Climate

Rspec Hal

Provides matchers and convenience methods for verifying HAL documents.

Usage

Given the following string stored in a_user_doc.

 {
   "name": "Alice",
   "hobbies": [{"name": "Basketball", "type": "sport"},
               {"name": "Basket weaving", "type": "craft"}],
   "_links": {
     "self": { "href": "http://example.com/alice" },
     "knows": [{ "href": "http://example.com/bob" },
               { "href": "http://example.com/jane" }],
     "checkBusy": { "href": "http://example.com/is_alice_busy{?at}",
                    "templated": true }
   }
 }

Rspec Hal allows very expressive validation of documents.

    expect(a_user_doc).to be_hal

    expect(a_user_doc).not_to be_hal_collection

    expect(a_user_doc).to have_property "name"
    expect(a_user_doc).to have_property 'name', eq("Alice")
    expect(a_user_doc).to have_property :name, matching(/ice$/)
    expect(a_user_doc).to have_property 'hobbies', including(a_hash_including('type' => 'sport'))

    expect(a_user_doc).to have_relation "knows"
    expect(a_user_doc).to have_relation "knows", eq("http://example.com/jane")

    expect(a_user_doc).to have_templated_relation "checkBusy"
    expect(a_user_doc).to have_templated_relation "checkBusy", with_variable("at")
    expect(a_user_doc).to have_templated_relation("checkBusy").with_variables("at")

    expect(parse_hal(users_collection_doc).first).to have_property "name"

Any matcher (actually anything that responds to #===) can be passed as the second argument and will be used to verify the property value or the link href.

be_hal_collection checks that the document is both a valid HAL document and is a page of an RFC 6573 collection

be_hal checks that the document is both a valid HAL document.

Installation

Add this line to your application's Gemfile:

gem 'rspec-hal'

And then execute:

$ bundle

Or install it yourself as:

$ gem install rspec-hal

Then include the matchers by adding this to your spec_helper

RSpec.configuration.include RSpec::Hal::Matchers
RSpec.configuration.include RSpec::Hal::Helpers

(Don't forget to require "rspec-hal" if you are not using bundler.)

If you want to only include the matchers for certain type of specs (say, view specs for example)

RSpec.configuration.include RSpec::Hal::Matchers, type: 'view'
RSpec.configuration.include RSpec::Hal::Helpers, type: 'view'

Contributing

  1. Fork it ( http://github.com/pezra/rspec-hal/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Make your changes and lib/rspec/hal/version.rb following semver rules
  4. Commit your changes (git commit -am 'Add some feature')
  5. Push to the branch (git push origin my-new-feature)
  6. Create new Pull Request

About

Matchers and convenience methods for verifying HAL documents.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages