aboutsummaryrefslogtreecommitdiffstats
path: root/railties/test/commands/notes_test.rb
blob: 147019e29911b1fe2741fe40ee5434078308082f (plain) (blame)
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
41
42
43
44
45
46
47
48
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
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
124
125
126
127
128
# 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

  test "`rails notes` displays results for default directories and default annotations with aligned line number and annotation tag" do
    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"
    app_file "test/some_test.rb", "\n" * 100 + "# FIXME: note in test directory"

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

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

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

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

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

      test/some_test.rb:
        * [101] [FIXME] note in test directory

    OUTPUT
  end

  test "`rails notes` displays an empty string when no results were found" do
    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"
    app_file "test/some_test.rb", "# FIXME: note in test directory"

    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:
        * [1] note in db directory

      test/some_test.rb:
        * [1] note in test directory

    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"

    app_file "test/some_test.rb", "# FIXME: note in test directory"

    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

  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

  private
    def run_notes_command(args = [])
      rails "notes", args
    end
end