class Kicker::Recipes::Rails

Public Class Methods

all_controller_tests() click to toggle source

Returns an array consiting of all controller tests.

# File lib/kicker/recipes/rails.rb, line 38
def all_controller_tests
  if test_type == 'test'
    Dir.glob("#{test_cases_root}/functional/**/*_test.rb")
  else
    Dir.glob("#{test_cases_root}/controllers/**/*_spec.rb")
  end
end
type_to_test_dir(type) click to toggle source

Maps type, for instance `models', to a test directory.

# File lib/kicker/recipes/rails.rb, line 11
def type_to_test_dir(type)
  if test_type == 'test'
    case type
    when "models"
      "unit"
    when "concerns"
      "unit/concerns"
    when "controllers", "views"
      "functional"
    when "helpers"
      "unit/helpers"
    end
  elsif test_type == 'spec'
    case type
    when "models"
      "models"
    when "concerns"
      "models/concerns"
    when "controllers", "views"
      "controllers"
    when "helpers"
      "helpers"
    end
  end
end

Public Instance Methods

handle!() click to toggle source
Calls superclass method Kicker::Recipes::Ruby#handle!
# File lib/kicker/recipes/rails.rb, line 64
def handle!
  @tests.concat(@files.take_and_map do |file|
    case file
    # Run all functional tests when routes.rb is saved
    when 'config/routes.rb'
      Kicker::Recipes::Rails.all_controller_tests

    # Match lib/*
    when /^(lib\/.+)\.rb$/
      test_file($1)

    # Map fixtures to their related tests
    when %r{^#{test_cases_root}/fixtures/(\w+)\.yml$}
      tests_for_model($1)

    # Match any file in app/ and map it to a test file
    when %r{^app/(\w+)([\w/]*)/([\w\.]+)\.\w+$}
      type, namespace, file = $1, $2, $3

      if dir = Kicker::Recipes::Rails.type_to_test_dir(type)
        if type == "views"
          namespace = namespace.split('/')[1..-1]
          file = "#{namespace.pop}_controller"
        end

        test_file File.join(dir, namespace, file)
      end
    end
  end)

  # And let the Ruby handler match other stuff.
  super
end
tests_for_model(model) click to toggle source

Returns an array of all tests related to the given model.

# File lib/kicker/recipes/rails.rb, line 48
def tests_for_model(model)
  if test_type == 'test'
    %W{
      unit/#{ActiveSupport::Inflector.singularize(model)}
      unit/helpers/#{ActiveSupport::Inflector.pluralize(model)}_helper
      functional/#{ActiveSupport::Inflector.pluralize(model)}_controller
    }
  else
    %W{
      models/#{ActiveSupport::Inflector.singularize(model)}
      helpers/#{ActiveSupport::Inflector.pluralize(model)}_helper
      controllers/#{ActiveSupport::Inflector.pluralize(model)}_controller
    }
  end.map { |f| test_file f }
end