wright 0.1.2 → 0.2.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 (142) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +34 -0
  3. data/NEWS.md +22 -0
  4. data/README.md +56 -40
  5. data/lib/wright/dsl.rb +1 -2
  6. data/lib/wright/provider/directory.rb +2 -9
  7. data/lib/wright/provider/file.rb +6 -13
  8. data/lib/wright/provider/group/darwin_directory_service.rb +61 -0
  9. data/lib/wright/provider/group/gnu_passwd.rb +42 -0
  10. data/lib/wright/provider/group.rb +111 -0
  11. data/lib/wright/provider/package/apt.rb +9 -43
  12. data/lib/wright/provider/package/homebrew.rb +68 -0
  13. data/lib/wright/provider/package.rb +26 -0
  14. data/lib/wright/provider/symlink.rb +4 -9
  15. data/lib/wright/provider/user/gnu_passwd.rb +55 -0
  16. data/lib/wright/provider/user.rb +137 -0
  17. data/lib/wright/provider.rb +40 -0
  18. data/lib/wright/resource/file.rb +1 -1
  19. data/lib/wright/resource/group.rb +64 -0
  20. data/lib/wright/resource/package.rb +6 -6
  21. data/lib/wright/resource/user.rb +76 -0
  22. data/lib/wright/util/recursive_autoloader.rb +1 -1
  23. data/lib/wright/util/stolen_from_activesupport.rb +2 -0
  24. data/lib/wright/util.rb +17 -2
  25. data/lib/wright/version.rb +1 -1
  26. data/lib/wright.rb +3 -2
  27. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership.return +1 -0
  28. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership.stdout +0 -0
  29. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_permission-denied-user.return +1 -0
  30. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_permission-denied-user.stderr +2 -0
  31. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_permission-denied-user.stdout +0 -0
  32. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_user1_user2.return +1 -0
  33. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_user1_user2.stderr +0 -0
  34. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_user1_user2.stdout +0 -0
  35. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_1234_newgroup.return +1 -0
  36. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_1234_newgroup.stderr +0 -0
  37. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_1234_newgroup.stdout +0 -0
  38. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_499_newgroup.return +1 -0
  39. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_499_newgroup.stderr +0 -0
  40. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_499_newgroup.stdout +0 -0
  41. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_ERROR_newgroup.return +1 -0
  42. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_ERROR_newgroup.stderr +0 -0
  43. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_ERROR_newgroup.stdout +1 -0
  44. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_bazqux.return +1 -0
  45. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_bazqux.stderr +1 -0
  46. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_bazqux.stdout +0 -0
  47. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_foobar.return +1 -0
  48. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_foobar.stderr +1 -0
  49. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_foobar.stdout +10 -0
  50. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_52_foobar.return +1 -0
  51. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_52_foobar.stderr +0 -0
  52. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_52_foobar.stdout +0 -0
  53. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_ERROR_foobar.return +1 -0
  54. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_ERROR_foobar.stderr +0 -0
  55. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_ERROR_foobar.stdout +1 -0
  56. data/spec/provider/group/darwin_directory_service_spec.rb +381 -0
  57. data/spec/provider/group/gnu_passwd/gpasswd_-M_''_foobar.return +1 -0
  58. data/spec/provider/group/gnu_passwd/gpasswd_-M_''_foobar.stderr +0 -0
  59. data/spec/provider/group/gnu_passwd/gpasswd_-M_''_foobar.stdout +0 -0
  60. data/spec/provider/group/gnu_passwd/gpasswd_-M_'not-a-user'_foobar.return +1 -0
  61. data/spec/provider/group/gnu_passwd/gpasswd_-M_'not-a-user'_foobar.stderr +1 -0
  62. data/spec/provider/group/gnu_passwd/gpasswd_-M_'not-a-user'_foobar.stdout +0 -0
  63. data/spec/provider/group/gnu_passwd/gpasswd_-M_'user1,user2'_foobar.return +1 -0
  64. data/spec/provider/group/gnu_passwd/gpasswd_-M_'user1,user2'_foobar.stderr +0 -0
  65. data/spec/provider/group/gnu_passwd/gpasswd_-M_'user1,user2'_foobar.stdout +0 -0
  66. data/spec/provider/group/gnu_passwd/groupadd_--system_newgroup.return +1 -0
  67. data/spec/provider/group/gnu_passwd/groupadd_--system_newgroup.stderr +0 -0
  68. data/spec/provider/group/gnu_passwd/groupadd_--system_newgroup.stdout +0 -0
  69. data/spec/provider/group/gnu_passwd/groupadd_-g_1234_newgroup.return +1 -0
  70. data/spec/provider/group/gnu_passwd/groupadd_-g_1234_newgroup.stderr +0 -0
  71. data/spec/provider/group/gnu_passwd/groupadd_-g_1234_newgroup.stdout +0 -0
  72. data/spec/provider/group/gnu_passwd/groupadd_-g_ERROR_newgroup.return +1 -0
  73. data/spec/provider/group/gnu_passwd/groupadd_-g_ERROR_newgroup.stderr +1 -0
  74. data/spec/provider/group/gnu_passwd/groupadd_-g_ERROR_newgroup.stdout +0 -0
  75. data/spec/provider/group/gnu_passwd/groupdel_bazqux.return +1 -0
  76. data/spec/provider/group/gnu_passwd/groupdel_bazqux.stderr +1 -0
  77. data/spec/provider/group/gnu_passwd/groupdel_bazqux.stdout +0 -0
  78. data/spec/provider/group/gnu_passwd/groupdel_foobar.return +1 -0
  79. data/spec/provider/group/gnu_passwd/groupdel_foobar.stderr +0 -0
  80. data/spec/provider/group/gnu_passwd/groupdel_foobar.stdout +0 -0
  81. data/spec/provider/group/gnu_passwd/groupmod_-g_52_foobar.return +1 -0
  82. data/spec/provider/group/gnu_passwd/groupmod_-g_52_foobar.stderr +0 -0
  83. data/spec/provider/group/gnu_passwd/groupmod_-g_52_foobar.stdout +0 -0
  84. data/spec/provider/group/gnu_passwd/groupmod_-g_ERROR_foobar.return +1 -0
  85. data/spec/provider/group/gnu_passwd/groupmod_-g_ERROR_foobar.stderr +1 -0
  86. data/spec/provider/group/gnu_passwd/groupmod_-g_ERROR_foobar.stdout +0 -0
  87. data/spec/provider/group/gnu_passwd_spec.rb +382 -0
  88. data/spec/provider/group_spec.rb +132 -0
  89. data/spec/provider/package/apt/apt-get_install_-qy_not-a-real-package.stderr +1 -0
  90. data/spec/provider/package/apt/{dpkg-query_-s_unknown-package.stderr → dpkg-query_-s_not-a-real-package.stderr} +1 -1
  91. data/spec/provider/package/apt/dpkg-query_-s_not-a-real-package.stdout +0 -0
  92. data/spec/provider/package/apt_spec.rb +27 -15
  93. data/spec/provider/package/homebrew/brew_info_--json=v1_cd-discid.return +1 -0
  94. data/spec/provider/package/homebrew/brew_info_--json=v1_cd-discid.stderr +0 -0
  95. data/spec/provider/package/homebrew/brew_info_--json=v1_cd-discid.stdout +1 -0
  96. data/spec/provider/package/homebrew/brew_info_--json=v1_lame.return +1 -0
  97. data/spec/provider/package/homebrew/brew_info_--json=v1_lame.stderr +0 -0
  98. data/spec/provider/package/homebrew/brew_info_--json=v1_lame.stdout +1 -0
  99. data/spec/provider/package/homebrew/brew_info_--json=v1_not-a-real-package.return +1 -0
  100. data/spec/provider/package/homebrew/brew_info_--json=v1_not-a-real-package.stderr +1 -0
  101. data/spec/provider/package/homebrew/brew_info_--json=v1_not-a-real-package.stdout +0 -0
  102. data/spec/provider/package/homebrew/brew_install_cd-discid.return +1 -0
  103. data/spec/provider/package/homebrew/brew_install_cd-discid.stderr +0 -0
  104. data/spec/provider/package/homebrew/brew_install_cd-discid.stdout +9 -0
  105. data/spec/provider/package/homebrew/brew_install_not-a-real-package.return +1 -0
  106. data/spec/provider/package/homebrew/brew_install_not-a-real-package.stderr +1 -0
  107. data/spec/provider/package/homebrew/brew_install_not-a-real-package.stdout +2 -0
  108. data/spec/provider/package/homebrew/brew_uninstall_lame.return +1 -0
  109. data/spec/provider/package/homebrew/brew_uninstall_lame.stderr +0 -0
  110. data/spec/provider/package/homebrew/brew_uninstall_lame.stdout +1 -0
  111. data/spec/provider/package/homebrew_spec.rb +268 -0
  112. data/spec/provider/user/gnu_passwd/useradd_johndoe.return +1 -0
  113. data/spec/provider/user/gnu_passwd/useradd_johndoe.stderr +0 -0
  114. data/spec/provider/user/gnu_passwd/useradd_johndoe.stdout +0 -0
  115. data/spec/provider/user/gnu_passwd/useradd_with_options.return +1 -0
  116. data/spec/provider/user/gnu_passwd/useradd_with_options.stderr +0 -0
  117. data/spec/provider/user/gnu_passwd/useradd_with_options.stdout +0 -0
  118. data/spec/provider/user/gnu_passwd/userdel_johndoe.return +1 -0
  119. data/spec/provider/user/gnu_passwd/userdel_johndoe.stderr +0 -0
  120. data/spec/provider/user/gnu_passwd/userdel_johndoe.stdout +0 -0
  121. data/spec/provider/user/gnu_passwd/usermod_-u_42_johndoe.return +1 -0
  122. data/spec/provider/user/gnu_passwd/usermod_-u_42_johndoe.stderr +0 -0
  123. data/spec/provider/user/gnu_passwd/usermod_-u_42_johndoe.stdout +0 -0
  124. data/spec/provider/user/gnu_passwd_spec.rb +107 -0
  125. data/spec/provider/user_spec.rb +327 -0
  126. data/spec/resource/group_spec.rb +29 -0
  127. data/spec/resource/package_spec.rb +37 -0
  128. data/spec/resource/user_spec.rb +29 -0
  129. data/spec/spec_helper.rb +5 -11
  130. data/spec/spec_helpers/fake_capture3.rb +11 -7
  131. data/spec/spec_helpers/test_coverage.rb +26 -0
  132. data/spec/util/activesupport_spec.rb +1 -0
  133. data/spec/util/file_permissions_spec.rb +2 -2
  134. data/spec/util/file_spec.rb +1 -0
  135. data/spec/util/user_spec.rb +2 -0
  136. metadata +246 -23
  137. data/NEWS +0 -18
  138. data/spec/provider/package/apt/apt-get_install_-qy_unknown-package.stderr +0 -1
  139. /data/spec/provider/{package/apt/dpkg-query_-s_unknown-package.stdout → group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership.stderr} +0 -0
  140. /data/spec/provider/package/apt/{apt-get_install_-qy_unknown-package.return → apt-get_install_-qy_not-a-real-package.return} +0 -0
  141. /data/spec/provider/package/apt/{apt-get_install_-qy_unknown-package.stdout → apt-get_install_-qy_not-a-real-package.stdout} +0 -0
  142. /data/spec/provider/package/apt/{dpkg-query_-s_unknown-package.return → dpkg-query_-s_not-a-real-package.return} +0 -0
@@ -0,0 +1,268 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ require 'wright/provider/package/homebrew'
4
+
5
+ describe Wright::Provider::Package::Homebrew do
6
+ def brew(action, pkg_name)
7
+ options = action == :info ? ['info', '--json=v1'] : [action.to_s]
8
+ ['brew', *options, pkg_name]
9
+ end
10
+
11
+ def package_provider(pkg_name, pkg_version = nil)
12
+ pkg_resource = OpenStruct.new(name: pkg_name, version: pkg_version)
13
+ Wright::Provider::Package::Homebrew.new(pkg_resource)
14
+ end
15
+
16
+ before :each do
17
+ homebrew_dir = File.join(File.dirname(__FILE__), 'homebrew')
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
+ end
37
+
38
+ describe '#installed_versions' do
39
+ it 'should return the installed package version via brew info' do
40
+ pkg_name = 'lame'
41
+ pkg_versions = ['3.99.5']
42
+ pkg_provider = package_provider(pkg_name)
43
+ brew_cmd = brew(:info, pkg_name)
44
+
45
+ @fake_capture3.expect(brew_cmd)
46
+ @fake_capture3.stub do
47
+ pkg_provider.installed_versions.must_equal pkg_versions
48
+ end
49
+ end
50
+
51
+ it 'should return an empty array for uninstalled packages' do
52
+ pkg_name = 'cd-discid'
53
+ pkg_versions = []
54
+ pkg_provider = package_provider(pkg_name)
55
+ brew_cmd = brew(:info, pkg_name)
56
+
57
+ @fake_capture3.expect(brew_cmd)
58
+ @fake_capture3.stub do
59
+ pkg_provider.installed_versions.must_equal pkg_versions
60
+ end
61
+ end
62
+
63
+ it 'should return an empty array for unavailable packages' do
64
+ pkg_name = 'not-a-real-package'
65
+ pkg_versions = []
66
+ pkg_provider = package_provider(pkg_name)
67
+ brew_cmd = brew(:info, pkg_name)
68
+
69
+ @fake_capture3.expect(brew_cmd)
70
+ @fake_capture3.stub do
71
+ pkg_provider.installed_versions.must_equal pkg_versions
72
+ end
73
+ end
74
+ end
75
+
76
+ describe '#install' do
77
+ it 'should install packages that are not currently installed' do
78
+ pkg_name = 'cd-discid'
79
+ pkg_provider = package_provider(pkg_name)
80
+ brew_info_cmd = brew(:info, pkg_name)
81
+ brew_install_cmd = brew(:install, pkg_name)
82
+
83
+ @fake_capture3.expect(brew_info_cmd)
84
+ @fake_capture3.expect(brew_install_cmd)
85
+ @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)
106
+ end
107
+ end
108
+
109
+ it 'should output a warning when specifying a package version' do
110
+ pkg_name = 'cd-discid'
111
+ pkg_version = '1.1'
112
+ pkg_provider = package_provider(pkg_name, pkg_version)
113
+ brew_info_cmd = brew(:info, pkg_name)
114
+ brew_install_cmd = brew(:install, pkg_name)
115
+
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
+ @fake_capture3.expect(brew_install_cmd)
122
+ @fake_capture3.stub do
123
+ lambda do
124
+ reset_logger
125
+ pkg_provider.install
126
+ pkg_provider.updated?.must_equal true
127
+ end.must_output install_message_with_warning
128
+ end
129
+ end
130
+
131
+ it 'should raise exceptions for unavailable packages' do
132
+ pkg_name = 'not-a-real-package'
133
+ pkg_provider = package_provider(pkg_name)
134
+ brew_info_cmd = brew(:info, pkg_name)
135
+ brew_install_cmd = brew(:install, pkg_name)
136
+
137
+ @fake_capture3.expect(brew_info_cmd)
138
+ @fake_capture3.expect(brew_install_cmd)
139
+ @fake_capture3.stub do
140
+ e = -> { pkg_provider.install }.must_raise RuntimeError
141
+ wright_error = "cannot install package '#{pkg_name}'"
142
+ brew_error = "Error: No available formula for #{pkg_name} "
143
+ e.message.must_equal %(#{wright_error}: "#{brew_error}")
144
+ end
145
+ end
146
+ end
147
+
148
+ describe '#remove' do
149
+ it 'should remove packages that are currently installed' do
150
+ pkg_name = 'lame'
151
+ pkg_provider = package_provider(pkg_name)
152
+ brew_info_cmd = brew(:info, pkg_name)
153
+ brew_uninstall_cmd = brew(:uninstall, pkg_name)
154
+
155
+ @fake_capture3.expect(brew_info_cmd)
156
+ @fake_capture3.expect(brew_uninstall_cmd)
157
+ @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
265
+ end
266
+ end
267
+ end
268
+ end
@@ -0,0 +1,107 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ require 'fakeetc'
4
+ require 'wright/provider'
5
+ require 'wright/provider/user'
6
+ require 'wright/provider/user/gnu_passwd'
7
+
8
+ describe Wright::Provider::User do
9
+ before(:each) do
10
+ username = 'johndoe'
11
+ @resource = OpenStruct.new(name: username)
12
+ gnu_passwd_dir = File.join(File.dirname(__FILE__), 'gnu_passwd')
13
+ @fake_capture3 = FakeCapture3.new(gnu_passwd_dir, {})
14
+ end
15
+
16
+ after(:each) do
17
+ FakeEtc.clear_users
18
+ FakeEtc.clear_groups
19
+ end
20
+
21
+ describe '#add_user' do
22
+ before(:each) do
23
+ Wright::Provider::User::GnuPasswd.send(:public, :add_user)
24
+ end
25
+
26
+ after(:each) do
27
+ Wright::Provider::User.send(:private, :add_user)
28
+ end
29
+
30
+ it 'should add users' do
31
+ provider = Wright::Provider::User::GnuPasswd.new(@resource)
32
+
33
+ @fake_capture3.expect(%W(useradd #{@resource.name}))
34
+ @fake_capture3.stub do
35
+ FakeEtc { provider.add_user }
36
+ end
37
+ end
38
+
39
+ it 'should add users with options' do
40
+ username = @resource.name
41
+ resource = OpenStruct.new(name: username,
42
+ uid: 42,
43
+ primary_group: 'anonymous',
44
+ full_name: 'John Doe',
45
+ groups: [],
46
+ shell: '/bin/bash',
47
+ home: "/home/#{username}",
48
+ system: true)
49
+ provider = Wright::Provider::User::GnuPasswd.new(resource)
50
+
51
+ expected_args = %W(-u #{resource.uid}
52
+ -g #{resource.primary_group}
53
+ -c #{resource.full_name},,,
54
+ -G #{resource.groups.join(',')}
55
+ -s #{resource.shell}
56
+ -d #{resource.home}
57
+ -r
58
+ #{resource.name})
59
+ FakeEtc.add_groups('anonymous' => { gid: 123 })
60
+ @fake_capture3.expect(['useradd', *expected_args], 'useradd_with_options')
61
+ @fake_capture3.stub do
62
+ FakeEtc { provider.add_user }
63
+ end
64
+ end
65
+ end
66
+
67
+ describe '#update_user' do
68
+ before(:each) do
69
+ Wright::Provider::User::GnuPasswd.send(:public, :update_user)
70
+ end
71
+
72
+ after(:each) do
73
+ Wright::Provider::User.send(:private, :update_user)
74
+ end
75
+
76
+ it 'should update users' do
77
+ @resource.uid = 42
78
+ provider = Wright::Provider::User::GnuPasswd.new(@resource)
79
+
80
+ FakeEtc.add_users(@resource.name => { uid: @resource.uid + 1 })
81
+ @fake_capture3.expect(%W(usermod -u #{@resource.uid} #{@resource.name}))
82
+ @fake_capture3.stub do
83
+ FakeEtc { provider.update_user }
84
+ end
85
+ end
86
+ end
87
+
88
+ describe '#update_user' do
89
+ before(:each) do
90
+ Wright::Provider::User::GnuPasswd.send(:public, :delete_user)
91
+ end
92
+
93
+ after(:each) do
94
+ Wright::Provider::User.send(:private, :delete_user)
95
+ end
96
+
97
+ it 'should delete users' do
98
+ provider = Wright::Provider::User::GnuPasswd.new(@resource)
99
+
100
+ FakeEtc.add_users(@resource.name => {})
101
+ @fake_capture3.expect(%W(userdel #{@resource.name}))
102
+ @fake_capture3.stub do
103
+ FakeEtc { provider.delete_user }
104
+ end
105
+ end
106
+ end
107
+ end