wright 0.2.0 → 0.3.0

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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +8 -0
  3. data/README.md +2 -0
  4. data/Rakefile +6 -0
  5. data/bin/wright +6 -0
  6. data/lib/wright/cli.rb +68 -0
  7. data/lib/wright/dsl.rb +1 -1
  8. data/lib/wright/provider/directory.rb +17 -12
  9. data/lib/wright/provider/file.rb +24 -17
  10. data/lib/wright/provider/group/darwin_directory_service.rb +1 -8
  11. data/lib/wright/provider/group/gnu_passwd.rb +0 -1
  12. data/lib/wright/provider/group.rb +6 -12
  13. data/lib/wright/provider/package/apt.rb +9 -21
  14. data/lib/wright/provider/package/homebrew.rb +5 -18
  15. data/lib/wright/provider/package.rb +22 -11
  16. data/lib/wright/provider/symlink.rb +17 -22
  17. data/lib/wright/provider/user/darwin_directory_service.rb +65 -0
  18. data/lib/wright/provider/user/gnu_passwd.rb +6 -7
  19. data/lib/wright/provider/user.rb +6 -12
  20. data/lib/wright/provider.rb +20 -2
  21. data/lib/wright/resource/directory.rb +19 -20
  22. data/lib/wright/resource/file.rb +19 -15
  23. data/lib/wright/resource/symlink.rb +1 -0
  24. data/lib/wright/resource/user.rb +2 -1
  25. data/lib/wright/resource.rb +1 -1
  26. data/lib/wright/util/file_owner.rb +61 -0
  27. data/lib/wright/util/file_permissions.rb +21 -30
  28. data/lib/wright/util/stolen_from_activesupport.rb +1 -1
  29. data/lib/wright/util/user.rb +48 -23
  30. data/lib/wright/util.rb +10 -6
  31. data/lib/wright/version.rb +1 -1
  32. data/lib/wright.rb +1 -0
  33. data/man/wright.1 +202 -0
  34. data/spec/cli/shebang.rb +3 -0
  35. data/spec/cli_spec.rb +64 -0
  36. data/spec/dsl_spec.rb +8 -3
  37. data/spec/provider/group/darwin_directory_service_spec.rb +3 -2
  38. data/spec/provider/package/apt/apt-cache_policy_abcde.stdout +7 -0
  39. data/spec/provider/package/apt/apt-cache_policy_htop.stdout +6 -0
  40. data/spec/provider/package/apt/apt-cache_policy_not-a-real-package.return +1 -0
  41. data/spec/provider/package/apt_spec.rb +17 -211
  42. data/spec/provider/package/homebrew_spec.rb +11 -164
  43. data/spec/provider/package_spec.rb +151 -7
  44. data/spec/provider/user/darwin_directory_service/dscl-delete-user.return +1 -0
  45. data/spec/provider/user/darwin_directory_service/dscl-delete-user.stderr +0 -0
  46. data/spec/provider/user/darwin_directory_service/dscl-delete-user.stdout +0 -0
  47. data/spec/provider/user/darwin_directory_service/dscl-new-user-full-name.return +1 -0
  48. data/spec/provider/user/darwin_directory_service/dscl-new-user-full-name.stderr +0 -0
  49. data/spec/provider/user/darwin_directory_service/dscl-new-user-full-name.stdout +0 -0
  50. data/spec/provider/user/darwin_directory_service/dscl-new-user-home.return +1 -0
  51. data/spec/provider/user/darwin_directory_service/dscl-new-user-home.stderr +0 -0
  52. data/spec/provider/user/darwin_directory_service/dscl-new-user-home.stdout +0 -0
  53. data/spec/provider/user/darwin_directory_service/dscl-new-user-password.return +1 -0
  54. data/spec/provider/user/darwin_directory_service/dscl-new-user-password.stderr +0 -0
  55. data/spec/provider/user/darwin_directory_service/dscl-new-user-password.stdout +0 -0
  56. data/spec/provider/user/darwin_directory_service/dscl-new-user-primary-group.return +1 -0
  57. data/spec/provider/user/darwin_directory_service/dscl-new-user-primary-group.stderr +0 -0
  58. data/spec/provider/user/darwin_directory_service/dscl-new-user-primary-group.stdout +0 -0
  59. data/spec/provider/user/darwin_directory_service/dscl-new-user-shell.return +1 -0
  60. data/spec/provider/user/darwin_directory_service/dscl-new-user-shell.stderr +0 -0
  61. data/spec/provider/user/darwin_directory_service/dscl-new-user-shell.stdout +0 -0
  62. data/spec/provider/user/darwin_directory_service/dscl-new-user-uid.return +1 -0
  63. data/spec/provider/user/darwin_directory_service/dscl-new-user-uid.stderr +0 -0
  64. data/spec/provider/user/darwin_directory_service/dscl-new-user-uid.stdout +0 -0
  65. data/spec/provider/user/darwin_directory_service_spec.rb +167 -0
  66. data/spec/provider/user/gnu_passwd_spec.rb +5 -5
  67. data/spec/resource/directory_spec.rb +17 -15
  68. data/spec/resource/file_spec.rb +17 -15
  69. data/spec/resource_spec.rb +1 -1
  70. data/spec/spec_helpers/test_coverage.rb +1 -1
  71. data/spec/util/file_owner_spec.rb +36 -0
  72. data/spec/util/file_permissions_spec.rb +6 -6
  73. data/spec/util/user_spec.rb +0 -17
  74. data/spec/util_spec.rb +64 -5
  75. metadata +91 -41
  76. data/spec/provider/package/apt/dpkg-query_-s_abcde.stdout +0 -23
  77. data/spec/provider/package/apt/dpkg-query_-s_htop.stdout +0 -19
  78. data/spec/provider/package/apt/dpkg-query_-s_not-a-real-package.return +0 -1
  79. data/spec/provider/package/apt/dpkg-query_-s_not-a-real-package.stderr +0 -3
  80. data/spec/provider/package/apt/dpkg-query_-s_vlc.return +0 -1
  81. data/spec/provider/package/apt/dpkg-query_-s_vlc.stderr +0 -3
  82. /data/spec/provider/group/darwin_directory_service/{dseditgroup_-o_create_-i_499_newgroup.return → dseditgroup_-o_create_-i_2_newgroup.return} +0 -0
  83. /data/spec/provider/group/darwin_directory_service/{dseditgroup_-o_create_-i_499_newgroup.stderr → dseditgroup_-o_create_-i_2_newgroup.stderr} +0 -0
  84. /data/spec/provider/group/darwin_directory_service/{dseditgroup_-o_create_-i_499_newgroup.stdout → dseditgroup_-o_create_-i_2_newgroup.stdout} +0 -0
  85. /data/spec/provider/package/apt/{dpkg-query_-s_abcde.return → apt-cache_policy_abcde.return} +0 -0
  86. /data/spec/provider/package/apt/{dpkg-query_-s_abcde.stderr → apt-cache_policy_abcde.stderr} +0 -0
  87. /data/spec/provider/package/apt/{dpkg-query_-s_htop.return → apt-cache_policy_htop.return} +0 -0
  88. /data/spec/provider/package/apt/{dpkg-query_-s_htop.stderr → apt-cache_policy_htop.stderr} +0 -0
  89. /data/spec/provider/package/apt/{dpkg-query_-s_not-a-real-package.stdout → apt-cache_policy_not-a-real-package.stderr} +0 -0
  90. /data/spec/provider/package/apt/{dpkg-query_-s_vlc.stdout → apt-cache_policy_not-a-real-package.stdout} +0 -0
@@ -16,23 +16,6 @@ describe Wright::Provider::Package::Homebrew do
16
16
  before :each do
17
17
  homebrew_dir = File.join(File.dirname(__FILE__), 'homebrew')
18
18
  @fake_capture3 = FakeCapture3.new(homebrew_dir)
19
- @install_message = ->(pkg) { "INFO: install package: '#{pkg}'\n" }
20
- @install_message_dry = lambda do |pkg|
21
- "INFO: (would) install package: '#{pkg}'\n"
22
- end
23
- @install_message_debug = lambda do |pkg|
24
- "DEBUG: package already installed: '#{pkg}'\n"
25
- end
26
- @remove_message = ->(pkg) { "INFO: remove package: '#{pkg}'\n" }
27
- @remove_message_dry = lambda do |pkg|
28
- "INFO: (would) remove package: '#{pkg}'\n"
29
- end
30
- @remove_message_debug = lambda do |pkg|
31
- "DEBUG: package already removed: '#{pkg}'\n"
32
- end
33
- @version_warning = lambda do |pkg, version|
34
- "WARN: ignoring package version: '#{pkg} (#{version})'"
35
- end
36
19
  end
37
20
 
38
21
  describe '#installed_versions' do
@@ -73,36 +56,15 @@ describe Wright::Provider::Package::Homebrew do
73
56
  end
74
57
  end
75
58
 
76
- describe '#install' do
77
- it 'should install packages that are not currently installed' do
59
+ describe '#install_package' do
60
+ it 'should install packages' do
78
61
  pkg_name = 'cd-discid'
79
62
  pkg_provider = package_provider(pkg_name)
80
- brew_info_cmd = brew(:info, pkg_name)
81
63
  brew_install_cmd = brew(:install, pkg_name)
82
64
 
83
- @fake_capture3.expect(brew_info_cmd)
84
65
  @fake_capture3.expect(brew_install_cmd)
85
66
  @fake_capture3.stub do
86
- lambda do
87
- reset_logger
88
- pkg_provider.install
89
- pkg_provider.updated?.must_equal true
90
- end.must_output @install_message.call(pkg_name)
91
- end
92
- end
93
-
94
- it 'should not try to install packages that are already installed' do
95
- pkg_name = 'lame'
96
- pkg_provider = package_provider(pkg_name)
97
- brew_info_cmd = brew(:info, pkg_name)
98
-
99
- @fake_capture3.expect(brew_info_cmd)
100
- @fake_capture3.stub do
101
- lambda do
102
- reset_logger
103
- pkg_provider.install
104
- pkg_provider.updated?.must_equal false
105
- end.must_output @install_message_debug.call(pkg_name)
67
+ pkg_provider.send(:install_package)
106
68
  end
107
69
  end
108
70
 
@@ -110,34 +72,27 @@ describe Wright::Provider::Package::Homebrew do
110
72
  pkg_name = 'cd-discid'
111
73
  pkg_version = '1.1'
112
74
  pkg_provider = package_provider(pkg_name, pkg_version)
113
- brew_info_cmd = brew(:info, pkg_name)
114
75
  brew_install_cmd = brew(:install, pkg_name)
76
+ version_warning =
77
+ "WARN: ignoring package version: '#{pkg_name} (#{pkg_version})'\n"
115
78
 
116
- install_message_with_warning =
117
- @install_message.call(pkg_name) +
118
- @version_warning.call(pkg_name, pkg_version) + "\n"
119
-
120
- @fake_capture3.expect(brew_info_cmd)
121
79
  @fake_capture3.expect(brew_install_cmd)
122
80
  @fake_capture3.stub do
123
81
  lambda do
124
82
  reset_logger
125
- pkg_provider.install
126
- pkg_provider.updated?.must_equal true
127
- end.must_output install_message_with_warning
83
+ pkg_provider.send(:install_package)
84
+ end.must_output version_warning
128
85
  end
129
86
  end
130
87
 
131
88
  it 'should raise exceptions for unavailable packages' do
132
89
  pkg_name = 'not-a-real-package'
133
90
  pkg_provider = package_provider(pkg_name)
134
- brew_info_cmd = brew(:info, pkg_name)
135
91
  brew_install_cmd = brew(:install, pkg_name)
136
92
 
137
- @fake_capture3.expect(brew_info_cmd)
138
93
  @fake_capture3.expect(brew_install_cmd)
139
94
  @fake_capture3.stub do
140
- e = -> { pkg_provider.install }.must_raise RuntimeError
95
+ e = -> { pkg_provider.send(:install_package) }.must_raise RuntimeError
141
96
  wright_error = "cannot install package '#{pkg_name}'"
142
97
  brew_error = "Error: No available formula for #{pkg_name} "
143
98
  e.message.must_equal %(#{wright_error}: "#{brew_error}")
@@ -145,123 +100,15 @@ describe Wright::Provider::Package::Homebrew do
145
100
  end
146
101
  end
147
102
 
148
- describe '#remove' do
149
- it 'should remove packages that are currently installed' do
103
+ describe '#remove_package' do
104
+ it 'should remove packages' do
150
105
  pkg_name = 'lame'
151
106
  pkg_provider = package_provider(pkg_name)
152
- brew_info_cmd = brew(:info, pkg_name)
153
107
  brew_uninstall_cmd = brew(:uninstall, pkg_name)
154
108
 
155
- @fake_capture3.expect(brew_info_cmd)
156
109
  @fake_capture3.expect(brew_uninstall_cmd)
157
110
  @fake_capture3.stub do
158
- lambda do
159
- reset_logger
160
- pkg_provider.remove
161
- pkg_provider.updated?.must_equal true
162
- end.must_output @remove_message.call(pkg_name)
163
- end
164
- end
165
-
166
- it 'should not try to remove packages that are already removed' do
167
- pkg_name = 'cd-discid'
168
- pkg_provider = package_provider(pkg_name)
169
- brew_info_cmd = brew(:info, pkg_name)
170
-
171
- @fake_capture3.expect(brew_info_cmd)
172
- @fake_capture3.stub do
173
- lambda do
174
- reset_logger
175
- pkg_provider.remove
176
- pkg_provider.updated?.must_equal false
177
- end.must_output @remove_message_debug.call(pkg_name)
178
- end
179
- end
180
-
181
- it 'should remove package versions that are currently installed' do
182
- pkg_name = 'lame'
183
- pkg_version = '3.99.5'
184
- pkg_provider = package_provider(pkg_name, pkg_version)
185
- brew_info_cmd = brew(:info, pkg_name)
186
- brew_uninstall_cmd = brew(:uninstall, pkg_name)
187
-
188
- @fake_capture3.expect(brew_info_cmd)
189
- @fake_capture3.expect(brew_uninstall_cmd)
190
-
191
- @fake_capture3.stub do
192
- lambda do
193
- reset_logger
194
- pkg_provider.remove
195
- pkg_provider.updated?.must_equal true
196
- end.must_output @remove_message.call(pkg_name)
197
- end
198
- end
199
- end
200
-
201
- describe 'dry_run' do
202
- it 'should not actually install packages' do
203
- pkg_name = 'cd-discid'
204
- pkg_provider = package_provider(pkg_name)
205
- brew_cmd = brew(:info, pkg_name)
206
-
207
- Wright.dry_run do
208
- @fake_capture3.expect(brew_cmd)
209
- @fake_capture3.stub do
210
- lambda do
211
- reset_logger
212
- pkg_provider.install
213
- end.must_output @install_message_dry.call(pkg_name)
214
- end
215
- end
216
- end
217
-
218
- it 'should not try to install packages that are already installed' do
219
- pkg_name = 'lame'
220
- pkg_provider = package_provider(pkg_name)
221
- brew_cmd = brew(:info, pkg_name)
222
-
223
- Wright.dry_run do
224
- @fake_capture3.expect(brew_cmd)
225
- @fake_capture3.stub do
226
- lambda do
227
- reset_logger
228
- pkg_provider.install
229
- pkg_provider.updated?.must_equal false
230
- end.must_output @install_message_debug.call(pkg_name)
231
- end
232
- end
233
- end
234
-
235
- it 'should not actually remove packages' do
236
- pkg_name = 'lame'
237
- pkg_provider = package_provider(pkg_name)
238
- brew_cmd = brew(:info, pkg_name)
239
-
240
- Wright.dry_run do
241
- @fake_capture3.expect(brew_cmd)
242
- @fake_capture3.stub do
243
- lambda do
244
- reset_logger
245
- pkg_provider.remove
246
- end.must_output @remove_message_dry.call(pkg_name)
247
- end
248
- end
249
- end
250
-
251
- it 'should not try to remove packages that are already removed' do
252
- pkg_name = 'cd-discid'
253
- pkg_provider = package_provider(pkg_name)
254
- brew_cmd = brew(:info, pkg_name)
255
-
256
- Wright.dry_run do
257
- @fake_capture3.expect(brew_cmd)
258
- @fake_capture3.stub do
259
- lambda do
260
- reset_logger
261
- pkg_provider.remove
262
- pkg_provider.updated?.must_equal false
263
- end.must_output @remove_message_debug.call(pkg_name)
264
- end
111
+ pkg_provider.send(:remove_package)
265
112
  end
266
113
  end
267
114
  end
@@ -4,15 +4,15 @@ require 'wright/provider'
4
4
  require 'wright/provider/package'
5
5
 
6
6
  describe Wright::Provider::Package do
7
- before(:each) do
8
- Wright::Provider::Package.send(:public, :uptodate?)
9
- end
7
+ describe '#uptodate?' do
8
+ before(:each) do
9
+ Wright::Provider::Package.send(:public, :uptodate?)
10
+ end
10
11
 
11
- after(:each) do
12
- Wright::Provider::Package.send(:private, :uptodate?)
13
- end
12
+ after(:each) do
13
+ Wright::Provider::Package.send(:private, :uptodate?)
14
+ end
14
15
 
15
- describe '#uptodate?' do
16
16
  it 'should return the correct status' do
17
17
  pkg_resource = OpenStruct.new(name: 'foo')
18
18
  pkg_provider = Wright::Provider::Package.new(pkg_resource)
@@ -60,4 +60,148 @@ describe Wright::Provider::Package do
60
60
  e.message.must_equal "invalid action 'foobarbaz'"
61
61
  end
62
62
  end
63
+
64
+ describe '#install' do
65
+ before(:each) do
66
+ pkg = 'foo'
67
+ @resource = OpenStruct.new(name: pkg)
68
+ @package = Wright::Provider::Package.new(@resource)
69
+ @mock_provider = Minitest::Mock.new
70
+ @installed_versions_stub = -> { @mock_provider.installed_versions }
71
+ @install_package_stub = -> { @mock_provider.install_package }
72
+
73
+ @install_message = "INFO: install package: '#{pkg}'\n"
74
+ @install_message_dry = "INFO: (would) install package: '#{pkg}'\n"
75
+ @install_message_debug = "DEBUG: package already installed: '#{pkg}'\n"
76
+ end
77
+
78
+ it 'should install packages that are not yet installed' do
79
+ @mock_provider.expect(:installed_versions, [])
80
+ @mock_provider.expect(:install_package, true)
81
+
82
+ @package.stub(:installed_versions, @installed_versions_stub) do
83
+ @package.stub(:install_package, @install_package_stub) do
84
+ lambda do
85
+ reset_logger
86
+ @package.install
87
+ @package.updated?.must_equal true
88
+ end.must_output @install_message
89
+ end
90
+ end
91
+ @mock_provider.verify
92
+ end
93
+
94
+ it 'should not try to install packages that already installed' do
95
+ @mock_provider.expect(:installed_versions, ['1.2.3'])
96
+
97
+ @package.stub(:installed_versions, @installed_versions_stub) do
98
+ @package.stub(:install_package, @install_package_stub) do
99
+ lambda do
100
+ reset_logger
101
+ @package.install
102
+ @package.updated?.must_equal false
103
+ end.must_output @install_message_debug
104
+ end
105
+ end
106
+ @mock_provider.verify
107
+ end
108
+
109
+ it 'should not try to install packages in dry-run mode' do
110
+ @mock_provider.expect(:installed_versions, [])
111
+
112
+ @package.stub(:installed_versions, @installed_versions_stub) do
113
+ lambda do
114
+ reset_logger
115
+ Wright.dry_run { @package.install }
116
+ @package.updated?.must_equal true
117
+ end.must_output @install_message_dry
118
+ end
119
+ @mock_provider.verify
120
+ end
121
+ end
122
+
123
+ describe '#remove' do
124
+ before(:each) do
125
+ pkg = 'foo'
126
+ @resource = OpenStruct.new(name: pkg)
127
+ @package = Wright::Provider::Package.new(@resource)
128
+ @mock_provider = Minitest::Mock.new
129
+ @installed_versions_stub = -> { @mock_provider.installed_versions }
130
+ @remove_package_stub = -> { @mock_provider.remove_package }
131
+
132
+ @remove_message = "INFO: remove package: '#{pkg}'\n"
133
+ @remove_message_dry = "INFO: (would) remove package: '#{pkg}'\n"
134
+ @remove_message_debug = "DEBUG: package already removed: '#{pkg}'\n"
135
+ end
136
+
137
+ it 'should remove packages that are currently installed' do
138
+ @mock_provider.expect(:installed_versions, ['1.2.3'])
139
+ @mock_provider.expect(:remove_package, true)
140
+
141
+ @package.stub(:installed_versions, @installed_versions_stub) do
142
+ @package.stub(:remove_package, @remove_package_stub) do
143
+ lambda do
144
+ reset_logger
145
+ @package.remove
146
+ @package.updated?.must_equal true
147
+ end.must_output @remove_message
148
+ end
149
+ end
150
+ @mock_provider.verify
151
+ end
152
+
153
+ it 'should not try to remove packages that are already removed' do
154
+ @mock_provider.expect(:installed_versions, [])
155
+
156
+ @package.stub(:installed_versions, @installed_versions_stub) do
157
+ @package.stub(:remove_package, @remove_package_stub) do
158
+ lambda do
159
+ reset_logger
160
+ @package.remove
161
+ @package.updated?.must_equal false
162
+ end.must_output @remove_message_debug
163
+ end
164
+ end
165
+ @mock_provider.verify
166
+ end
167
+
168
+ it 'should not try to remove packages in dry-run mode' do
169
+ @mock_provider.expect(:installed_versions, ['1.2.3'])
170
+
171
+ @package.stub(:installed_versions, @installed_versions_stub) do
172
+ @package.stub(:remove_package, @remove_package_stub) do
173
+ lambda do
174
+ reset_logger
175
+ Wright.dry_run { @package.remove }
176
+ @package.updated?.must_equal true
177
+ end.must_output @remove_message_dry
178
+ end
179
+ end
180
+ @mock_provider.verify
181
+ end
182
+ end
183
+
184
+ describe '#installed_versions' do
185
+ it 'should raise an exception' do
186
+ resource = OpenStruct.new(name: 'foo')
187
+ provider = Wright::Provider::Package.new(resource)
188
+ -> { provider.installed_versions }.must_raise(NotImplementedError)
189
+ end
190
+ end
191
+
192
+ describe '#install_package' do
193
+ it 'should raise an exception' do
194
+ resource = OpenStruct.new(name: 'foo')
195
+ provider = Wright::Provider::Package.new(resource)
196
+ -> { provider.send(:install_package) }.must_raise(NotImplementedError)
197
+ end
198
+ end
199
+
200
+ describe '#remove_package' do
201
+ it 'should raise an exception' do
202
+ resource = OpenStruct.new(name: 'foo')
203
+ provider = Wright::Provider::Package.new(resource)
204
+ -> { provider.send(:remove_package) }.must_raise(NotImplementedError)
205
+ end
206
+ end
63
207
  end
@@ -0,0 +1,167 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ require 'fakeetc'
4
+ require 'wright/provider'
5
+ require 'wright/provider/user'
6
+ require 'wright/provider/user/darwin_directory_service'
7
+
8
+ describe Wright::Provider::User::DarwinDirectoryService do
9
+ def dscl(command, user, key, value)
10
+ %W(dscl . -#{command} /Users/#{user} #{key} #{value})
11
+ end
12
+
13
+ before(:each) do
14
+ darwin_directory_service_dir =
15
+ File.join(File.dirname(__FILE__), 'darwin_directory_service')
16
+ @fake_capture3 = FakeCapture3.new(darwin_directory_service_dir, {})
17
+ @staff_gid = 20
18
+ @resource = OpenStruct.new(name: 'johndoe')
19
+ FakeEtc.add_users('dummy' => { uid: 23 })
20
+ FakeEtc.add_groups('staff' => { gid: @staff_gid },
21
+ 'anonymous' => { gid: 123 })
22
+ end
23
+
24
+ after(:each) do
25
+ FakeEtc.clear_users
26
+ FakeEtc.clear_groups
27
+ end
28
+
29
+ describe '#add_user' do
30
+ before(:each) do
31
+ Wright::Provider::User::DarwinDirectoryService.send(:public, :add_user)
32
+ end
33
+
34
+ after(:each) do
35
+ Wright::Provider::User::DarwinDirectoryService.send(:private, :add_user)
36
+ end
37
+
38
+ it 'should add users' do
39
+ provider = Wright::Provider::User::DarwinDirectoryService.new(@resource)
40
+ user = @resource.name
41
+
42
+ @fake_capture3.expect(dscl(:create, user, 'UniqueID', 500),
43
+ 'dscl-new-user-uid')
44
+ @fake_capture3.expect(dscl(:create, user, 'UserShell', '/bin/bash'),
45
+ 'dscl-new-user-shell')
46
+ @fake_capture3.expect(dscl(:create, user, 'RealName', ''),
47
+ 'dscl-new-user-full-name')
48
+ @fake_capture3.expect(dscl(:create,
49
+ user,
50
+ 'NFSHomeDirectory',
51
+ "/Users/#{user}"),
52
+ 'dscl-new-user-home')
53
+ @fake_capture3.expect(dscl(:create, user, 'PrimaryGroupID', @staff_gid),
54
+ 'dscl-new-user-primary-group')
55
+ @fake_capture3.expect(dscl(:create, user, 'Password', '*'),
56
+ 'dscl-new-user-password')
57
+ @fake_capture3.stub do
58
+ FakeEtc { provider.add_user }
59
+ end
60
+ end
61
+
62
+ it 'should add system users' do
63
+ user = @resource.name
64
+ resource = OpenStruct.new(name: user, system: true)
65
+ provider = Wright::Provider::User::DarwinDirectoryService.new(resource)
66
+
67
+ @fake_capture3.expect(dscl(:create, user, 'UniqueID', 1),
68
+ 'dscl-new-user-uid')
69
+ @fake_capture3.expect(dscl(:create, user, 'UserShell', '/bin/bash'),
70
+ 'dscl-new-user-shell')
71
+ @fake_capture3.expect(dscl(:create, user, 'RealName', ''),
72
+ 'dscl-new-user-full-name')
73
+ @fake_capture3.expect(dscl(:create,
74
+ user,
75
+ 'NFSHomeDirectory',
76
+ "/Users/#{user}"),
77
+ 'dscl-new-user-home')
78
+ @fake_capture3.expect(dscl(:create, user, 'PrimaryGroupID', @staff_gid),
79
+ 'dscl-new-user-primary-group')
80
+ @fake_capture3.expect(dscl(:create, user, 'Password', '*'),
81
+ 'dscl-new-user-password')
82
+ @fake_capture3.stub do
83
+ FakeEtc { provider.add_user }
84
+ end
85
+ end
86
+
87
+ it 'should add users with options' do
88
+ user = @resource.name
89
+ resource = OpenStruct.new(name: user,
90
+ uid: 42,
91
+ primary_group: 'anonymous',
92
+ full_name: 'John Doe',
93
+ groups: [],
94
+ shell: '/bin/zsh',
95
+ home: "/home/#{user}",
96
+ system: true)
97
+ provider = Wright::Provider::User::DarwinDirectoryService.new(resource)
98
+
99
+ @fake_capture3.expect(dscl(:create, user, 'UniqueID', 42),
100
+ 'dscl-new-user-uid')
101
+ @fake_capture3.expect(dscl(:create, user, 'UserShell', '/bin/zsh'),
102
+ 'dscl-new-user-shell')
103
+ @fake_capture3.expect(dscl(:create, user, 'RealName', 'John Doe'),
104
+ 'dscl-new-user-full-name')
105
+ @fake_capture3.expect(dscl(:create,
106
+ user,
107
+ 'NFSHomeDirectory',
108
+ "/home/#{user}"),
109
+ 'dscl-new-user-home')
110
+ @fake_capture3.expect(dscl(:create, user, 'PrimaryGroupID', 123),
111
+ 'dscl-new-user-primary-group')
112
+ @fake_capture3.expect(dscl(:create, user, 'Password', '*'),
113
+ 'dscl-new-user-password')
114
+ @fake_capture3.stub do
115
+ FakeEtc { provider.add_user }
116
+ end
117
+ end
118
+ end
119
+
120
+ describe '#update_user' do
121
+ before(:each) do
122
+ Wright::Provider::User::DarwinDirectoryService.send(:public,
123
+ :update_user)
124
+ end
125
+
126
+ after(:each) do
127
+ Wright::Provider::User::DarwinDirectoryService.send(:private,
128
+ :update_user)
129
+ end
130
+
131
+ it 'should update users' do
132
+ user = @resource.name
133
+ @resource.uid = 42
134
+ provider = Wright::Provider::User::DarwinDirectoryService.new(@resource)
135
+
136
+ FakeEtc.add_users(@resource.name => { uid: @resource.uid + 1 })
137
+ @fake_capture3.expect(dscl(:create, user, 'UniqueID', @resource.uid),
138
+ 'dscl-new-user-uid')
139
+ @fake_capture3.stub do
140
+ FakeEtc { provider.update_user }
141
+ end
142
+ end
143
+ end
144
+
145
+ describe '#delete_user' do
146
+ before(:each) do
147
+ Wright::Provider::User::DarwinDirectoryService.send(:public,
148
+ :delete_user)
149
+ end
150
+
151
+ after(:each) do
152
+ Wright::Provider::User::DarwinDirectoryService.send(:private,
153
+ :delete_user)
154
+ end
155
+
156
+ it 'should delete users' do
157
+ provider = Wright::Provider::User::DarwinDirectoryService.new(@resource)
158
+
159
+ FakeEtc.add_users(@resource.name => {})
160
+ @fake_capture3.expect(%W(dscl . -delete /Users/#{@resource.name}),
161
+ 'dscl-delete-user')
162
+ @fake_capture3.stub do
163
+ FakeEtc { provider.delete_user }
164
+ end
165
+ end
166
+ end
167
+ end
@@ -5,7 +5,7 @@ require 'wright/provider'
5
5
  require 'wright/provider/user'
6
6
  require 'wright/provider/user/gnu_passwd'
7
7
 
8
- describe Wright::Provider::User do
8
+ describe Wright::Provider::User::GnuPasswd do
9
9
  before(:each) do
10
10
  username = 'johndoe'
11
11
  @resource = OpenStruct.new(name: username)
@@ -24,7 +24,7 @@ describe Wright::Provider::User do
24
24
  end
25
25
 
26
26
  after(:each) do
27
- Wright::Provider::User.send(:private, :add_user)
27
+ Wright::Provider::User::GnuPasswd.send(:private, :add_user)
28
28
  end
29
29
 
30
30
  it 'should add users' do
@@ -70,7 +70,7 @@ describe Wright::Provider::User do
70
70
  end
71
71
 
72
72
  after(:each) do
73
- Wright::Provider::User.send(:private, :update_user)
73
+ Wright::Provider::User::GnuPasswd.send(:private, :update_user)
74
74
  end
75
75
 
76
76
  it 'should update users' do
@@ -85,13 +85,13 @@ describe Wright::Provider::User do
85
85
  end
86
86
  end
87
87
 
88
- describe '#update_user' do
88
+ describe '#delete_user' do
89
89
  before(:each) do
90
90
  Wright::Provider::User::GnuPasswd.send(:public, :delete_user)
91
91
  end
92
92
 
93
93
  after(:each) do
94
- Wright::Provider::User.send(:private, :delete_user)
94
+ Wright::Provider::User::GnuPasswd.send(:private, :delete_user)
95
95
  end
96
96
 
97
97
  it 'should delete users' do