Sha256: 425cef506904bfd229c155ef491376a64c1cfaab89e14b85137dc6aaec7ba453

Contents?: true

Size: 1.37 KB

Versions: 3

Compression:

Stored size: 1.37 KB

Contents

require 'action_controller/test_case'

module Dicer
  module RSpec
    module ContextExampleGroup
      extend ActiveSupport::Concern

      included do
        metadata[:type] = :context

        controller

        let(:controller) do
          (
            example.metadata[:controller] ||
            ::ApplicationController
          ).new
        end

        before do
          controller.request =
            example.metadata[:request] ||
            ::ActionController::TestRequest.new

          Dicer::Context.current_controller = controller
        end

        subject(:context) { described_class.new }
      end

      module ClassMethods
        def controller(base_class = ::ApplicationController, &block)
          metadata[:controller] = Class.new(base_class) do
            def self.name; 'AnonymouseController'; end
          end
          metadata[:controller].class_eval(&block) if block
        end

        def request(env = nil, &block)
          test_request = ::ActionController::TestRequest.new(env)
          test_request.instance_eval(&block) if block

          metadata[:request] = test_request
        end
      end

      def request; controller.request; end
    end
  end

  ::RSpec.configure do |config|
    config.include(
      RSpec::ContextExampleGroup,
      :example_group => { :file_path => %r{spec/contexts} },
      :type => :context
    )
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dicer-0.3.0 lib/dicer/rspec/context_example_group.rb
dicer-0.2.0 lib/dicer/rspec/context_example_group.rb
dicer-0.1.0 lib/dicer/rspec/context_example_group.rb