wright 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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