Sha256: b5bd331df085f9ee5ae435daabb3c7754f1c850e22bcc706583533f005ebff28

Contents?: true

Size: 1.65 KB

Versions: 1

Compression:

Stored size: 1.65 KB

Contents

# frozen_string_literal: true

require 'rider_kick/matchers/use_case_result'

RSpec.describe RiderKick::Matchers::UseCaseResult do
  describe '.call' do
    subject(:call) do
      described_class.call(result) do |matcher|
        matcher.success(&:to_s)
        matcher.failure { |failure_details| failure_details }
      end
    end

    context do
      let(:result) { Dry::Monads::Success('success!') }

      it { is_expected.to eq 'success!' }
    end

    context do
      let(:result) { Dry::Monads::Failure('failure!') }

      specify do
        expect(call).to eq RiderKick::Entities::FailureDetails.new(
                             message:          'failure!',
                             other_properties: {},
                             type:             'error'
        )
      end
    end

    context do
      let(:result) { Dry::Monads::Failure(['failure 1', 'failure 2']) }

      specify do
        expect(call).to eq RiderKick::Entities::FailureDetails.new(
                             message:          'failure 1, failure 2',
                             other_properties: {},
                             type:             'error'
        )
      end
    end

    context do
      let(:failure_details) do
        RiderKick::Entities::FailureDetails.new(
          message:          'failure!',
          other_properties: { a: :b },
          type:             'unauthorized'
        )
      end
      let(:result) { Dry::Monads::Failure(failure_details) }

      it { is_expected.to eq failure_details }
    end

    context do
      let(:result) { Dry::Monads::Failure(:no) }

      specify { expect { call }.to raise_error ArgumentError }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rider-kick-0.0.1 lib/rider_kick/matchers/use_case_result_spec.rb