api_app_generator_test.rb 2.0 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
require 'generators/generators_test_helper'
require 'rails/generators/rails/app/app_generator'

class ApiAppGeneratorTest < Rails::Generators::TestCase
  include GeneratorsTestHelper
  tests Rails::Generators::AppGenerator

  arguments [destination_root, '--api']

  def setup
    Rails.application = TestApp::Application
    super

    Kernel::silence_warnings do
      Thor::Base.shell.send(:attr_accessor, :always_force)
      @shell = Thor::Base.shell.new
      @shell.send(:always_force=, true)
    end
  end

  def teardown
    super
    Rails.application = TestApp::Application.instance
  end

  def test_skeleton_is_created
    run_generator

    default_files.each { |path| assert_file path }
    skipped_files.each { |path| assert_no_file path }
  end

  def test_api_modified_files
    run_generator

    assert_file "Gemfile" do |content|
      assert_no_match(/gem 'coffee-rails'/, content)
      assert_no_match(/gem 'jquery-rails'/, content)
      assert_no_match(/gem 'sass-rails'/, content)
    end
41

42 43 44 45
    assert_file "config/application.rb" do |content|
      assert_match(/config.api_only = true/, content)
    end

46 47 48
    assert_file "config/initializers/wrap_parameters.rb" do |content|
      assert_no_match(/wrap_parameters/, content)
    end
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
    assert_file "app/controllers/application_controller.rb", /ActionController::API/
  end

  private

  def default_files
    files = %W(
      .gitignore
      Gemfile
      Rakefile
      config.ru
      app/controllers
      app/mailers
      app/models
      config/environments
      config/initializers
      config/locales
      db
      lib
      lib/tasks
      log
      test/fixtures
      test/controllers
      test/integration
      test/models
    )
    files.concat %w(bin/bundle bin/rails bin/rake)
    files
  end

  def skipped_files
80
    %w(app/assets
81
       app/helpers
82
       app/views
83
       config/initializers/assets.rb
84 85
       config/initializers/cookies_serializer.rb
       config/initializers/session_store.rb
86
       lib/assets
87
       vendor/assets
88
       test/helpers
89 90 91
       tmp/cache/assets)
  end
end