puppet-lint 0.4.0.pre1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. data/.travis.yml +3 -4
  2. data/Gemfile +2 -5
  3. data/README.md +2 -149
  4. data/Rakefile +0 -5
  5. data/lib/puppet-lint.rb +74 -20
  6. data/lib/puppet-lint/bin.rb +20 -85
  7. data/lib/puppet-lint/checkplugin.rb +158 -12
  8. data/lib/puppet-lint/checks.rb +39 -222
  9. data/lib/puppet-lint/configuration.rb +12 -31
  10. data/lib/puppet-lint/data.rb +329 -0
  11. data/lib/puppet-lint/lexer.rb +37 -30
  12. data/lib/puppet-lint/lexer/token.rb +14 -16
  13. data/lib/puppet-lint/monkeypatches/string_prepend.rb +6 -0
  14. data/lib/puppet-lint/optparser.rb +105 -0
  15. data/lib/puppet-lint/plugins.rb +28 -9
  16. data/lib/puppet-lint/plugins/check_classes.rb +162 -238
  17. data/lib/puppet-lint/plugins/check_comments.rb +40 -25
  18. data/lib/puppet-lint/plugins/check_conditionals.rb +16 -20
  19. data/lib/puppet-lint/plugins/check_documentation.rb +14 -20
  20. data/lib/puppet-lint/plugins/check_nodes.rb +23 -0
  21. data/lib/puppet-lint/plugins/check_resources.rb +127 -141
  22. data/lib/puppet-lint/plugins/check_strings.rb +133 -107
  23. data/lib/puppet-lint/plugins/check_variables.rb +11 -11
  24. data/lib/puppet-lint/plugins/check_whitespace.rb +86 -92
  25. data/lib/puppet-lint/tasks/puppet-lint.rb +17 -1
  26. data/lib/puppet-lint/version.rb +1 -1
  27. data/puppet-lint.gemspec +4 -2
  28. data/spec/fixtures/test/manifests/ignore.pp +1 -0
  29. data/spec/fixtures/test/manifests/ignore_reason.pp +1 -0
  30. data/spec/puppet-lint/bin_spec.rb +104 -84
  31. data/spec/puppet-lint/configuration_spec.rb +19 -19
  32. data/spec/puppet-lint/ignore_overrides_spec.rb +97 -0
  33. data/spec/puppet-lint/lexer/token_spec.rb +9 -9
  34. data/spec/puppet-lint/lexer_spec.rb +352 -325
  35. data/spec/puppet-lint/plugins/check_classes/autoloader_layout_spec.rb +77 -23
  36. data/spec/puppet-lint/plugins/check_classes/class_inherits_from_params_class_spec.rb +14 -12
  37. data/spec/puppet-lint/plugins/check_classes/inherits_across_namespaces_spec.rb +18 -14
  38. data/spec/puppet-lint/plugins/check_classes/names_containing_dash_spec.rb +30 -30
  39. data/spec/puppet-lint/plugins/check_classes/nested_classes_or_defines_spec.rb +31 -26
  40. data/spec/puppet-lint/plugins/check_classes/parameter_order_spec.rb +34 -28
  41. data/spec/puppet-lint/plugins/check_classes/right_to_left_relationship_spec.rb +14 -12
  42. data/spec/puppet-lint/plugins/check_classes/variable_scope_spec.rb +74 -30
  43. data/spec/puppet-lint/plugins/check_comments/slash_comments_spec.rb +27 -20
  44. data/spec/puppet-lint/plugins/check_comments/star_comments_spec.rb +78 -13
  45. data/spec/puppet-lint/plugins/check_conditionals/case_without_default_spec.rb +17 -12
  46. data/spec/puppet-lint/plugins/check_conditionals/selector_inside_resource_spec.rb +13 -10
  47. data/spec/puppet-lint/plugins/check_documentation/documentation_spec.rb +21 -16
  48. data/spec/puppet-lint/plugins/check_nodes/unquoted_node_name_spec.rb +69 -0
  49. data/spec/puppet-lint/plugins/check_resources/duplicate_params_spec.rb +42 -38
  50. data/spec/puppet-lint/plugins/check_resources/ensure_first_param_spec.rb +22 -10
  51. data/spec/puppet-lint/plugins/check_resources/ensure_not_symlink_target_spec.rb +81 -18
  52. data/spec/puppet-lint/plugins/check_resources/file_mode_spec.rb +69 -112
  53. data/spec/puppet-lint/plugins/check_resources/unquoted_file_mode_spec.rb +27 -20
  54. data/spec/puppet-lint/plugins/check_resources/unquoted_resource_title_spec.rb +177 -171
  55. data/spec/puppet-lint/plugins/check_strings/double_quoted_strings_spec.rb +165 -88
  56. data/spec/puppet-lint/plugins/check_strings/only_variable_string_spec.rb +97 -22
  57. data/spec/puppet-lint/plugins/check_strings/puppet_url_without_modules_spec.rb +25 -0
  58. data/spec/puppet-lint/plugins/check_strings/quoted_booleans_spec.rb +97 -111
  59. data/spec/puppet-lint/plugins/check_strings/single_quote_string_with_variables_spec.rb +10 -9
  60. data/spec/puppet-lint/plugins/check_strings/variables_not_enclosed_spec.rb +53 -53
  61. data/spec/puppet-lint/plugins/check_variables/variable_contains_dash_spec.rb +26 -14
  62. data/spec/puppet-lint/plugins/check_whitespace/2sp_soft_tabs_spec.rb +10 -9
  63. data/spec/puppet-lint/plugins/check_whitespace/80chars_spec.rb +31 -15
  64. data/spec/puppet-lint/plugins/check_whitespace/arrow_alignment_spec.rb +340 -322
  65. data/spec/puppet-lint/plugins/check_whitespace/hard_tabs_spec.rb +30 -23
  66. data/spec/puppet-lint/plugins/check_whitespace/trailing_whitespace_spec.rb +42 -41
  67. data/spec/puppet-lint_spec.rb +3 -3
  68. data/spec/spec_helper.rb +109 -116
  69. metadata +109 -50
  70. data/spec/puppet-lint/plugins/check_classes/class_parameter_defaults_spec.rb +0 -60
@@ -1,16 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'documentation' do
4
+ let(:class_msg) { 'class not documented' }
5
+ let(:define_msg) { 'defined type not documented' }
6
+
4
7
  describe 'undocumented class' do
5
8
  let(:code) { "class test {}" }
6
9
 
7
- its(:problems) do
8
- should only_have_problem({
9
- :kind => :warning,
10
- :message => 'class not documented',
11
- :linenumber => 1,
12
- :column => 1,
13
- })
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(class_msg).on_line(1).in_column(1)
14
16
  end
15
17
  end
16
18
 
@@ -20,19 +22,20 @@ describe 'documentation' do
20
22
  class test {}
21
23
  "}
22
24
 
23
- its(:problems) { should == [] }
25
+ it 'should not detect any problems' do
26
+ expect(problems).to have(0).problems
27
+ end
24
28
  end
25
29
 
26
30
  describe 'undocumented defined type' do
27
31
  let(:code) { "define test {}" }
28
32
 
29
- its(:problems) do
30
- should only_have_problem({
31
- :kind => :warning,
32
- :message => 'defined type not documented',
33
- :linenumber => 1,
34
- :column => 1,
35
- })
33
+ it 'should only detect a single problem' do
34
+ expect(problems).to have(1).problem
35
+ end
36
+
37
+ it 'should create a warning' do
38
+ expect(problems).to contain_warning(define_msg).on_line(1).in_column(1)
36
39
  end
37
40
  end
38
41
 
@@ -42,6 +45,8 @@ describe 'documentation' do
42
45
  define test {}
43
46
  "}
44
47
 
45
- its(:problems) { should == [] }
48
+ it 'should not detect any problems' do
49
+ expect(problems).to have(0).problems
50
+ end
46
51
  end
47
52
  end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'unquoted_node_name' do
4
+ let(:msg) { 'unquoted node name found' }
5
+
6
+ context 'with fix disabled' do
7
+ context 'unquoted node name' do
8
+ let(:code) { "node foo { }" }
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(6)
16
+ end
17
+ end
18
+
19
+ context 'default node' do
20
+ let(:code) { "node default { }" }
21
+
22
+ it 'should not detect any problems' do
23
+ expect(problems).to have(0).problems
24
+ end
25
+ end
26
+
27
+ context 'single quoted node name' do
28
+ let(:code) { "node 'foo' { }" }
29
+
30
+ it 'should not detect any problems' do
31
+ expect(problems).to have(0).problems
32
+ end
33
+ end
34
+
35
+ context 'regex node name' do
36
+ let(:code) { "node /foo/ { }" }
37
+
38
+ it 'should not detect any problems' do
39
+ expect(problems).to have(0).problems
40
+ end
41
+ end
42
+ end
43
+
44
+ context 'with fix enabled' do
45
+ before do
46
+ PuppetLint.configuration.fix = true
47
+ end
48
+
49
+ after do
50
+ PuppetLint.configuration.fix = false
51
+ end
52
+
53
+ context 'unquoted node name' do
54
+ let(:code) { "node foo { }" }
55
+
56
+ it 'should only detect a single problem' do
57
+ expect(problems).to have(1).problem
58
+ end
59
+
60
+ it 'should fix the manifest' do
61
+ expect(problems).to contain_fixed(msg).on_line(1).in_column(6)
62
+ end
63
+
64
+ it 'should quote the node name' do
65
+ expect(manifest).to eq("node 'foo' { }")
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,7 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'duplicate_params' do
4
- describe 'resource with duplicate parameters' do
4
+ let(:msg) { 'duplicate parameter found in resource' }
5
+
6
+ context 'resource with duplicate parameters' do
5
7
  let(:code) { "
6
8
  file { '/tmp/foo':
7
9
  ensure => present,
@@ -11,17 +13,17 @@ describe 'duplicate_params' do
11
13
  }"
12
14
  }
13
15
 
14
- its(:problems) {
15
- should only_have_problem({
16
- :kind => :error,
17
- :message => 'duplicate parameter found in resource',
18
- :linenumber => 6,
19
- :column => 9,
20
- })
21
- }
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
22
23
  end
23
- describe 'bug #145: resource with a hash and no duplicate parameters' do
24
- let (:code) { "
24
+
25
+ context 'bug #145: resource with a hash and no duplicate parameters' do
26
+ let(:code) { "
25
27
  class {'fooname':
26
28
  hashes => [
27
29
  { foo => 'bar01',},
@@ -29,13 +31,14 @@ describe 'duplicate_params' do
29
31
  ],
30
32
  }"
31
33
  }
32
- its (:problems) {
33
- should be_empty
34
- }
34
+
35
+ it 'should not detect any errors' do
36
+ expect(problems).to have(0).problems
37
+ end
35
38
  end
36
39
 
37
- describe 'bug #145: resource with a hash and duplicate parameters in subhash' do
38
- let (:code) { "
40
+ context 'bug #145: resource with a hash and duplicate parameters in subhash' do
41
+ let(:code) { "
39
42
  class {'fooname':
40
43
  hashes => [
41
44
  { foo => 'bar01',
@@ -43,18 +46,18 @@ describe 'duplicate_params' do
43
46
  ],
44
47
  }"
45
48
  }
46
- its (:problems) {
47
- should only_have_problem({
48
- :kind => :error,
49
- :message => 'duplicate parameter found in resource',
50
- :linenumber => 5,
51
- :column => 13,
52
- })
53
- }
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
54
57
  end
55
58
 
56
- describe 'bug #145: resource with a hash and duplicate parameters in parent type' do
57
- let (:code) { "
59
+ context 'bug #145: resource with a hash and duplicate parameters in parent type' do
60
+ let(:code) { "
58
61
  class {'fooname':
59
62
  hashes => [
60
63
  { foo => 'bar01', },
@@ -64,25 +67,26 @@ describe 'duplicate_params' do
64
67
  hashes => 'dupe',
65
68
  }"
66
69
  }
67
- its (:problems) {
68
- should only_have_problem({
69
- :kind => :error,
70
- :message => 'duplicate parameter found in resource',
71
- :linenumber => 8,
72
- :column => 9,
73
- })
74
- }
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
75
78
  end
79
+
76
80
  describe 'bug #145: more hash tests and no duplicate parameters' do
77
- let (:code) { "
81
+ let(:code) { "
78
82
  class test {
79
83
  $foo = { param => 'value', }
80
84
  $bar = { param => 'bar', }
81
85
  }"
82
86
  }
83
- its (:problems) {
84
- should be_empty
85
- }
86
87
 
88
+ it 'should not detect any problems' do
89
+ expect(problems).to have(0).problems
90
+ end
87
91
  end
88
92
  end
@@ -1,23 +1,29 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'ensure_first_param' do
4
- describe 'ensure as only attr in a single line resource' 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
5
7
  let(:code) { "file { 'foo': ensure => present }" }
6
8
 
7
- its(:problems) { should be_empty }
9
+ it 'should not detect any problems' do
10
+ expect(problems).to have(0).problems
11
+ end
8
12
  end
9
13
 
10
- describe 'ensure as only attr in a multi line resource' do
14
+ context 'ensure as only attr in a multi line resource' do
11
15
  let(:code) { "
12
16
  file { 'foo':
13
17
  ensure => present,
14
18
  }"
15
19
  }
16
20
 
17
- its(:problems) { should be_empty }
21
+ it 'should not detect any problems' do
22
+ expect(problems).to have(0).problems
23
+ end
18
24
  end
19
25
 
20
- describe 'ensure as second attr in a multi line resource' do
26
+ context 'ensure as second attr in a multi line resource' do
21
27
  let(:code) { "
22
28
  file { 'foo':
23
29
  mode => '0000',
@@ -25,12 +31,16 @@ describe 'ensure_first_param' do
25
31
  }"
26
32
  }
27
33
 
28
- its(:problems) {
29
- should only_have_problem :kind => :warning, :message => "ensure found on line but it's not the first attribute", :linenumber => 4
30
- }
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
31
41
  end
32
42
 
33
- describe 'ensure as first attr in a multi line resource' do
43
+ context 'ensure as first attr in a multi line resource' do
34
44
  let(:code) { "
35
45
  file { 'foo':
36
46
  ensure => present,
@@ -38,6 +48,8 @@ describe 'ensure_first_param' do
38
48
  }"
39
49
  }
40
50
 
41
- its(:problems) { should be_empty }
51
+ it 'should not detect any problems' do
52
+ expect(problems).to have(0).problems
53
+ end
42
54
  end
43
55
  end
@@ -1,26 +1,89 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'ensure_not_symlink_target' do
4
- describe 'file resource creating a symlink with seperate target attr' do
5
- let(:code) { "
6
- file { 'foo':
7
- ensure => link,
8
- target => '/foo/bar',
9
- }"
10
- }
11
-
12
- its(:problems) { should be_empty }
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
13
35
  end
14
36
 
15
- describe 'file resource creating a symlink with target specified in ensure' do
16
- let(:code) { "
17
- file { 'foo':
18
- ensure => '/foo/bar',
19
- }"
20
- }
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
21
83
 
22
- its(:problems) {
23
- should only_have_problem :kind => :warning, :message => "symlink target specified in ensure attr", :linenumber => 3
24
- }
84
+ it 'should create a new target param' do
85
+ expect(manifest).to eq(fixed)
86
+ end
87
+ end
25
88
  end
26
89
  end
@@ -1,110 +1,75 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'file_mode' do
4
- describe '3 digit file mode' do
5
- let(:code) { "file { 'foo': mode => '777' }" }
6
-
7
- its(:problems) do
8
- should only_have_problem({
9
- :kind => :warning,
10
- :message => "mode should be represented as a 4 digit octal value or symbolic mode",
11
- :linenumber => 1,
12
- :column => 23,
13
- })
14
- end
15
- end
4
+ let(:msg) { 'mode should be represented as a 4 digit octal value or symbolic mode' }
16
5
 
17
- describe '3 digit file mode w/fix' do
18
- before do
19
- PuppetLint.configuration.fix = true
20
- end
6
+ context 'with fix disabled' do
7
+ context '3 digit file mode' do
8
+ let(:code) { "file { 'foo': mode => '777' }" }
21
9
 
22
- after do
23
- PuppetLint.configuration.fix = false
24
- end
25
-
26
- let(:code) { "file { 'foo': mode => '777' }" }
10
+ it 'should only detect a single problem' do
11
+ expect(problems).to have(1).problem
12
+ end
27
13
 
28
- its(:manifest) { should == "file { 'foo': mode => '0777' }" }
29
- its(:problems) do
30
- should only_have_problem({
31
- :kind => :fixed,
32
- :message => 'mode should be represented as a 4 digit octal value or symbolic mode',
33
- :linenumber => 1,
34
- })
14
+ it 'should create a warning' do
15
+ expect(problems).to contain_warning(msg).on_line(1).in_column(23)
16
+ end
35
17
  end
36
- end
37
18
 
38
- describe '4 digit file mode' do
39
- let(:code) { "file { 'foo': mode => '0777' }" }
19
+ context '4 digit file mode' do
20
+ let(:code) { "file { 'foo': mode => '0777' }" }
40
21
 
41
- its(:problems) { should be_empty }
42
- end
43
-
44
- describe '4 digit file mode w/fix' do
45
- before do
46
- PuppetLint.configuration.fix = true
47
- end
48
-
49
- after do
50
- PuppetLint.configuration.fix = false
22
+ it 'should not detect any problems' do
23
+ expect(problems).to have(0).problems
24
+ end
51
25
  end
52
26
 
53
- let(:code) { "file { 'foo': mode => '0777' }" }
54
-
55
- its(:problems) { should be_empty }
56
- its(:manifest) { should == "file { 'foo': mode => '0777' }" }
57
- end
58
-
59
- describe 'file mode as a variable' do
60
- let(:code) { "file { 'foo': mode => $file_mode }" }
61
-
62
- its(:problems) { should be_empty }
63
- end
27
+ context 'file mode as a variable' do
28
+ let(:code) { "file { 'foo': mode => $file_mode }" }
64
29
 
65
- describe 'file mode as a variable w/fix' do
66
- before do
67
- PuppetLint.configuration.fix = true
30
+ it 'should not detect any problems' do
31
+ expect(problems).to have(0).problems
32
+ end
68
33
  end
69
34
 
70
- after do
71
- PuppetLint.configuration.fix = false
72
- end
73
-
74
- let(:code) { "file { 'foo': mode => $file_mode }" }
75
-
76
- its(:problems) { should be_empty }
77
- its(:manifest) { should == "file { 'foo': mode => $file_mode }" }
78
- end
35
+ context 'symbolic file mode' do
36
+ let(:code) { "file { 'foo': mode => 'u=rw,og=r' }" }
79
37
 
80
- describe 'symbolic file mode' do
81
- let(:code) { "file { 'foo': mode => 'u=rw,og=r' }" }
38
+ it 'should not detect any problems' do
39
+ expect(problems).to have(0).problems
40
+ end
41
+ end
82
42
 
83
- its(:problems) { should be_empty }
84
- end
43
+ context 'file mode undef unquoted' do
44
+ let(:code) { "file { 'foo': mode => undef }" }
85
45
 
86
- describe 'symbolic file mode w/fix' do
87
- before do
88
- PuppetLint.configuration.fix = true
46
+ it 'should not detect any problems' do
47
+ expect(problems).to have(0).problems
48
+ end
89
49
  end
90
50
 
91
- after do
92
- PuppetLint.configuration.fix = false
93
- end
51
+ context 'file mode undef quoted' do
52
+ let(:code) { "file { 'foo': mode => 'undef' }" }
94
53
 
95
- let(:code) { "file { 'foo': mode => 'u=rw,og=r' }" }
54
+ it 'should only detect a single problem' do
55
+ expect(problems).to have(1).problem
56
+ end
96
57
 
97
- its(:problems) { should be_empty }
98
- its(:manifest) { should == "file { 'foo': mode => 'u=rw,og=r' }" }
99
- end
58
+ it 'should create a warning' do
59
+ expect(problems).to contain_warning(msg).on_line(1).in_column(23)
60
+ end
61
+ end
100
62
 
101
- describe 'file mode undef unquoted' do
102
- let(:code) { "file { 'foo': mode => undef }" }
63
+ context 'mode as audit value' do
64
+ let(:code) { "file { '/etc/passwd': audit => [ owner, mode ], }" }
103
65
 
104
- its(:problems) { should be_empty }
66
+ it 'should not detect any problems' do
67
+ expect(problems).to have(0).problems
68
+ end
69
+ end
105
70
  end
106
71
 
107
- describe 'file mode undef unquoted w/fix' do
72
+ context 'with fix enabled' do
108
73
  before do
109
74
  PuppetLint.configuration.fix = true
110
75
  end
@@ -113,44 +78,36 @@ describe 'file_mode' do
113
78
  PuppetLint.configuration.fix = false
114
79
  end
115
80
 
116
- let(:code) { "file { 'foo': mode => undef }" }
81
+ context '3 digit file mode' do
82
+ let(:code) { "file { 'foo': mode => '777' }" }
117
83
 
118
- its(:problems) { should be_empty }
119
- its(:manifest) { should == "file { 'foo': mode => undef }" }
120
- end
84
+ it 'should only detect a single problem' do
85
+ expect(problems).to have(1).problem
86
+ end
121
87
 
122
- describe 'file mode undef quoted' do
123
- let(:code) { "file { 'foo': mode => 'undef' }" }
88
+ it 'should fix the manifest' do
89
+ expect(problems).to contain_fixed(msg).on_line(1).in_column(23)
90
+ end
124
91
 
125
- its(:problems) do
126
- should only_have_problem({
127
- :kind => :warning,
128
- :message => "mode should be represented as a 4 digit octal value or symbolic mode",
129
- :linenumber => 1,
130
- :column => 23,
131
- })
92
+ it 'should zero pad the file mode' do
93
+ expect(manifest).to eq("file { 'foo': mode => '0777' }")
94
+ end
132
95
  end
133
- end
134
96
 
135
- describe 'file mode undef quoted' do
136
- before do
137
- PuppetLint.configuration.fix = true
138
- end
97
+ context 'file mode undef quoted' do
98
+ let(:code) { "file { 'foo': mode => 'undef' }" }
139
99
 
140
- after do
141
- PuppetLint.configuration.fix = false
142
- end
100
+ it 'should only detect a single problem' do
101
+ expect(problems).to have(1).problem
102
+ end
143
103
 
144
- let(:code) { "file { 'foo': mode => 'undef' }" }
104
+ it 'should create a warning' do
105
+ expect(problems).to contain_warning(msg).on_line(1).in_column(23)
106
+ end
145
107
 
146
- its(:problems) do
147
- should only_have_problem({
148
- :kind => :warning,
149
- :message => "mode should be represented as a 4 digit octal value or symbolic mode",
150
- :linenumber => 1,
151
- :column => 23,
152
- })
108
+ it 'should not modify the original manifest' do
109
+ expect(manifest).to eq(code)
110
+ end
153
111
  end
154
- its(:manifest) { should == "file { 'foo': mode => 'undef' }" }
155
112
  end
156
113
  end