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
|