# Soaspec This gem helps to represent multiple API tests against a backend briefly, concisely and clearly. It is essentially a wrapper around the Savon and RestClient gems. Note it is still in early stages of development. [![Build Status](https://gitlab.com/samuel-garratt/soaspec/badges/master/build.svg)](https://gitlab.com/samuel-garratt/soaspec/pipelines) [![Coverage](https://gitlab.com/samuel-garratt/soaspec/badges/master/coverage.svg)](https://samuel-garratt.gitlab.io/soaspec) ## Installation Add this line to your application's Gemfile: ```ruby gem 'soaspec' ``` And then execute: $ bundle Or install it yourself as: $ gem install soaspec [Things to be done](Todo.md) ## Getting Started To create a new test suite using this you can use the `soaspec` binary. Example: ``` mkdir 'api_test' cd 'api_test' soaspec new [rest/soap] bundle install ``` Then you can run the tests with: ``` rake spec ``` You can also use `soaspec generate` to generate a set of tests from a WSDL. This is still in trial period and will be finished probably after Savon 3 is more stable. ## Usage * SOAP - this uses Savon behind the scenes. Some defaults are overridden. Please see 'soap_handler.rb'-'default_options' method for such defaults. When describing an API override this in 'savon_options' method * REST - this uses the resource class from the Rest-Client gem behind the scenes. See specs for example of usage. This will be added to later. Basically you create a class inheriting from a ‘Handler’ class for each web service that’s tested. In this class you define the common parameters used for testing this class. For example: ```ruby class PuppyService < Soaspec::RestHandler headers accept: 'application/json', content_type: 'application/json' base_url 'http://petstore.swagger.io/v2/pet' element :id, :id element :category_id, '$..category.id' end ``` Then you reference this class in creating `Exchange`’s (representing a request / response pair). Upon initialization of the Exchange object or later on through setters, parameters specific to this request are set All getters of the Exchange are on the response & will implicitly trigger the API request to be made. For example: ```ruby context PuppyService.new('Order Puppies') do describe post(:create_pet, body: { status: 'sold' }) do # Post with status as sold in request its(['status']) { is_expected.to eq 'sold' } # Check responses status is sold end end ``` ### Recommended If you find having a large backtrace on errors or RSpec shared examples such as 'success scenarios' this can shorten the backtrace. RSpec.configure do |config| config.backtrace_exclusion_patterns = [ /rspec/ ] end ## Development After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). ## Contributing Bug reports and pull requests are welcome on GitLab at https://gitlab.com/samuel-garratt/soaspec. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. ## License The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT). ## Code of Conduct Everyone interacting in the Soaspec project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://gitlab.com/samuel-garratt/soaspec/blob/master/CODE_OF_CONDUCT.md).