Sha256: 623fa3a3014694cb7408f53f800da5ddce9859635bb7c2dc3e81baeb3516b626

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 KB

Contents

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

        class ValidFactoryMatcher < AktionTest::Matchers::Base
          def initialize(factory_name)
            @factory_name = factory_name
          end

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

          def expectation
            ":#{@factory_name} to be a valid factory."
          end

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

          def negative_problem
          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
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
aktion_test_rails-0.2.0 lib/aktion_test_rails/matchers/factory_girl/validation.rb