notes_test.rb 4.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
# frozen_string_literal: true

require "isolation/abstract_unit"
require "rails/command"
require "rails/commands/notes/notes_command"

class Rails::Command::NotesTest < ActiveSupport::TestCase
  setup :build_app
  teardown :teardown_app

11
  test "`rails notes` displays results for default directories and default annotations with aligned line number and annotation tag" do
12 13 14 15
    app_file "app/controllers/some_controller.rb", "# OPTIMIZE: note in app directory"
    app_file "config/initializers/some_initializer.rb", "# TODO: note in config directory"
    app_file "db/some_seeds.rb", "# FIXME: note in db directory"
    app_file "lib/some_file.rb", "# TODO: note in lib directory"
16
    app_file "test/some_test.rb", "\n" * 100 + "# FIXME: note in test directory"
17 18 19 20 21

    app_file "some_other_dir/blah.rb", "# TODO: note in some_other directory"

    assert_equal <<~OUTPUT, run_notes_command
      app/controllers/some_controller.rb:
22
        * [  1] [OPTIMIZE] note in app directory
23 24

      config/initializers/some_initializer.rb:
25
        * [  1] [TODO] note in config directory
26 27

      db/some_seeds.rb:
28
        * [  1] [FIXME] note in db directory
29 30

      lib/some_file.rb:
31
        * [  1] [TODO] note in lib directory
32 33

      test/some_test.rb:
34
        * [101] [FIXME] note in test directory
35 36 37 38

    OUTPUT
  end

39
  test "`rails notes` displays an empty string when no results were found" do
40 41 42 43 44
    assert_equal "", run_notes_command
  end

  test "`rails notes --annotations` displays results for a single annotation without being prefixed by a tag" do
    app_file "db/some_seeds.rb", "# FIXME: note in db directory"
45
    app_file "test/some_test.rb", "# FIXME: note in test directory"
46 47 48 49 50 51

    app_file "app/controllers/some_controller.rb", "# OPTIMIZE: note in app directory"
    app_file "config/initializers/some_initializer.rb", "# TODO: note in config directory"

    assert_equal <<~OUTPUT, run_notes_command(["--annotations", "FIXME"])
      db/some_seeds.rb:
52
        * [1] note in db directory
53 54

      test/some_test.rb:
55
        * [1] note in test directory
56 57 58 59 60 61 62 63 64

    OUTPUT
  end

  test "`rails notes --annotations` displays results for multiple annotations being prefixed by a tag" do
    app_file "app/controllers/some_controller.rb", "# FOOBAR: note in app directory"
    app_file "config/initializers/some_initializer.rb", "# TODO: note in config directory"
    app_file "lib/some_file.rb", "# TODO: note in lib directory"

65
    app_file "test/some_test.rb", "# FIXME: note in test directory"
66 67 68 69 70 71 72 73 74 75 76 77 78 79

    assert_equal <<~OUTPUT, run_notes_command(["--annotations", "FOOBAR", "TODO"])
      app/controllers/some_controller.rb:
        * [1] [FOOBAR] note in app directory

      config/initializers/some_initializer.rb:
        * [1] [TODO] note in config directory

      lib/some_file.rb:
        * [1] [TODO] note in lib directory

    OUTPUT
  end

80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
  test "displays results from additional directories added to the default directories from a config file" do
    app_file "db/some_seeds.rb", "# FIXME: note in db directory"
    app_file "lib/some_file.rb", "# TODO: note in lib directory"
    app_file "spec/spec_helper.rb", "# TODO: note in spec"
    app_file "spec/models/user_spec.rb", "# TODO: note in model spec"

    add_to_config "config.annotations.register_directories \"spec\""

    assert_equal <<~OUTPUT, run_notes_command
      db/some_seeds.rb:
        * [1] [FIXME] note in db directory

      lib/some_file.rb:
        * [1] [TODO] note in lib directory

      spec/models/user_spec.rb:
        * [1] [TODO] note in model spec

      spec/spec_helper.rb:
        * [1] [TODO] note in spec

    OUTPUT
  end

  test "displays results from additional file extensions added to the default extensions from a config file" do
    add_to_config "config.assets.precompile = []"
    add_to_config %q{ config.annotations.register_extensions("scss", "sass") { |annotation| /\/\/\s*(#{annotation}):?\s*(.*)$/ } }
    app_file "db/some_seeds.rb", "# FIXME: note in db directory"
    app_file "app/assets/stylesheets/application.css.scss", "// TODO: note in scss"
    app_file "app/assets/stylesheets/application.css.sass", "// TODO: note in sass"

    assert_equal <<~OUTPUT, run_notes_command
      app/assets/stylesheets/application.css.sass:
        * [1] [TODO] note in sass

      app/assets/stylesheets/application.css.scss:
        * [1] [TODO] note in scss

      db/some_seeds.rb:
        * [1] [FIXME] note in db directory

    OUTPUT
  end

124 125 126 127 128
  private
    def run_notes_command(args = [])
      rails "notes", args
    end
end