Sha256: 68f03b3cc93a7bf18e0ab9bcd6f80a230a8e8e66a7f417cb8fe7fcb2a85e6c8f

Contents?: true

Size: 1.24 KB

Versions: 2

Compression:

Stored size: 1.24 KB

Contents

module AktionTestRails
  module Matchers
    module FactoryGirl
      def have_a_valid_factory(factory_name)
        ValidFactoryMatcher.new(factory_name)
      end

      class ValidFactoryMatcher
        def initialize(factory_name)
          @factory_name = factory_name
        end

        def matches?(subject)
          factory_exists? && factory_creates_valid_record?
        end

        def failure_message
          message = "Expected :#{@factory_name} to be a valid factory."
          if factory_exists?
            if @record.errors.full_messages.any?
              message << "\n  Failed Validations:"
              @record.errors.full_messages.each do |error|
                message << "\n    #{error}"
              end
            end
          else
            message << "\n  No factory by the name :#{@factory_name} found"
          end
          message
        end

        def description
          "has a valid factory named :#{@factory_name}"
        end

      protected

        def factory_exists?
          ::FactoryGirl.factories.registered?(@factory_name)
        end

        def factory_creates_valid_record?
          @record = ::FactoryGirl.build(@factory_name)
          @record.valid?
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
aktion_test_rails-0.1.1 lib/aktion_test_rails/matchers/factory_girl/have_a_valid_factory.rb
aktion_test_rails-0.1.0 lib/aktion_test_rails/matchers/factory_girl/have_a_valid_factory.rb