Sha256: 310aaa0ae12f4781c8bff723d3341637d3e5c84ae7e69da46ece77b9bb97d259

Contents?: true

Size: 1.96 KB

Versions: 3

Compression:

Stored size: 1.96 KB

Contents

require 'spec_helper'

describe Trackerific::Services::Concerns::SOAP do
  subject { TestConcernsSOAP }

  describe "#track" do
    let(:track_operation) { double(:track_operation) }
    let(:package_id) { "PACKAGE ID" }

    let(:builder) { double(:builder) }
    let(:builder_instance) { double(:builder_instance) }
    let(:builder_hash) { {'this' => 'hash'} }

    let(:parser) { double(:parser) }
    let(:parser_instance) { double(:parser_instance) }
    let(:parser_response) { double(:parser_response) }

    let(:wsdl) { 'fedex/TrackService_v8' }
    let(:wsdl_path) { Trackerific::SOAP::WSDL.path(wsdl) }
    let(:client) { double(:savon_client) }
    let(:soap_request) { double(:soap_request) }

    before do
      TestConcernsSOAP.configure do |config|
        config.track_operation = track_operation
        config.wsdl = wsdl
        config.builder = builder
        config.parser = parser
      end

      builder.stub(:members).and_return([:user_id, :package_id])
      builder.should_receive(:new).with("USER ID", package_id).and_return(builder_instance)
      builder_instance.stub(:hash).and_return(builder_hash)

      Savon.should_receive(:client).with(convert_request_keys_to: :camelcase, wsdl: wsdl_path).and_return(client)
      client.should_receive(:call).with(track_operation, message: builder_hash).and_return(soap_request)

      parser.should_receive(:new).with(package_id, soap_request).and_return(parser_instance)
      parser_instance.should_receive(:parse).and_return(parser_response)
    end

    subject { TestConcernsSOAP.new.track(package_id) }

    context "when the parser responds with a Trackerific::Error" do
      let(:parser_response) { Trackerific::Error.new }
      it "should raise the error" do
        expect { subject }.to raise_error Trackerific::Error
      end
    end

    context "when the parser responds with a Trackerific::Details" do
      let(:parser_response) { Trackerific::Details.new }
      it { should be parser_response }
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
trackerific-0.7.5 spec/lib/trackerific/services/concerns/soap_spec.rb
trackerific-0.7.4 spec/lib/trackerific/services/concerns/soap_spec.rb
trackerific-0.7.3 spec/lib/trackerific/services/concerns/soap_spec.rb