Sha256: 320ac5b7da89ac0726bd98713d65cd5bb492b070d30d9592d4b95d5161ef75ce

Contents?: true

Size: 2 KB

Versions: 1

Compression:

Stored size: 2 KB

Contents

# -*- encoding : utf-8 -*-
module Pacto
  class Contract < Pacto::Dash
    property :id
    property :file
    property :request,  required: true
    # Although I'd like response to be required, it complicates
    # the partial contracts used the rake generation task...
    # yet another reason I'd like to deprecate that feature
    property :response # , required: true
    property :values, default: {}
    # Gotta figure out how to use test doubles w/ coercion
    coerce_key :request,  RequestClause
    coerce_key :response, ResponseClause
    property :examples
    property :name, required: true
    property :adapter, default: proc { Pacto.configuration.adapter }
    property :consumer, default: proc { Pacto.configuration.default_consumer }
    property :provider, default: proc { Pacto.configuration.default_provider }

    def initialize(opts)
      if opts[:file]
        opts[:file] = Addressable::URI.convert_path(File.expand_path(opts[:file])).to_s
        opts[:name] ||= opts[:file]
      end
      opts[:id] ||= (opts[:summary] || opts[:file])
      super
    end

    def examples?
      examples && !examples.empty?
    end

    def stub_contract!(values = {})
      self.values = values
      adapter.stub_request!(self)
    end

    def simulate_request
      pacto_request, pacto_response = execute
      validate_response pacto_request, pacto_response
    end

    # Should this be deprecated?
    def validate_response(request, response)
      Pacto::Cops.perform_investigation request, response, self
    end

    def matches?(request_signature)
      request_pattern.matches? request_signature
    end

    def request_pattern
      request.pattern
    end

    def response_for(pacto_request)
      provider.response_for self, pacto_request
    end

    def execute(additional_values = {})
      # FIXME: Do we really need to store on the Contract, or just as a param for #stub_contact! and #execute?
      full_values = values.merge(additional_values)
      consumer.reenact(self, full_values)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pacto-0.4.0.rc1 lib/pacto/contract.rb