aboutsummaryrefslogtreecommitdiffstats
path: root/railties/test/commands/notes_test.rb
blob: 91825414130ffcd3d61656f59ad7b651bded222a (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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# 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

  test "displays results from additional tags added to the default tags from a config file" do
    app_file "app/models/profile.rb", "# TESTME: some method to test"
    app_file "app/controllers/hello_controller.rb", "# DEPRECATEME: this action is no longer needed"
    app_file "db/some_seeds.rb", "# TODO: default tags such as TODO are still present"

    add_to_config 'config.annotations.register_tags "TESTME", "DEPRECATEME"'

    assert_equal <<~OUTPUT, run_notes_command
      app/controllers/hello_controller.rb:
        * [1] [DEPRECATEME] this action is no longer needed

      app/models/profile.rb:
        * [1] [TESTME] some method to test

      db/some_seeds.rb:
        * [1] [TODO] default tags such as TODO are still present

    OUTPUT
  end

  test "does not display results from tags that are neither default nor registered" do
    app_file "app/models/profile.rb", "# TESTME: some method to test"
    app_file "app/controllers/hello_controller.rb", "# DEPRECATEME: this action is no longer needed"
    app_file "db/some_seeds.rb", "# TODO: default tags such as TODO are still present"
    app_file "db/some_other_seeds.rb", "# BAD: this note should not be listed"

    add_to_config 'config.annotations.register_tags "TESTME", "DEPRECATEME"'

    assert_equal <<~OUTPUT, run_notes_command
      app/controllers/hello_controller.rb:
        * [1] [DEPRECATEME] this action is no longer needed

      app/models/profile.rb:
        * [1] [TESTME] some method to test

      db/some_seeds.rb:
        * [1] [TODO] default tags such as TODO are still present

    OUTPUT
  end

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