puppet-lint-halyard 1.1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +10 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +20 -0
  6. data/README.md +210 -0
  7. data/Rakefile +14 -0
  8. data/bin/puppet-lint +7 -0
  9. data/lib/puppet-lint.rb +214 -0
  10. data/lib/puppet-lint/bin.rb +79 -0
  11. data/lib/puppet-lint/checkplugin.rb +176 -0
  12. data/lib/puppet-lint/checks.rb +91 -0
  13. data/lib/puppet-lint/configuration.rb +153 -0
  14. data/lib/puppet-lint/data.rb +521 -0
  15. data/lib/puppet-lint/lexer.rb +373 -0
  16. data/lib/puppet-lint/lexer/token.rb +101 -0
  17. data/lib/puppet-lint/monkeypatches.rb +2 -0
  18. data/lib/puppet-lint/monkeypatches/string_percent.rb +52 -0
  19. data/lib/puppet-lint/monkeypatches/string_prepend.rb +13 -0
  20. data/lib/puppet-lint/optparser.rb +118 -0
  21. data/lib/puppet-lint/plugins.rb +74 -0
  22. data/lib/puppet-lint/plugins/check_classes.rb +285 -0
  23. data/lib/puppet-lint/plugins/check_comments.rb +55 -0
  24. data/lib/puppet-lint/plugins/check_conditionals.rb +65 -0
  25. data/lib/puppet-lint/plugins/check_documentation.rb +31 -0
  26. data/lib/puppet-lint/plugins/check_nodes.rb +29 -0
  27. data/lib/puppet-lint/plugins/check_resources.rb +194 -0
  28. data/lib/puppet-lint/plugins/check_strings.rb +174 -0
  29. data/lib/puppet-lint/plugins/check_variables.rb +19 -0
  30. data/lib/puppet-lint/plugins/check_whitespace.rb +170 -0
  31. data/lib/puppet-lint/tasks/puppet-lint.rb +91 -0
  32. data/lib/puppet-lint/version.rb +3 -0
  33. data/puppet-lint.gemspec +24 -0
  34. data/spec/fixtures/test/manifests/fail.pp +2 -0
  35. data/spec/fixtures/test/manifests/ignore.pp +1 -0
  36. data/spec/fixtures/test/manifests/ignore_multiple_block.pp +6 -0
  37. data/spec/fixtures/test/manifests/ignore_multiple_line.pp +2 -0
  38. data/spec/fixtures/test/manifests/ignore_reason.pp +1 -0
  39. data/spec/fixtures/test/manifests/init.pp +3 -0
  40. data/spec/fixtures/test/manifests/malformed.pp +1 -0
  41. data/spec/fixtures/test/manifests/url_interpolation.pp +12 -0
  42. data/spec/fixtures/test/manifests/warning.pp +2 -0
  43. data/spec/puppet-lint/bin_spec.rb +326 -0
  44. data/spec/puppet-lint/configuration_spec.rb +56 -0
  45. data/spec/puppet-lint/ignore_overrides_spec.rb +109 -0
  46. data/spec/puppet-lint/lexer/token_spec.rb +18 -0
  47. data/spec/puppet-lint/lexer_spec.rb +783 -0
  48. data/spec/puppet-lint/plugins/check_classes/autoloader_layout_spec.rb +105 -0
  49. data/spec/puppet-lint/plugins/check_classes/class_inherits_from_params_class_spec.rb +35 -0
  50. data/spec/puppet-lint/plugins/check_classes/inherits_across_namespaces_spec.rb +33 -0
  51. data/spec/puppet-lint/plugins/check_classes/names_containing_dash_spec.rb +45 -0
  52. data/spec/puppet-lint/plugins/check_classes/nested_classes_or_defines_spec.rb +76 -0
  53. data/spec/puppet-lint/plugins/check_classes/parameter_order_spec.rb +73 -0
  54. data/spec/puppet-lint/plugins/check_classes/right_to_left_relationship_spec.rb +25 -0
  55. data/spec/puppet-lint/plugins/check_classes/variable_scope_spec.rb +196 -0
  56. data/spec/puppet-lint/plugins/check_comments/slash_comments_spec.rb +45 -0
  57. data/spec/puppet-lint/plugins/check_comments/star_comments_spec.rb +84 -0
  58. data/spec/puppet-lint/plugins/check_conditionals/case_without_default_spec.rb +98 -0
  59. data/spec/puppet-lint/plugins/check_conditionals/selector_inside_resource_spec.rb +36 -0
  60. data/spec/puppet-lint/plugins/check_documentation/documentation_spec.rb +52 -0
  61. data/spec/puppet-lint/plugins/check_nodes/unquoted_node_name_spec.rb +146 -0
  62. data/spec/puppet-lint/plugins/check_resources/duplicate_params_spec.rb +100 -0
  63. data/spec/puppet-lint/plugins/check_resources/ensure_first_param_spec.rb +55 -0
  64. data/spec/puppet-lint/plugins/check_resources/ensure_not_symlink_target_spec.rb +89 -0
  65. data/spec/puppet-lint/plugins/check_resources/file_mode_spec.rb +113 -0
  66. data/spec/puppet-lint/plugins/check_resources/unquoted_file_mode_spec.rb +45 -0
  67. data/spec/puppet-lint/plugins/check_resources/unquoted_resource_title_spec.rb +216 -0
  68. data/spec/puppet-lint/plugins/check_strings/double_quoted_strings_spec.rb +199 -0
  69. data/spec/puppet-lint/plugins/check_strings/only_variable_string_spec.rb +114 -0
  70. data/spec/puppet-lint/plugins/check_strings/puppet_url_without_modules_spec.rb +62 -0
  71. data/spec/puppet-lint/plugins/check_strings/quoted_booleans_spec.rb +129 -0
  72. data/spec/puppet-lint/plugins/check_strings/single_quote_string_with_variables_spec.rb +17 -0
  73. data/spec/puppet-lint/plugins/check_strings/variables_not_enclosed_spec.rb +73 -0
  74. data/spec/puppet-lint/plugins/check_variables/variable_contains_dash_spec.rb +37 -0
  75. data/spec/puppet-lint/plugins/check_whitespace/2sp_soft_tabs_spec.rb +21 -0
  76. data/spec/puppet-lint/plugins/check_whitespace/80chars_spec.rb +54 -0
  77. data/spec/puppet-lint/plugins/check_whitespace/arrow_alignment_spec.rb +524 -0
  78. data/spec/puppet-lint/plugins/check_whitespace/hard_tabs_spec.rb +45 -0
  79. data/spec/puppet-lint/plugins/check_whitespace/trailing_whitespace_spec.rb +101 -0
  80. data/spec/puppet-lint_spec.rb +20 -0
  81. data/spec/spec_helper.rb +129 -0
  82. metadata +229 -0
@@ -0,0 +1,100 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'duplicate_params' do
4
+ let(:msg) { 'duplicate parameter found in resource' }
5
+
6
+ context 'resource with duplicate parameters' do
7
+ let(:code) { "
8
+ file { '/tmp/foo':
9
+ ensure => present,
10
+ foo => bar,
11
+ baz => gronk,
12
+ foo => meh,
13
+ }"
14
+ }
15
+
16
+ it 'should only detect a single problem' do
17
+ expect(problems).to have(1).problem
18
+ end
19
+
20
+ it 'should create an error' do
21
+ expect(problems).to contain_error(msg).on_line(6).in_column(9)
22
+ end
23
+ end
24
+
25
+ context 'bug #145: resource with a hash and no duplicate parameters' do
26
+ let(:code) { "
27
+ class {'fooname':
28
+ hashes => [
29
+ { foo => 'bar01',},
30
+ { foo => 'bar02', },
31
+ ],
32
+ }"
33
+ }
34
+
35
+ it 'should not detect any errors' do
36
+ expect(problems).to have(0).problems
37
+ end
38
+ end
39
+
40
+ context 'bug #145: resource with a hash and duplicate parameters in subhash' do
41
+ let(:code) { "
42
+ class {'fooname':
43
+ hashes => [
44
+ { foo => 'bar01',
45
+ foo => 'bar02', },
46
+ ],
47
+ }"
48
+ }
49
+
50
+ it 'should only detect a single error' do
51
+ expect(problems).to have(1).problem
52
+ end
53
+
54
+ it 'should create an error' do
55
+ expect(problems).to contain_error(msg).on_line(5).in_column(13)
56
+ end
57
+ end
58
+
59
+ context 'bug #145: resource with a hash and duplicate parameters in parent type' do
60
+ let(:code) { "
61
+ class {'fooname':
62
+ hashes => [
63
+ { foo => 'bar01', },
64
+ { foo => 'bar02', },
65
+ ],
66
+ something => { hash => 'mini', },
67
+ hashes => 'dupe',
68
+ }"
69
+ }
70
+
71
+ it 'should only detect a single problem' do
72
+ expect(problems).to have(1).problem
73
+ end
74
+
75
+ it 'should create an error' do
76
+ expect(problems).to contain_error(msg).on_line(8).in_column(9)
77
+ end
78
+ end
79
+
80
+ describe 'bug #145: more hash tests and no duplicate parameters' do
81
+ let(:code) { "
82
+ class test {
83
+ $foo = { param => 'value', }
84
+ $bar = { param => 'bar', }
85
+ }"
86
+ }
87
+
88
+ it 'should not detect any problems' do
89
+ expect(problems).to have(0).problems
90
+ end
91
+ end
92
+
93
+ context 'colon as last token in file' do
94
+ let(:code) { "}:" }
95
+
96
+ it 'should not detect any problems' do
97
+ expect(problems).to have(0).problems
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'ensure_first_param' do
4
+ let(:msg) { "ensure found on line but it's not the first attribute" }
5
+
6
+ context 'ensure as only attr in a single line resource' do
7
+ let(:code) { "file { 'foo': ensure => present }" }
8
+
9
+ it 'should not detect any problems' do
10
+ expect(problems).to have(0).problems
11
+ end
12
+ end
13
+
14
+ context 'ensure as only attr in a multi line resource' do
15
+ let(:code) { "
16
+ file { 'foo':
17
+ ensure => present,
18
+ }"
19
+ }
20
+
21
+ it 'should not detect any problems' do
22
+ expect(problems).to have(0).problems
23
+ end
24
+ end
25
+
26
+ context 'ensure as second attr in a multi line resource' do
27
+ let(:code) { "
28
+ file { 'foo':
29
+ mode => '0000',
30
+ ensure => present,
31
+ }"
32
+ }
33
+
34
+ it 'should only detect a single problem' do
35
+ expect(problems).to have(1).problem
36
+ end
37
+
38
+ it 'should create a warning' do
39
+ expect(problems).to contain_warning(msg).on_line(4).in_column(9)
40
+ end
41
+ end
42
+
43
+ context 'ensure as first attr in a multi line resource' do
44
+ let(:code) { "
45
+ file { 'foo':
46
+ ensure => present,
47
+ mode => '0000',
48
+ }"
49
+ }
50
+
51
+ it 'should not detect any problems' do
52
+ expect(problems).to have(0).problems
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'ensure_not_symlink_target' do
4
+ let(:msg) { 'symlink target specified in ensure attr' }
5
+
6
+ context 'with fix disabled' do
7
+ context 'file resource creating a symlink with seperate target attr' do
8
+ let(:code) { "
9
+ file { 'foo':
10
+ ensure => link,
11
+ target => '/foo/bar',
12
+ }"
13
+ }
14
+
15
+ it 'should not detect any problems' do
16
+ expect(problems).to have(0).problems
17
+ end
18
+ end
19
+
20
+ context 'file resource creating a symlink with target specified in ensure' do
21
+ let(:code) { "
22
+ file { 'foo':
23
+ ensure => '/foo/bar',
24
+ }"
25
+ }
26
+
27
+ it 'should only detect a single problem' do
28
+ expect(problems).to have(1).problem
29
+ end
30
+
31
+ it 'should create a warning' do
32
+ expect(problems).to contain_warning(msg).on_line(3).in_column(21)
33
+ end
34
+ end
35
+ end
36
+
37
+ context 'with fix enabled' do
38
+ before do
39
+ PuppetLint.configuration.fix = true
40
+ end
41
+
42
+ after do
43
+ PuppetLint.configuration.fix = false
44
+ end
45
+
46
+ context 'file resource creating a symlink with seperate target attr' do
47
+ let(:code) { "
48
+ file { 'foo':
49
+ ensure => link,
50
+ target => '/foo/bar',
51
+ }"
52
+ }
53
+
54
+ it 'should not detect any problems' do
55
+ expect(problems).to have(0).problems
56
+ end
57
+
58
+ it 'should not modify the manifest' do
59
+ expect(manifest).to eq(code)
60
+ end
61
+ end
62
+
63
+ context 'file resource creating a symlink with target specified in ensure' do
64
+ let(:code) { "
65
+ file { 'foo':
66
+ ensure => '/foo/bar',
67
+ }"
68
+ }
69
+ let(:fixed) { "
70
+ file { 'foo':
71
+ ensure => symlink,
72
+ target => '/foo/bar',
73
+ }"
74
+ }
75
+
76
+ it 'should only detect a single problem' do
77
+ expect(problems).to have(1).problem
78
+ end
79
+
80
+ it 'should fix the problem' do
81
+ expect(problems).to contain_fixed(msg).on_line(3).in_column(21)
82
+ end
83
+
84
+ it 'should create a new target param' do
85
+ expect(manifest).to eq(fixed)
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,113 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'file_mode' do
4
+ let(:msg) { 'mode should be represented as a 4 digit octal value or symbolic mode' }
5
+
6
+ context 'with fix disabled' do
7
+ context '3 digit file mode' do
8
+ let(:code) { "file { 'foo': mode => '777' }" }
9
+
10
+ it 'should only detect a single problem' do
11
+ expect(problems).to have(1).problem
12
+ end
13
+
14
+ it 'should create a warning' do
15
+ expect(problems).to contain_warning(msg).on_line(1).in_column(23)
16
+ end
17
+ end
18
+
19
+ context '4 digit file mode' do
20
+ let(:code) { "file { 'foo': mode => '0777' }" }
21
+
22
+ it 'should not detect any problems' do
23
+ expect(problems).to have(0).problems
24
+ end
25
+ end
26
+
27
+ context 'file mode as a variable' do
28
+ let(:code) { "file { 'foo': mode => $file_mode }" }
29
+
30
+ it 'should not detect any problems' do
31
+ expect(problems).to have(0).problems
32
+ end
33
+ end
34
+
35
+ context 'symbolic file mode' do
36
+ let(:code) { "file { 'foo': mode => 'u=rw,og=r' }" }
37
+
38
+ it 'should not detect any problems' do
39
+ expect(problems).to have(0).problems
40
+ end
41
+ end
42
+
43
+ context 'file mode undef unquoted' do
44
+ let(:code) { "file { 'foo': mode => undef }" }
45
+
46
+ it 'should not detect any problems' do
47
+ expect(problems).to have(0).problems
48
+ end
49
+ end
50
+
51
+ context 'file mode undef quoted' do
52
+ let(:code) { "file { 'foo': mode => 'undef' }" }
53
+
54
+ it 'should only detect a single problem' do
55
+ expect(problems).to have(1).problem
56
+ end
57
+
58
+ it 'should create a warning' do
59
+ expect(problems).to contain_warning(msg).on_line(1).in_column(23)
60
+ end
61
+ end
62
+
63
+ context 'mode as audit value' do
64
+ let(:code) { "file { '/etc/passwd': audit => [ owner, mode ], }" }
65
+
66
+ it 'should not detect any problems' do
67
+ expect(problems).to have(0).problems
68
+ end
69
+ end
70
+ end
71
+
72
+ context 'with fix enabled' do
73
+ before do
74
+ PuppetLint.configuration.fix = true
75
+ end
76
+
77
+ after do
78
+ PuppetLint.configuration.fix = false
79
+ end
80
+
81
+ context '3 digit file mode' do
82
+ let(:code) { "file { 'foo': mode => '777' }" }
83
+
84
+ it 'should only detect a single problem' do
85
+ expect(problems).to have(1).problem
86
+ end
87
+
88
+ it 'should fix the manifest' do
89
+ expect(problems).to contain_fixed(msg).on_line(1).in_column(23)
90
+ end
91
+
92
+ it 'should zero pad the file mode' do
93
+ expect(manifest).to eq("file { 'foo': mode => '0777' }")
94
+ end
95
+ end
96
+
97
+ context 'file mode undef quoted' do
98
+ let(:code) { "file { 'foo': mode => 'undef' }" }
99
+
100
+ it 'should only detect a single problem' do
101
+ expect(problems).to have(1).problem
102
+ end
103
+
104
+ it 'should create a warning' do
105
+ expect(problems).to contain_warning(msg).on_line(1).in_column(23)
106
+ end
107
+
108
+ it 'should not modify the original manifest' do
109
+ expect(manifest).to eq(code)
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'unquoted_file_mode' do
4
+ let(:msg) { 'unquoted file mode' }
5
+
6
+ context 'with fix disabled' do
7
+ context '4 digit unquoted file mode' do
8
+ let(:code) { "file { 'foo': mode => 0777 }" }
9
+
10
+ it 'should only detect a single problem' do
11
+ expect(problems).to have(1).problem
12
+ end
13
+
14
+ it 'should create a warning' do
15
+ expect(problems).to contain_warning(msg).on_line(1).in_column(23)
16
+ end
17
+ end
18
+ end
19
+
20
+ context 'with fix enabled' do
21
+ before do
22
+ PuppetLint.configuration.fix = true
23
+ end
24
+
25
+ after do
26
+ PuppetLint.configuration.fix = false
27
+ end
28
+
29
+ context '4 digit unquoted file mode w/fix' do
30
+ let(:code) { "file { 'foo': mode => 0777 }" }
31
+
32
+ it 'should only detect a single problem' do
33
+ expect(problems).to have(1).problem
34
+ end
35
+
36
+ it 'should fix the manifest' do
37
+ expect(problems).to contain_fixed(msg).on_line(1).in_column(23)
38
+ end
39
+
40
+ it 'should single quote the file mode' do
41
+ expect(manifest).to eq("file { 'foo': mode => '0777' }")
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,216 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'unquoted_resource_title' do
4
+ let(:msg) { 'unquoted resource title' }
5
+
6
+ context 'with fix disabled' do
7
+ context 'quoted resource title on single line resource' do
8
+ let(:code) { "file { 'foo': }" }
9
+
10
+ it 'should not detect any problems' do
11
+ expect(problems).to have(0).problems
12
+ end
13
+ end
14
+
15
+ context 'unquoted resource title on single line resource' do
16
+ let(:code) { "file { foo: }" }
17
+
18
+ it 'should only detect a single problem' do
19
+ expect(problems).to have(1).problem
20
+ end
21
+
22
+ it 'should create a warning' do
23
+ expect(problems).to contain_warning(msg).on_line(1).in_column(8)
24
+ end
25
+ end
26
+
27
+ context 'quoted resource title on multi line resource' do
28
+ let(:code) { "
29
+ file { 'foo':
30
+ }"
31
+ }
32
+
33
+ it 'should not detect any problems' do
34
+ expect(problems).to have(0).problems
35
+ end
36
+ end
37
+
38
+ context 'unquoted resource title on multi line resource' do
39
+ let(:code) { "
40
+ file { foo:
41
+ }"
42
+ }
43
+
44
+ it 'should only detect a single problem' do
45
+ expect(problems).to have(1).problem
46
+ end
47
+
48
+ it 'should create a warning' do
49
+ expect(problems).to contain_warning(msg).on_line(2).in_column(16)
50
+ end
51
+ end
52
+
53
+ context 'condensed resources with quoted titles' do
54
+ let(:code) { "
55
+ file {
56
+ 'foo': ;
57
+ 'bar': ;
58
+ }"
59
+ }
60
+
61
+ it 'should not detect any problems' do
62
+ expect(problems).to have(0).problems
63
+ end
64
+ end
65
+
66
+ context 'condensed resources with an unquoted title' do
67
+ let(:code) { "
68
+ file {
69
+ 'foo': ;
70
+ bar: ;
71
+ }"
72
+ }
73
+
74
+ it 'should only detect a single problem' do
75
+ expect(problems).to have(1).problem
76
+ end
77
+
78
+ it 'should create a warning' do
79
+ expect(problems).to contain_warning(msg).on_line(4).in_column(11)
80
+ end
81
+ end
82
+
83
+ context 'single line resource with an array of titles (all quoted)' do
84
+ let(:code) { "file { ['foo', 'bar']: }" }
85
+
86
+ it 'should not detect any problems' do
87
+ expect(problems).to have(0).problems
88
+ end
89
+ end
90
+
91
+ context 'resource inside a case statement' do
92
+ let(:code) { "
93
+ case $ensure {
94
+ 'absent': {
95
+ file { \"some_file_${name}\":
96
+ ensure => absent,
97
+ }
98
+ }
99
+ }"
100
+ }
101
+
102
+ it 'should not detect any problems' do
103
+ expect(problems).to have(0).problems
104
+ end
105
+ end
106
+
107
+ context 'issue #116' do
108
+ let(:code) { "
109
+ $config_file_init = $::operatingsystem ? {
110
+ /(?i:Debian|Ubuntu|Mint)/ => '/etc/default/foo',
111
+ default => '/etc/sysconfig/foo',
112
+ }"
113
+ }
114
+
115
+ it 'should not detect any problems' do
116
+ expect(problems).to have(0).problems
117
+ end
118
+ end
119
+
120
+ context 'case statement' do
121
+ let(:code) { %{
122
+ case $operatingsystem {
123
+ centos: {
124
+ $version = '1.2.3'
125
+ }
126
+ solaris: {
127
+ $version = '3.2.1'
128
+ }
129
+ default: {
130
+ fail("Module ${module_name} is not supported on ${operatingsystem}")
131
+ }
132
+ }}
133
+ }
134
+
135
+ it 'should not detect any problems' do
136
+ expect(problems).to have(0).problems
137
+ end
138
+ end
139
+ end
140
+
141
+ context 'with fix enabled' do
142
+ before do
143
+ PuppetLint.configuration.fix = true
144
+ end
145
+
146
+ after do
147
+ PuppetLint.configuration.fix = false
148
+ end
149
+
150
+ context 'unquoted resource title on single line resource' do
151
+ let(:code) { "file { foo: }" }
152
+
153
+ it 'should only detect a single problem' do
154
+ expect(problems).to have(1).problem
155
+ end
156
+
157
+ it 'should fix the manifest' do
158
+ expect(problems).to contain_fixed(msg).on_line(1).in_column(8)
159
+ end
160
+
161
+ it 'should single quote the resource title' do
162
+ expect(manifest).to eq("file { 'foo': }")
163
+ end
164
+ end
165
+
166
+ context 'unquoted resource title on multi line resource' do
167
+ let(:code) { "
168
+ file { foo:
169
+ }"
170
+ }
171
+ let(:fixed) { "
172
+ file { 'foo':
173
+ }"
174
+ }
175
+
176
+ it 'should only detect a single problem' do
177
+ expect(problems).to have(1).problem
178
+ end
179
+
180
+ it 'should fix the manifest' do
181
+ expect(problems).to contain_fixed(msg).on_line(2).in_column(16)
182
+ end
183
+
184
+ it 'should single quote the resource title' do
185
+ expect(manifest).to eq(fixed)
186
+ end
187
+ end
188
+
189
+ context 'condensed resources with an unquoted title' do
190
+ let(:code) { "
191
+ file {
192
+ 'foo': ;
193
+ bar: ;
194
+ }"
195
+ }
196
+ let(:fixed) { "
197
+ file {
198
+ 'foo': ;
199
+ 'bar': ;
200
+ }"
201
+ }
202
+
203
+ it 'should only detect a single problem' do
204
+ expect(problems).to have(1).problem
205
+ end
206
+
207
+ it 'should fix the manifest' do
208
+ expect(problems).to contain_fixed(msg).on_line(4).in_column(11)
209
+ end
210
+
211
+ it 'should single quote the resource title' do
212
+ expect(manifest).to eq(fixed)
213
+ end
214
+ end
215
+ end
216
+ end