wright 0.3.2 → 0.4.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 (99) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +7 -0
  3. data/README.md +60 -54
  4. data/lib/wright/cli.rb +44 -18
  5. data/lib/wright/dry_run.rb +7 -0
  6. data/lib/wright/provider/directory.rb +26 -30
  7. data/lib/wright/provider/file.rb +34 -34
  8. data/lib/wright/provider/group/darwin_directory_service.rb +8 -7
  9. data/lib/wright/provider/group/gnu_passwd.rb +5 -5
  10. data/lib/wright/provider/group.rb +53 -36
  11. data/lib/wright/provider/package/apt.rb +32 -8
  12. data/lib/wright/provider/package/homebrew.rb +6 -5
  13. data/lib/wright/provider/package/yum.rb +39 -0
  14. data/lib/wright/provider/package.rb +30 -16
  15. data/lib/wright/provider/symlink.rb +32 -33
  16. data/lib/wright/provider/user/darwin_directory_service.rb +14 -17
  17. data/lib/wright/provider/user/gnu_passwd.rb +20 -21
  18. data/lib/wright/provider/user.rb +58 -41
  19. data/lib/wright/resource/group.rb +1 -0
  20. data/lib/wright/resource/package.rb +16 -3
  21. data/lib/wright/resource/user.rb +1 -0
  22. data/lib/wright/resource.rb +4 -2
  23. data/lib/wright/util/user.rb +34 -2
  24. data/lib/wright/version.rb +1 -1
  25. data/man/wright.1 +15 -11
  26. data/spec/cli_spec.rb +18 -0
  27. data/spec/provider/group/darwin_directory_service_spec.rb +76 -220
  28. data/spec/provider/group/gnu_passwd_spec.rb +36 -189
  29. data/spec/provider/group_spec.rb +180 -27
  30. data/spec/provider/package/apt/apt-cache_policy_dmenu.return +1 -0
  31. data/spec/provider/package/apt/apt-cache_policy_dmenu.stderr +0 -0
  32. data/spec/provider/package/apt/apt-cache_policy_dmenu.stdout +4 -0
  33. data/spec/provider/package/apt/apt-cache_policy_htop.stdout +3 -3
  34. data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.return +1 -0
  35. data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.stderr +0 -0
  36. data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.stdout +6 -0
  37. data/spec/provider/package/apt/apt-cache_policy_linux-image.return +1 -0
  38. data/spec/provider/package/apt/apt-cache_policy_linux-image.stderr +0 -0
  39. data/spec/provider/package/apt/apt-cache_policy_linux-image.stdout +4 -0
  40. data/spec/provider/package/apt/apt-cache_policy_suckless-tools.return +1 -0
  41. data/spec/provider/package/apt/apt-cache_policy_suckless-tools.stderr +0 -0
  42. data/spec/provider/package/apt/apt-cache_policy_suckless-tools.stdout +6 -0
  43. data/spec/provider/package/apt/apt-cache_showpkg_dmenu.return +1 -0
  44. data/spec/provider/package/apt/apt-cache_showpkg_dmenu.stderr +0 -0
  45. data/spec/provider/package/apt/apt-cache_showpkg_dmenu.stdout +9 -0
  46. data/spec/provider/package/apt/apt-cache_showpkg_htop.return +1 -0
  47. data/spec/provider/package/apt/apt-cache_showpkg_htop.stderr +0 -0
  48. data/spec/provider/package/apt/apt-cache_showpkg_htop.stdout +20 -0
  49. data/spec/provider/package/apt/apt-cache_showpkg_linux-image.return +1 -0
  50. data/spec/provider/package/apt/apt-cache_showpkg_linux-image.stderr +0 -0
  51. data/spec/provider/package/apt/apt-cache_showpkg_linux-image.stdout +11 -0
  52. data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.return +1 -0
  53. data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.stderr +0 -0
  54. data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.stdout +1 -0
  55. data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.return +1 -0
  56. data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.stderr +0 -0
  57. data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.stdout +26 -0
  58. data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.return +1 -0
  59. data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.stderr +0 -0
  60. data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.stdout +15 -0
  61. data/spec/provider/package/apt_spec.rb +82 -14
  62. data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.return +1 -0
  63. data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.stderr +0 -0
  64. data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.stdout +7 -0
  65. data/spec/provider/package/homebrew/brew_uninstall_--force_lame.return +1 -0
  66. data/spec/provider/package/homebrew/brew_uninstall_--force_lame.stderr +0 -0
  67. data/spec/provider/package/homebrew/brew_uninstall_--force_lame.stdout +1 -0
  68. data/spec/provider/package/homebrew_spec.rb +33 -6
  69. data/spec/provider/package/yum/rpm_-q_httpd.return +1 -0
  70. data/spec/provider/package/yum/rpm_-q_httpd.stderr +0 -0
  71. data/spec/provider/package/yum/rpm_-q_httpd.stdout +1 -0
  72. data/spec/provider/package/yum/rpm_-q_zsh.return +1 -0
  73. data/spec/provider/package/yum/rpm_-q_zsh.stderr +0 -0
  74. data/spec/provider/package/yum/rpm_-q_zsh.stdout +1 -0
  75. data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.return +1 -0
  76. data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.stderr +0 -0
  77. data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.stdout +37 -0
  78. data/spec/provider/package/yum/yum_install_-y_nano.return +1 -0
  79. data/spec/provider/package/yum/yum_install_-y_nano.stderr +0 -0
  80. data/spec/provider/package/yum/yum_install_-y_nano.stdout +36 -0
  81. data/spec/provider/package/yum/yum_install_-y_not-a-real-package.return +1 -0
  82. data/spec/provider/package/yum/yum_install_-y_not-a-real-package.stderr +1 -0
  83. data/spec/provider/package/yum/yum_install_-y_not-a-real-package.stdout +6 -0
  84. data/spec/provider/package/yum/yum_install_with_options.return +1 -0
  85. data/spec/provider/package/yum/yum_install_with_options.stderr +0 -0
  86. data/spec/provider/package/yum/yum_install_with_options.stdout +53 -0
  87. data/spec/provider/package/yum/yum_remove_-y_screen.return +1 -0
  88. data/spec/provider/package/yum/yum_remove_-y_screen.stderr +0 -0
  89. data/spec/provider/package/yum/yum_remove_-y_screen.stdout +31 -0
  90. data/spec/provider/package/yum/yum_remove_with_options.return +1 -0
  91. data/spec/provider/package/yum/yum_remove_with_options.stderr +0 -0
  92. data/spec/provider/package/yum/yum_remove_with_options.stdout +30 -0
  93. data/spec/provider/package/yum_spec.rb +130 -0
  94. data/spec/provider/user/darwin_directory_service_spec.rb +12 -10
  95. data/spec/provider/user/gnu_passwd_spec.rb +9 -9
  96. data/spec/provider/user_spec.rb +26 -18
  97. data/spec/resource/package_spec.rb +8 -0
  98. data/spec/resource_spec.rb +17 -9
  99. metadata +153 -16
@@ -6,18 +6,20 @@ require 'wright/provider'
6
6
  require 'wright/provider/group'
7
7
 
8
8
  describe Wright::Provider::Group do
9
- before(:each) do
10
- Wright::Provider::Group.send(:public, :uptodate?)
11
- end
12
-
13
- after(:each) do
14
- Wright::Provider::Group.send(:private, :uptodate?)
15
- end
9
+ before(:each) { @resource = OpenStruct.new(name: 'foo') }
10
+ after(:each) { FakeEtc.clear_groups }
16
11
 
17
12
  describe '#uptodate?' do
13
+ before(:each) do
14
+ Wright::Provider::Group.send(:public, :uptodate?)
15
+ end
16
+
17
+ after(:each) do
18
+ Wright::Provider::Group.send(:private, :uptodate?)
19
+ end
20
+
18
21
  it 'should return the correct status' do
19
- resource = OpenStruct.new(name: 'foo')
20
- provider = Wright::Provider::Group.new(resource)
22
+ provider = Wright::Provider::Group.new(@resource)
21
23
 
22
24
  FakeEtc.add_groups('foo' => { gid: 42, mem: %w(user1 user2) })
23
25
  FakeEtc do
@@ -33,9 +35,8 @@ describe Wright::Provider::Group do
33
35
  end
34
36
 
35
37
  it 'should return the correct status when given a specific gid' do
36
- gid = 52
37
- resource = OpenStruct.new(name: 'foo', gid: gid, members: nil)
38
- provider = Wright::Provider::Group.new(resource)
38
+ @resource.gid = 52
39
+ provider = Wright::Provider::Group.new(@resource)
39
40
 
40
41
  FakeEtc.add_groups('foo' => { gid: 42, mem: [] })
41
42
  FakeEtc do
@@ -44,7 +45,7 @@ describe Wright::Provider::Group do
44
45
  end
45
46
 
46
47
  FakeEtc.clear_groups
47
- FakeEtc.add_groups('foo' => { gid: gid, mem: [] })
48
+ FakeEtc.add_groups('foo' => { gid: @resource.gid, mem: [] })
48
49
  FakeEtc do
49
50
  provider.uptodate?(:create).must_equal true
50
51
  provider.uptodate?(:remove).must_equal false
@@ -52,9 +53,8 @@ describe Wright::Provider::Group do
52
53
  end
53
54
 
54
55
  it 'should return the correct status when given a specific member list' do
55
- members = %w(user1 user2)
56
- resource = OpenStruct.new(name: 'foo', gid: nil, members: members)
57
- provider = Wright::Provider::Group.new(resource)
56
+ @resource.members = %w(user1 user2)
57
+ provider = Wright::Provider::Group.new(@resource)
58
58
 
59
59
  FakeEtc.add_groups('foo' => { gid: 42, mem: [] })
60
60
  FakeEtc do
@@ -63,7 +63,7 @@ describe Wright::Provider::Group do
63
63
  end
64
64
 
65
65
  FakeEtc.clear_groups
66
- FakeEtc.add_groups('foo' => { gid: 42, mem: members })
66
+ FakeEtc.add_groups('foo' => { gid: 42, mem: @resource.members })
67
67
  FakeEtc do
68
68
  provider.uptodate?(:create).must_equal true
69
69
  provider.uptodate?(:remove).must_equal false
@@ -71,17 +71,145 @@ describe Wright::Provider::Group do
71
71
  end
72
72
 
73
73
  it 'should raise exceptions for invalid actions' do
74
- resource = OpenStruct.new(name: 'foo')
75
- provider = Wright::Provider::Group.new(resource)
74
+ provider = Wright::Provider::Group.new(@resource)
76
75
  e = -> { provider.uptodate?(:foobarbaz) }.must_raise ArgumentError
77
76
  e.message.must_equal "invalid action 'foobarbaz'"
78
77
  end
79
78
  end
80
79
 
80
+ describe '#create' do
81
+ before(:each) do
82
+ group = @resource.name
83
+ @create_message = "INFO: create group: '#{group}'\n"
84
+ @create_message_dry = "INFO: (would) create group: '#{group}'\n"
85
+ @create_message_debug = "DEBUG: group already created: '#{group}'\n"
86
+ end
87
+
88
+ it 'should set the update status when the group is up-to-date' do
89
+ provider = Wright::Provider::Group.new(@resource)
90
+
91
+ FakeEtc.add_groups('foo' => {})
92
+ FakeEtc do
93
+ lambda do
94
+ reset_logger
95
+ provider.create
96
+ provider.updated?.must_equal false
97
+ end.must_output @create_message_debug
98
+ end
99
+ end
100
+
101
+ it 'should set the update status when the group has to be created' do
102
+ provider = Wright::Provider::Group.new(@resource)
103
+ mock_provider = Minitest::Mock.new
104
+
105
+ mock_provider.expect(:create_group, nil)
106
+ provider.stub :create_group, -> { mock_provider.create_group } do
107
+ FakeEtc do
108
+ lambda do
109
+ reset_logger
110
+ provider.create
111
+ provider.updated?.must_equal true
112
+ end.must_output @create_message
113
+ end
114
+ mock_provider.verify
115
+ end
116
+ end
117
+
118
+ it 'should set the update status when the group has to be updated' do
119
+ @resource.gid = 123
120
+ @resource.members = %w(johndoe janedoe)
121
+ provider = Wright::Provider::Group.new(@resource)
122
+ mock_provider = Minitest::Mock.new
123
+
124
+ mock_provider.expect(:set_gid, nil)
125
+ mock_provider.expect(:set_members, nil)
126
+ provider.stub :set_gid, -> { mock_provider.set_gid } do
127
+ provider.stub :set_members, -> { mock_provider.set_members } do
128
+ FakeEtc.add_groups(@resource.name => { mem: [] })
129
+ FakeEtc do
130
+ lambda do
131
+ reset_logger
132
+ provider.create
133
+ provider.updated?.must_equal true
134
+ end.must_output @create_message
135
+ end
136
+ end
137
+ end
138
+ mock_provider.verify
139
+ end
140
+
141
+ it 'should set the update status in dry-run mode' do
142
+ provider = Wright::Provider::Group.new(@resource)
143
+
144
+ Wright.dry_run do
145
+ FakeEtc do
146
+ lambda do
147
+ reset_logger
148
+ provider.create
149
+ provider.updated?.must_equal true
150
+ end.must_output @create_message_dry
151
+ end
152
+ end
153
+ end
154
+ end
155
+
156
+ describe '#remove' do
157
+ before(:each) do
158
+ group = @resource.name
159
+ @remove_message = "INFO: remove group: '#{group}'\n"
160
+ @remove_message_dry = "INFO: (would) remove group: '#{group}'\n"
161
+ @remove_message_debug = "DEBUG: group already removed: '#{group}'\n"
162
+ end
163
+
164
+ it 'should set the update status when the group is already removed' do
165
+ provider = Wright::Provider::Group.new(@resource)
166
+
167
+ FakeEtc do
168
+ lambda do
169
+ reset_logger
170
+ provider.remove
171
+ provider.updated?.must_equal false
172
+ end.must_output @remove_message_debug
173
+ end
174
+ end
175
+
176
+ it 'should set the update status when the group has to be removed' do
177
+ provider = Wright::Provider::Group.new(@resource)
178
+ mock_provider = Minitest::Mock.new
179
+
180
+ mock_provider.expect(:remove_group, nil)
181
+ provider.stub :remove_group, -> { mock_provider.remove_group } do
182
+ FakeEtc.add_groups(@resource.name => {})
183
+ FakeEtc do
184
+ lambda do
185
+ reset_logger
186
+ provider.remove
187
+ provider.updated?.must_equal true
188
+ end.must_output @remove_message
189
+ end
190
+ end
191
+ mock_provider.verify
192
+ end
193
+
194
+ it 'should set the update status in dry-run mode' do
195
+ provider = Wright::Provider::Group.new(@resource)
196
+
197
+ Wright.dry_run do
198
+ FakeEtc.add_groups(@resource.name => {})
199
+ FakeEtc do
200
+ lambda do
201
+ reset_logger
202
+ provider.remove
203
+ provider.updated?.must_equal true
204
+ end.must_output @remove_message_dry
205
+ end
206
+ end
207
+ end
208
+ end
209
+
81
210
  describe '#add_member' do
82
211
  it 'should raise an exception' do
83
- resource = OpenStruct.new(name: 'foo')
84
- provider = Wright::Provider::Group.new(resource)
212
+ provider = Wright::Provider::Group.new(@resource)
85
213
  lambda do
86
214
  provider.send(:add_member, 'member', 'group')
87
215
  end.must_raise NotImplementedError
@@ -90,8 +218,7 @@ describe Wright::Provider::Group do
90
218
 
91
219
  describe '#remove_member' do
92
220
  it 'should raise an exception' do
93
- resource = OpenStruct.new(name: 'foo')
94
- provider = Wright::Provider::Group.new(resource)
221
+ provider = Wright::Provider::Group.new(@resource)
95
222
  lambda do
96
223
  provider.send(:remove_member, 'member', 'group')
97
224
  end.must_raise NotImplementedError
@@ -100,12 +227,11 @@ describe Wright::Provider::Group do
100
227
 
101
228
  describe '#set_members' do
102
229
  it 'should use add_member and remove_member to update the member list' do
103
- group_name = 'foo'
230
+ group_name = @resource.name
104
231
  current_members = %w(user1 user2 user3)
105
232
  target_members = %w(user3 user4 user5)
106
- resource = OpenStruct.new(name: group_name,
107
- members: target_members)
108
- provider = Wright::Provider::Group.new(resource)
233
+ @resource.members = target_members
234
+ provider = Wright::Provider::Group.new(@resource)
109
235
  Wright::Provider::Group.send(:public, :set_members)
110
236
 
111
237
  mock_provider = Minitest::Mock.new
@@ -129,4 +255,31 @@ describe Wright::Provider::Group do
129
255
  Wright::Provider::Group.send(:private, :set_members)
130
256
  end
131
257
  end
258
+
259
+ describe '#create_group' do
260
+ it 'should raise an exception' do
261
+ provider = Wright::Provider::Group.new(@resource)
262
+ lambda do
263
+ provider.send(:create_group)
264
+ end.must_raise NotImplementedError
265
+ end
266
+ end
267
+
268
+ describe '#remove_group' do
269
+ it 'should raise an exception' do
270
+ provider = Wright::Provider::Group.new(@resource)
271
+ lambda do
272
+ provider.send(:remove_group)
273
+ end.must_raise NotImplementedError
274
+ end
275
+ end
276
+
277
+ describe '#set_gid' do
278
+ it 'should raise an exception' do
279
+ provider = Wright::Provider::Group.new(@resource)
280
+ lambda do
281
+ provider.send(:set_gid)
282
+ end.must_raise NotImplementedError
283
+ end
284
+ end
132
285
  end
@@ -0,0 +1,4 @@
1
+ dmenu:
2
+ Installed: (none)
3
+ Candidate: (none)
4
+ Version table:
@@ -1,6 +1,6 @@
1
1
  htop:
2
2
  Installed: (none)
3
- Candidate: 1.0.1-1
3
+ Candidate: 1.0.3-1
4
4
  Version table:
5
- 1.0.1-1 0
6
- 500 http://debian.inode.at/debian/ wheezy/main amd64 Packages
5
+ 1.0.3-1 0
6
+ 500 http://debian.inode.at/debian/ jessie/main amd64 Packages
@@ -0,0 +1,6 @@
1
+ linux-image-3.2.0-4-amd64:
2
+ Installed: 3.2.65-1+deb7u2
3
+ Candidate: 3.2.65-1+deb7u2
4
+ Version table:
5
+ *** 3.2.65-1+deb7u2 0
6
+ 100 /var/lib/dpkg/status
@@ -0,0 +1,4 @@
1
+ linux-image:
2
+ Installed: (none)
3
+ Candidate: (none)
4
+ Version table:
@@ -0,0 +1,6 @@
1
+ suckless-tools:
2
+ Installed: (none)
3
+ Candidate: 40-1
4
+ Version table:
5
+ 40-1 0
6
+ 500 http://debian.inode.at/debian/ jessie/main amd64 Packages
@@ -0,0 +1,9 @@
1
+ Package: dmenu
2
+ Versions:
3
+
4
+ Reverse Depends:
5
+ xmonad,dmenu
6
+ Dependencies:
7
+ Provides:
8
+ Reverse Provides:
9
+ suckless-tools 40-1
@@ -0,0 +1,20 @@
1
+ Package: htop
2
+ Versions:
3
+ 1.0.3-1 (/var/lib/apt/lists/debian.inode.at_debian_dists_jessie_main_binary-amd64_Packages) (/var/lib/dpkg/status)
4
+ Description Language:
5
+ File: /var/lib/apt/lists/debian.inode.at_debian_dists_jessie_main_binary-amd64_Packages
6
+ MD5: 8eb5aa19b3c92a975dc78e2165f6688d
7
+ Description Language: en
8
+ File: /var/lib/apt/lists/debian.inode.at_debian_dists_jessie_main_i18n_Translation-en
9
+ MD5: 8eb5aa19b3c92a975dc78e2165f6688d
10
+
11
+
12
+ Reverse Depends:
13
+ util-vserver,htop
14
+ lava-dispatcher,htop
15
+ education-common,htop
16
+ Dependencies:
17
+ 1.0.3-1 - libc6 (2 2.15) libncursesw5 (2 5.6+20070908) libtinfo5 (0 (null)) strace (0 (null)) ltrace (0 (null))
18
+ Provides:
19
+ 1.0.3-1 -
20
+ Reverse Provides:
@@ -0,0 +1,11 @@
1
+ Package: linux-image
2
+ Versions:
3
+
4
+ Reverse Depends:
5
+ firmware-crystalhd,linux-image
6
+ kernel-common,linux-image
7
+ dkms,linux-image
8
+ Dependencies:
9
+ Provides:
10
+ Reverse Provides:
11
+ linux-image-3.2.0-4-amd64 3.2.65-1+deb7u2
@@ -0,0 +1 @@
1
+ N: Unable to locate package not-a-real-package
@@ -0,0 +1,26 @@
1
+ Package: suckless-tools
2
+ Versions:
3
+ 40-1 (/var/lib/apt/lists/debian.inode.at_debian_dists_jessie_main_binary-amd64_Packages)
4
+ Description Language:
5
+ File: /var/lib/apt/lists/debian.inode.at_debian_dists_jessie_main_binary-amd64_Packages
6
+ MD5: d19175bb7582a6f06fe2a6daa5910d10
7
+ Description Language: en
8
+ File: /var/lib/apt/lists/debian.inode.at_debian_dists_jessie_main_i18n_Translation-en
9
+ MD5: d19175bb7582a6f06fe2a6daa5910d10
10
+
11
+
12
+ Reverse Depends:
13
+ wmii,suckless-tools
14
+ uzbl,suckless-tools
15
+ surf,suckless-tools
16
+ spectrwm,suckless-tools
17
+ ncurses-term,suckless-tools 39
18
+ ncurses-term,suckless-tools 39
19
+ i3,suckless-tools
20
+ herbstluftwm,suckless-tools
21
+ dwm,suckless-tools
22
+ Dependencies:
23
+ 40-1 - libc6 (2 2.14) libfontconfig1 (2 2.11) libfreetype6 (2 2.2.1) libx11-6 (0 (null)) libxext6 (0 (null)) libxft2 (4 2.1.1) libxinerama1 (0 (null)) libxrender1 (0 (null)) libxss1 (0 (null)) zlib1g (2 1:1.1.4) dwm (0 (null)) stterm (0 (null)) surf (0 (null))
24
+ Provides:
25
+ 40-1 - xssstate wmname tabbed swarp ssid sselp sprop slock lsx lsw dmenu
26
+ Reverse Provides:
@@ -0,0 +1,15 @@
1
+ Reading package lists...
2
+ Building dependency tree...
3
+ Reading state information...
4
+ The following packages were automatically installed and are no longer required:
5
+ cd-discid cdparanoia libmusicbrainz-discid-perl
6
+ libwebservice-musicbrainz-perl vorbis-tools
7
+ Use 'apt-get autoremove' to remove them.
8
+ The following packages will be REMOVED:
9
+ abcde*
10
+ 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
11
+ After this operation, 295 kB disk space will be freed.
12
+ (Reading database ...
13
+ Removing abcde (2.6-2) ...
14
+ Purging configuration files for abcde (2.6-2) ...
15
+ Processing triggers for man-db (2.7.0.2-5) ...
@@ -3,17 +3,21 @@ require_relative '../../spec_helper'
3
3
  require 'wright/provider/package/apt'
4
4
 
5
5
  describe Wright::Provider::Package::Apt do
6
- def apt_cache(pkg_name)
7
- ['apt-cache', 'policy', pkg_name]
6
+ def apt_cache(cmd, pkg_name)
7
+ ['apt-cache', cmd.to_s, pkg_name]
8
8
  end
9
9
 
10
- def apt_get(action, pkg_name, pkg_version = nil)
11
- version = pkg_version.nil? ? '' : "=#{pkg_version}"
12
- ['apt-get', action.to_s, '-qy', pkg_name + version]
10
+ def apt_get(action, pkg_name, args = {})
11
+ version = args[:version].nil? ? '' : "=#{args[:version]}"
12
+ options = args[:options]
13
+ ['apt-get', *options, action.to_s, '-qy', pkg_name + version]
13
14
  end
14
15
 
15
- def package_provider(pkg_name, pkg_version = nil)
16
- pkg_resource = OpenStruct.new(name: pkg_name, version: pkg_version)
16
+ def package_provider(pkg_name, args = {})
17
+ properties = { name: pkg_name,
18
+ version: args[:version],
19
+ options: args[:options] }
20
+ pkg_resource = OpenStruct.new(properties)
17
21
  Wright::Provider::Package::Apt.new(pkg_resource)
18
22
  end
19
23
 
@@ -28,7 +32,7 @@ describe Wright::Provider::Package::Apt do
28
32
  pkg_name = 'abcde'
29
33
  pkg_versions = ['2.5.3-1']
30
34
  pkg_provider = package_provider(pkg_name)
31
- apt_cache_cmd = apt_cache(pkg_name)
35
+ apt_cache_cmd = apt_cache(:policy, pkg_name)
32
36
 
33
37
  @fake_capture3.expect(apt_cache_cmd)
34
38
  @fake_capture3.stub do
@@ -40,9 +44,47 @@ describe Wright::Provider::Package::Apt do
40
44
  pkg_name = 'htop'
41
45
  pkg_versions = []
42
46
  pkg_provider = package_provider(pkg_name)
43
- apt_cache_cmd = apt_cache(pkg_name)
47
+ apt_cache_policy_cmd = apt_cache(:policy, pkg_name)
48
+ apt_cache_showpkg_cmd = apt_cache(:showpkg, pkg_name)
44
49
 
45
- @fake_capture3.expect(apt_cache_cmd)
50
+ @fake_capture3.expect(apt_cache_policy_cmd)
51
+ @fake_capture3.expect(apt_cache_showpkg_cmd)
52
+ @fake_capture3.stub do
53
+ pkg_provider.installed_versions.must_equal pkg_versions
54
+ end
55
+ end
56
+
57
+ it 'should handle virtual packages for which providers are installed' do
58
+ pkg_name = 'linux-image'
59
+ provider_name = 'linux-image-3.2.0-4-amd64'
60
+ pkg_versions = ['virtual']
61
+ pkg_provider = package_provider(pkg_name)
62
+ apt_cache_policy_cmd = apt_cache(:policy, pkg_name)
63
+ apt_cache_showpkg_cmd = apt_cache(:showpkg, pkg_name)
64
+ apt_cache_policy_provider_cmd = apt_cache(:policy, provider_name)
65
+
66
+ @fake_capture3.expect(apt_cache_policy_cmd)
67
+ @fake_capture3.expect(apt_cache_showpkg_cmd)
68
+ @fake_capture3.expect(apt_cache_policy_provider_cmd)
69
+ @fake_capture3.stub do
70
+ pkg_provider.installed_versions.must_equal pkg_versions
71
+ end
72
+ end
73
+
74
+ it 'should handle virtual packages for which no providers are installed' do
75
+ pkg_name = 'dmenu'
76
+ provider_name = 'suckless-tools'
77
+ pkg_versions = []
78
+ pkg_provider = package_provider(pkg_name)
79
+ apt_cache_policy_cmd = apt_cache(:policy, pkg_name)
80
+ apt_cache_showpkg_cmd = apt_cache(:showpkg, pkg_name)
81
+ apt_cache_policy_provider_cmd = apt_cache(:policy, provider_name)
82
+ apt_cache_showpkg_provider_cmd = apt_cache(:showpkg, provider_name)
83
+
84
+ @fake_capture3.expect(apt_cache_policy_cmd)
85
+ @fake_capture3.expect(apt_cache_showpkg_cmd)
86
+ @fake_capture3.expect(apt_cache_policy_provider_cmd)
87
+ @fake_capture3.expect(apt_cache_showpkg_provider_cmd)
46
88
  @fake_capture3.stub do
47
89
  pkg_provider.installed_versions.must_equal pkg_versions
48
90
  end
@@ -52,9 +94,11 @@ describe Wright::Provider::Package::Apt do
52
94
  pkg_name = 'not-a-real-package'
53
95
  pkg_versions = []
54
96
  pkg_provider = package_provider(pkg_name)
55
- apt_cache_cmd = apt_cache(pkg_name)
97
+ apt_cache_policy_cmd = apt_cache(:policy, pkg_name)
98
+ apt_cache_showpkg_cmd = apt_cache(:showpkg, pkg_name)
56
99
 
57
- @fake_capture3.expect(apt_cache_cmd)
100
+ @fake_capture3.expect(apt_cache_policy_cmd)
101
+ @fake_capture3.expect(apt_cache_showpkg_cmd)
58
102
  @fake_capture3.stub do
59
103
  pkg_provider.installed_versions.must_equal pkg_versions
60
104
  end
@@ -76,8 +120,8 @@ describe Wright::Provider::Package::Apt do
76
120
  it 'should install specific package versions' do
77
121
  pkg_name = 'abcde'
78
122
  pkg_version = '2.5.4-1'
79
- pkg_provider = package_provider(pkg_name, pkg_version)
80
- apt_cmd = apt_get(:install, pkg_name, pkg_version)
123
+ pkg_provider = package_provider(pkg_name, version: pkg_version)
124
+ apt_cmd = apt_get(:install, pkg_name, version: pkg_version)
81
125
 
82
126
  @fake_capture3.expect(apt_cmd)
83
127
  @fake_capture3.stub do
@@ -85,6 +129,18 @@ describe Wright::Provider::Package::Apt do
85
129
  end
86
130
  end
87
131
 
132
+ it 'should pass options to the package manager' do
133
+ pkg_name = 'htop'
134
+ pkg_options = ['--no-install-recommends']
135
+ pkg_provider = package_provider(pkg_name, options: pkg_options)
136
+ apt_cmd = apt_get(:install, pkg_name, options: pkg_options)
137
+
138
+ @fake_capture3.expect(apt_cmd, 'apt-get_install_-qy_htop')
139
+ @fake_capture3.stub do
140
+ pkg_provider.send(:install_package)
141
+ end
142
+ end
143
+
88
144
  it 'should raise exceptions for unknown packages' do
89
145
  pkg_name = 'not-a-real-package'
90
146
  pkg_provider = package_provider(pkg_name)
@@ -111,5 +167,17 @@ describe Wright::Provider::Package::Apt do
111
167
  pkg_provider.send(:remove_package)
112
168
  end
113
169
  end
170
+
171
+ it 'should pass options to the package manager' do
172
+ pkg_name = 'abcde'
173
+ pkg_options = ['--purge']
174
+ pkg_provider = package_provider(pkg_name, options: pkg_options)
175
+ apt_cmd = apt_get(:remove, pkg_name, options: pkg_options)
176
+
177
+ @fake_capture3.expect(apt_cmd)
178
+ @fake_capture3.stub do
179
+ pkg_provider.send(:remove_package)
180
+ end
181
+ end
114
182
  end
115
183
  end
@@ -0,0 +1,7 @@
1
+ ==> Downloading http://ftpmirror.gnu.org/units/units-2.02.tar.gz
2
+ Already downloaded: /Library/Caches/Homebrew/gnu-units-2.02.tar.gz
3
+ ==> Patching
4
+ patching file definitions.units
5
+ ==> ./configure --prefix=/usr/local/Cellar/gnu-units/2.02
6
+ ==> make install
7
+ 🍺 /usr/local/Cellar/gnu-units/2.02: 12 files, 624K, built in 11 seconds
@@ -0,0 +1 @@
1
+ Uninstalling lame... (25 files, 2.1M)