Sha256: 61b5ffb47b2ca26738a280066a228e89e1acac46156f8df87cb1ee5377e4e92c

Contents?: true

Size: 1.8 KB

Versions: 9

Compression:

Stored size: 1.8 KB

Contents

require 'metaractor'
require 'forwardable'

module Metaractor
  module Spec
    module Helpers
      def context_creator(error_message: nil, error_messages: [], errors: [], valid: nil, invalid: nil, success: nil, failure: nil, **attributes)
        if error_message.present?
          error_messages << error_message
        end

        result = Interactor::Context.build(attributes)
        result.add_errors(messages: error_messages)
        result.add_errors(errors: errors)

        if (valid != nil && !valid) || (invalid != nil && invalid)
          result.invalidate!
        end

        if !result.errors.empty? ||
            result.invalid? ||
            (success != nil && !success) ||
            (failure != nil && failure)
          result.fail! rescue Interactor::Failure
        end

        result
      end
    end

    module Matchers
      def include_errors(*expected)
        Metaractor::Spec::Matchers::IncludeErrors.new(*expected)
      end

      class IncludeErrors
        extend Forwardable

        def initialize(*expected)
          @expected = expected
          @include = RSpec::Matchers::BuiltIn::Include.new(*@expected)
        end

        def matches?(actual)
          @actual = actual
          @include.matches?(full_messages)
        end

        def does_not_match?(actual)
          @actual = actual
          @include.does_not_match?(full_messages)
        end

        def at_path(*path)
          @path = path
          self
        end

        def_delegators :@include, :description, :failure_message, :failure_message_when_negated, :diffable?, :actual, :expected

        private

        def full_messages
          if @path
            @actual.errors.full_messages_for(*@path)
          else
            @actual.errors.full_messages
          end
        end
      end
    end

  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
metaractor-3.3.0 lib/metaractor/spec.rb
metaractor-3.2.0 lib/metaractor/spec.rb
metaractor-3.1.1 lib/metaractor/spec.rb
metaractor-3.1.0 lib/metaractor/spec.rb
metaractor-3.0.1 lib/metaractor/spec.rb
metaractor-3.0.0 lib/metaractor/spec.rb
metaractor-2.1.1 lib/metaractor/spec.rb
metaractor-2.1.0 lib/metaractor/spec.rb
metaractor-2.0.0 lib/metaractor/spec.rb