chef 12.0.0.alpha.2 → 12.0.0.rc.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (626) hide show
  1. data/CONTRIBUTING.md +9 -0
  2. data/README.md +1 -1
  3. data/Rakefile +12 -0
  4. data/bin/chef-service-manager +1 -1
  5. data/bin/chef-windows-service +35 -0
  6. data/distro/common/html/_sources/ctl_chef_server.txt +307 -10
  7. data/distro/common/html/ctl_chef_client.html +3 -7
  8. data/distro/common/html/ctl_chef_server.html +609 -41
  9. data/distro/common/html/ctl_chef_shell.html +2 -2
  10. data/distro/common/html/ctl_chef_solo.html +1 -1
  11. data/distro/common/html/index.html +13 -13
  12. data/distro/common/html/knife.html +10 -10
  13. data/distro/common/html/knife_bootstrap.html +8 -8
  14. data/distro/common/html/knife_client.html +12 -12
  15. data/distro/common/html/knife_common_options.html +7 -7
  16. data/distro/common/html/knife_configure.html +3 -3
  17. data/distro/common/html/knife_cookbook.html +19 -19
  18. data/distro/common/html/knife_cookbook_site.html +28 -28
  19. data/distro/common/html/knife_data_bag.html +28 -13
  20. data/distro/common/html/knife_delete.html +2 -2
  21. data/distro/common/html/knife_deps.html +3 -3
  22. data/distro/common/html/knife_diff.html +4 -4
  23. data/distro/common/html/knife_download.html +3 -3
  24. data/distro/common/html/knife_edit.html +2 -2
  25. data/distro/common/html/knife_environment.html +14 -14
  26. data/distro/common/html/knife_exec.html +11 -11
  27. data/distro/common/html/knife_index_rebuild.html +2 -2
  28. data/distro/common/html/knife_list.html +3 -3
  29. data/distro/common/html/knife_node.html +23 -23
  30. data/distro/common/html/knife_raw.html +4 -4
  31. data/distro/common/html/knife_recipe_list.html +3 -3
  32. data/distro/common/html/knife_role.html +11 -11
  33. data/distro/common/html/knife_search.html +4 -4
  34. data/distro/common/html/knife_serve.html +3 -3
  35. data/distro/common/html/knife_show.html +3 -3
  36. data/distro/common/html/knife_ssh.html +7 -7
  37. data/distro/common/html/knife_ssl_check.html +7 -7
  38. data/distro/common/html/knife_ssl_fetch.html +9 -9
  39. data/distro/common/html/knife_status.html +3 -3
  40. data/distro/common/html/knife_tag.html +9 -9
  41. data/distro/common/html/knife_upload.html +3 -3
  42. data/distro/common/html/knife_user.html +9 -9
  43. data/distro/common/html/knife_using.html +11 -11
  44. data/distro/common/html/knife_xargs.html +14 -5
  45. data/distro/common/html/search.html +2 -2
  46. data/distro/common/html/searchindex.js +1 -1
  47. data/distro/common/man/man1/chef-shell.1 +2 -2
  48. data/distro/common/man/man1/knife-bootstrap.1 +7 -7
  49. data/distro/common/man/man1/knife-client.1 +10 -10
  50. data/distro/common/man/man1/knife-configure.1 +5 -5
  51. data/distro/common/man/man1/knife-cookbook-site.1 +24 -24
  52. data/distro/common/man/man1/knife-cookbook.1 +12 -12
  53. data/distro/common/man/man1/knife-data-bag.1 +34 -10
  54. data/distro/common/man/man1/knife-delete.1 +5 -5
  55. data/distro/common/man/man1/knife-deps.1 +5 -5
  56. data/distro/common/man/man1/knife-diff.1 +7 -7
  57. data/distro/common/man/man1/knife-download.1 +5 -5
  58. data/distro/common/man/man1/knife-edit.1 +5 -5
  59. data/distro/common/man/man1/knife-environment.1 +11 -11
  60. data/distro/common/man/man1/knife-exec.1 +11 -11
  61. data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
  62. data/distro/common/man/man1/knife-list.1 +5 -5
  63. data/distro/common/man/man1/knife-node.1 +16 -16
  64. data/distro/common/man/man1/knife-raw.1 +6 -6
  65. data/distro/common/man/man1/knife-recipe-list.1 +1 -1
  66. data/distro/common/man/man1/knife-role.1 +7 -7
  67. data/distro/common/man/man1/knife-search.1 +6 -6
  68. data/distro/common/man/man1/knife-serve.1 +6 -6
  69. data/distro/common/man/man1/knife-show.1 +5 -5
  70. data/distro/common/man/man1/knife-ssh.1 +9 -9
  71. data/distro/common/man/man1/knife-ssl-check.1 +7 -7
  72. data/distro/common/man/man1/knife-ssl-fetch.1 +9 -9
  73. data/distro/common/man/man1/knife-status.1 +5 -5
  74. data/distro/common/man/man1/knife-tag.1 +8 -8
  75. data/distro/common/man/man1/knife-upload.1 +5 -5
  76. data/distro/common/man/man1/knife-user.1 +8 -8
  77. data/distro/common/man/man1/knife-xargs.1 +36 -10
  78. data/distro/common/man/man1/knife.1 +14 -14
  79. data/distro/common/man/man8/chef-client.8 +3 -10
  80. data/distro/common/man/man8/chef-solo.8 +1 -1
  81. data/lib/chef/application.rb +313 -241
  82. data/lib/chef/application/apply.rb +10 -8
  83. data/lib/chef/application/client.rb +58 -33
  84. data/lib/chef/application/solo.rb +33 -12
  85. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  86. data/lib/chef/chef_fs/command_line.rb +1 -1
  87. data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +2 -1
  88. data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -1
  89. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +2 -1
  90. data/lib/chef/client.rb +18 -48
  91. data/lib/chef/config.rb +43 -11
  92. data/lib/chef/cookbook/cookbook_version_loader.rb +14 -7
  93. data/lib/chef/cookbook/metadata.rb +81 -38
  94. data/lib/chef/cookbook/syntax_check.rb +18 -52
  95. data/lib/chef/cookbook_loader.rb +1 -1
  96. data/lib/chef/cookbook_version.rb +58 -39
  97. data/lib/chef/data_bag.rb +2 -2
  98. data/lib/chef/deprecation/provider/file.rb +2 -1
  99. data/lib/chef/dsl/data_query.rb +2 -29
  100. data/lib/chef/dsl/recipe.rb +8 -22
  101. data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
  102. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -0
  103. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +1 -1
  104. data/lib/chef/event_loggers/base.rb +62 -0
  105. data/lib/chef/event_loggers/windows_eventlog.rb +104 -0
  106. data/lib/chef/exceptions.rb +18 -1
  107. data/lib/chef/file_cache.rb +3 -2
  108. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +15 -6
  109. data/lib/chef/http.rb +20 -13
  110. data/lib/chef/http/ssl_policies.rb +2 -1
  111. data/lib/chef/json_compat.rb +9 -3
  112. data/lib/chef/knife.rb +2 -1
  113. data/lib/chef/knife/bootstrap.rb +12 -18
  114. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  115. data/lib/chef/knife/bootstrap/chef-aix.erb +2 -2
  116. data/lib/chef/knife/bootstrap/chef-full.erb +2 -2
  117. data/lib/chef/knife/cookbook_create.rb +1 -1
  118. data/lib/chef/knife/cookbook_site_share.rb +43 -8
  119. data/lib/chef/knife/core/bootstrap_context.rb +6 -11
  120. data/lib/chef/knife/core/object_loader.rb +5 -5
  121. data/lib/chef/knife/core/status_presenter.rb +156 -0
  122. data/lib/chef/knife/core/subcommand_loader.rb +6 -5
  123. data/lib/chef/knife/core/ui.rb +4 -4
  124. data/lib/chef/knife/data_bag_create.rb +7 -32
  125. data/lib/chef/knife/data_bag_edit.rb +24 -43
  126. data/lib/chef/knife/data_bag_from_file.rb +6 -31
  127. data/lib/chef/knife/data_bag_secret_options.rb +142 -0
  128. data/lib/chef/knife/data_bag_show.rb +19 -33
  129. data/lib/chef/knife/node_from_file.rb +9 -8
  130. data/lib/chef/knife/ssh.rb +0 -7
  131. data/lib/chef/knife/ssl_check.rb +70 -6
  132. data/lib/chef/knife/status.rb +11 -58
  133. data/lib/chef/mixin/command/unix.rb +2 -2
  134. data/lib/chef/mixin/convert_to_class_name.rb +54 -0
  135. data/lib/chef/mixin/descendants_tracker.rb +82 -0
  136. data/lib/chef/mixin/homebrew_user.rb +68 -0
  137. data/lib/chef/mixin/shell_out.rb +0 -4
  138. data/lib/chef/mixin/windows_architecture_helper.rb +16 -0
  139. data/lib/chef/mixin/windows_env_helper.rb +56 -0
  140. data/lib/chef/node.rb +2 -2
  141. data/lib/chef/node_map.rb +146 -0
  142. data/lib/chef/platform/provider_mapping.rb +11 -39
  143. data/lib/chef/platform/provider_priority_map.rb +80 -0
  144. data/lib/chef/platform/query_helpers.rb +5 -1
  145. data/lib/chef/platform/service_helpers.rb +113 -0
  146. data/lib/chef/provider.rb +24 -0
  147. data/lib/chef/provider/breakpoint.rb +2 -0
  148. data/lib/chef/provider/cookbook_file.rb +2 -0
  149. data/lib/chef/provider/cron.rb +1 -1
  150. data/lib/chef/provider/cron/unix.rb +13 -9
  151. data/lib/chef/provider/deploy.rb +3 -2
  152. data/lib/chef/provider/deploy/revision.rb +4 -2
  153. data/lib/chef/provider/deploy/timestamped.rb +2 -0
  154. data/lib/chef/provider/directory.rb +2 -0
  155. data/lib/chef/provider/dsc_script.rb +179 -0
  156. data/lib/chef/provider/env.rb +25 -10
  157. data/lib/chef/provider/env/windows.rb +9 -16
  158. data/lib/chef/provider/erl_call.rb +2 -0
  159. data/lib/chef/provider/execute.rb +5 -2
  160. data/lib/chef/provider/file.rb +2 -0
  161. data/lib/chef/provider/git.rb +51 -23
  162. data/lib/chef/provider/group/dscl.rb +2 -2
  163. data/lib/chef/provider/group/pw.rb +9 -13
  164. data/lib/chef/provider/http_request.rb +2 -0
  165. data/lib/chef/provider/link.rb +3 -0
  166. data/lib/chef/provider/log.rb +2 -0
  167. data/lib/chef/provider/lwrp_base.rb +11 -9
  168. data/lib/chef/provider/mount/mount.rb +1 -1
  169. data/lib/chef/provider/package/aix.rb +2 -0
  170. data/lib/chef/provider/package/apt.rb +2 -0
  171. data/lib/chef/provider/package/dpkg.rb +2 -0
  172. data/lib/chef/provider/package/easy_install.rb +2 -0
  173. data/lib/chef/provider/package/freebsd/pkg.rb +2 -1
  174. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  175. data/lib/chef/provider/package/freebsd/port.rb +1 -9
  176. data/lib/chef/provider/package/homebrew.rb +127 -0
  177. data/lib/chef/provider/package/ips.rb +2 -0
  178. data/lib/chef/provider/package/macports.rb +3 -0
  179. data/lib/chef/provider/package/pacman.rb +5 -4
  180. data/lib/chef/provider/package/paludis.rb +4 -2
  181. data/lib/chef/provider/package/portage.rb +4 -1
  182. data/lib/chef/provider/package/rpm.rb +2 -0
  183. data/lib/chef/provider/package/rubygems.rb +4 -0
  184. data/lib/chef/provider/package/smartos.rb +2 -0
  185. data/lib/chef/provider/package/solaris.rb +2 -0
  186. data/lib/chef/provider/package/windows.rb +5 -2
  187. data/lib/chef/provider/package/yum.rb +2 -0
  188. data/lib/chef/provider/powershell_script.rb +3 -1
  189. data/lib/chef/provider/remote_directory.rb +25 -10
  190. data/lib/chef/provider/route.rb +2 -0
  191. data/lib/chef/provider/ruby_block.rb +2 -0
  192. data/lib/chef/provider/script.rb +6 -0
  193. data/lib/chef/provider/service/aix.rb +128 -0
  194. data/lib/chef/provider/service/aixinit.rb +117 -0
  195. data/lib/chef/provider/service/arch.rb +6 -0
  196. data/lib/chef/provider/service/debian.rb +35 -29
  197. data/lib/chef/provider/service/freebsd.rb +7 -1
  198. data/lib/chef/provider/service/gentoo.rb +5 -1
  199. data/lib/chef/provider/service/init.rb +2 -0
  200. data/lib/chef/provider/service/insserv.rb +15 -8
  201. data/lib/chef/provider/service/invokercd.rb +6 -0
  202. data/lib/chef/provider/service/macosx.rb +4 -1
  203. data/lib/chef/provider/service/redhat.rb +9 -3
  204. data/lib/chef/provider/service/simple.rb +2 -0
  205. data/lib/chef/provider/service/solaris.rb +2 -0
  206. data/lib/chef/provider/service/systemd.rb +7 -0
  207. data/lib/chef/provider/service/upstart.rb +7 -0
  208. data/lib/chef/provider/service/windows.rb +5 -0
  209. data/lib/chef/provider/subversion.rb +2 -0
  210. data/lib/chef/provider/template.rb +1 -0
  211. data/lib/chef/provider/user/dscl.rb +3 -2
  212. data/lib/chef/provider/whyrun_safe_ruby_block.rb +2 -0
  213. data/lib/chef/provider_resolver.rb +103 -0
  214. data/lib/chef/providers.rb +6 -2
  215. data/lib/chef/recipe.rb +2 -0
  216. data/lib/chef/resource.rb +69 -78
  217. data/lib/chef/resource/apt_package.rb +3 -1
  218. data/lib/chef/resource/bash.rb +1 -0
  219. data/lib/chef/resource/bff_package.rb +0 -1
  220. data/lib/chef/resource/breakpoint.rb +1 -1
  221. data/lib/chef/resource/chef_gem.rb +1 -2
  222. data/lib/chef/resource/conditional.rb +26 -6
  223. data/lib/chef/resource/cookbook_file.rb +2 -3
  224. data/lib/chef/resource/csh.rb +1 -0
  225. data/lib/chef/resource/deploy.rb +0 -1
  226. data/lib/chef/resource/deploy_revision.rb +6 -1
  227. data/lib/chef/resource/directory.rb +1 -2
  228. data/lib/chef/resource/dpkg_package.rb +2 -1
  229. data/lib/chef/resource/dsc_script.rb +125 -0
  230. data/lib/chef/resource/easy_install_package.rb +2 -1
  231. data/lib/chef/resource/erl_call.rb +1 -0
  232. data/lib/chef/resource/execute.rb +26 -9
  233. data/lib/chef/resource/file.rb +1 -3
  234. data/lib/chef/resource/freebsd_package.rb +10 -23
  235. data/lib/chef/resource/gem_package.rb +2 -1
  236. data/lib/chef/resource/git.rb +2 -1
  237. data/lib/chef/resource/homebrew_package.rb +46 -0
  238. data/lib/chef/resource/http_request.rb +1 -0
  239. data/lib/chef/resource/ips_package.rb +3 -1
  240. data/lib/chef/resource/link.rb +1 -2
  241. data/lib/chef/resource/log.rb +4 -0
  242. data/lib/chef/resource/lwrp_base.rb +24 -15
  243. data/lib/chef/resource/macports_package.rb +3 -1
  244. data/lib/chef/resource/pacman_package.rb +2 -1
  245. data/lib/chef/resource/paludis_package.rb +3 -1
  246. data/lib/chef/resource/perl.rb +1 -0
  247. data/lib/chef/resource/powershell_script.rb +0 -2
  248. data/lib/chef/resource/python.rb +1 -1
  249. data/lib/chef/resource/remote_directory.rb +1 -2
  250. data/lib/chef/resource/remote_file.rb +1 -1
  251. data/lib/chef/resource/rpm_package.rb +2 -1
  252. data/lib/chef/resource/ruby.rb +1 -0
  253. data/lib/chef/resource/ruby_block.rb +3 -0
  254. data/lib/chef/resource/script.rb +2 -25
  255. data/lib/chef/resource/service.rb +0 -4
  256. data/lib/chef/resource/smartos_package.rb +3 -4
  257. data/lib/chef/resource/solaris_package.rb +7 -1
  258. data/lib/chef/resource/subversion.rb +0 -1
  259. data/lib/chef/resource/template.rb +2 -3
  260. data/lib/chef/resource/timestamped_deploy.rb +1 -2
  261. data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -1
  262. data/lib/chef/resource/windows_package.rb +3 -4
  263. data/lib/chef/resource/windows_script.rb +3 -0
  264. data/lib/chef/resource/windows_service.rb +2 -2
  265. data/lib/chef/resource/yum_package.rb +3 -1
  266. data/lib/chef/resource_collection.rb +50 -227
  267. data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -0
  268. data/lib/chef/resource_collection/resource_list.rb +89 -0
  269. data/lib/chef/resource_collection/resource_set.rb +170 -0
  270. data/lib/chef/resources.rb +2 -0
  271. data/lib/chef/role.rb +1 -1
  272. data/lib/chef/run_context.rb +5 -1
  273. data/lib/chef/shell/ext.rb +1 -1
  274. data/lib/chef/util/backup.rb +3 -2
  275. data/lib/chef/util/dsc/configuration_generator.rb +115 -0
  276. data/lib/chef/util/dsc/lcm_output_parser.rb +133 -0
  277. data/lib/chef/util/dsc/local_configuration_manager.rb +141 -0
  278. data/lib/chef/util/dsc/resource_info.rb +26 -0
  279. data/lib/chef/util/path_helper.rb +12 -0
  280. data/lib/chef/util/powershell/cmdlet.rb +136 -0
  281. data/lib/chef/util/powershell/cmdlet_result.rb +46 -0
  282. data/lib/chef/version.rb +1 -1
  283. data/lib/chef/win32/api/system.rb +9 -0
  284. data/lib/chef/win32/version.rb +2 -0
  285. data/spec/.DS_Store +0 -0
  286. data/spec/data/.DS_Store +0 -0
  287. data/spec/data/bootstrap/test-hints.erb +1 -1
  288. data/spec/data/bootstrap/test.erb +1 -1
  289. data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
  290. data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
  291. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -0
  292. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -0
  293. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -0
  294. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -0
  295. data/spec/data/lwrp/.DS_Store +0 -0
  296. data/spec/data/lwrp/providers/.DS_Store +0 -0
  297. data/spec/data/lwrp/providers/buck_passer.rb +9 -2
  298. data/spec/data/lwrp/resources/.DS_Store +0 -0
  299. data/spec/data/lwrp/resources/foo.rb +3 -2
  300. data/spec/data/lwrp_override/.DS_Store +0 -0
  301. data/spec/data/lwrp_override/providers/.DS_Store +0 -0
  302. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -10
  303. data/spec/data/lwrp_override/resources/.DS_Store +0 -0
  304. data/spec/data/lwrp_override/resources/foo.rb +4 -3
  305. data/spec/functional/assets/chefinittest +34 -0
  306. data/spec/functional/assets/testchefsubsys +11 -0
  307. data/spec/functional/dsl/reboot_pending_spec.rb +19 -16
  308. data/spec/functional/event_loggers/windows_eventlog_spec.rb +82 -0
  309. data/spec/functional/knife/cookbook_delete_spec.rb +3 -3
  310. data/spec/functional/knife/exec_spec.rb +1 -1
  311. data/spec/functional/resource/aix_service_spec.rb +136 -0
  312. data/spec/functional/resource/aixinit_service_spec.rb +211 -0
  313. data/spec/functional/resource/base.rb +1 -0
  314. data/spec/functional/resource/batch_spec.rb +4 -11
  315. data/spec/functional/resource/cron_spec.rb +7 -1
  316. data/spec/functional/resource/dsc_script_spec.rb +382 -0
  317. data/spec/functional/resource/env_spec.rb +54 -0
  318. data/spec/functional/resource/execute_spec.rb +113 -0
  319. data/spec/functional/resource/file_spec.rb +2 -0
  320. data/spec/functional/resource/group_spec.rb +7 -4
  321. data/spec/functional/resource/powershell_spec.rb +198 -185
  322. data/spec/functional/resource/rpm_spec.rb +5 -4
  323. data/spec/functional/resource/user/dscl_spec.rb +2 -1
  324. data/spec/functional/util/path_helper_spec.rb +37 -0
  325. data/spec/functional/util/powershell/cmdlet_spec.rb +114 -0
  326. data/spec/integration/client/client_spec.rb +1 -1
  327. data/spec/integration/client/ipv6_spec.rb +1 -1
  328. data/spec/integration/knife/chef_fs_data_store_spec.rb +1 -1
  329. data/spec/integration/knife/chef_repo_path_spec.rb +1 -1
  330. data/spec/integration/knife/chef_repository_file_system_spec.rb +1 -1
  331. data/spec/integration/knife/chefignore_spec.rb +1 -1
  332. data/spec/integration/knife/common_options_spec.rb +1 -1
  333. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
  334. data/spec/integration/knife/delete_spec.rb +1 -1
  335. data/spec/integration/knife/deps_spec.rb +1 -1
  336. data/spec/integration/knife/diff_spec.rb +1 -1
  337. data/spec/integration/knife/download_spec.rb +1 -1
  338. data/spec/integration/knife/list_spec.rb +1 -1
  339. data/spec/integration/knife/raw_spec.rb +1 -1
  340. data/spec/integration/knife/redirection_spec.rb +1 -1
  341. data/spec/integration/knife/serve_spec.rb +1 -1
  342. data/spec/integration/knife/show_spec.rb +1 -1
  343. data/spec/integration/knife/upload_spec.rb +4 -3
  344. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  345. data/spec/spec_helper.rb +15 -0
  346. data/spec/support/chef_helpers.rb +1 -0
  347. data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
  348. data/spec/support/lib/chef/resource/zen_follower.rb +1 -7
  349. data/spec/support/platform_helpers.rb +28 -0
  350. data/spec/support/shared/functional/file_resource.rb +6 -0
  351. data/spec/support/shared/functional/windows_script.rb +118 -0
  352. data/spec/support/shared/integration/integration_helper.rb +5 -2
  353. data/spec/support/shared/matchers/exit_with_code.rb +28 -0
  354. data/spec/support/shared/matchers/match_environment_variable.rb +17 -0
  355. data/spec/support/shared/shared_examples.rb +14 -0
  356. data/spec/support/shared/unit/execute_resource.rb +0 -7
  357. data/spec/support/shared/unit/resource/static_provider_resolution.rb +71 -0
  358. data/spec/support/shared/unit/script_resource.rb +1 -1
  359. data/spec/support/shared/unit/windows_script_resource.rb +35 -2
  360. data/spec/tiny_server.rb +1 -2
  361. data/spec/unit/api_client_spec.rb +5 -1
  362. data/spec/unit/application/{apply.rb → apply_spec.rb} +13 -5
  363. data/spec/unit/application/client_spec.rb +106 -13
  364. data/spec/unit/application/solo_spec.rb +25 -1
  365. data/spec/unit/client_spec.rb +1 -26
  366. data/spec/unit/config_fetcher_spec.rb +2 -1
  367. data/spec/unit/config_spec.rb +91 -2
  368. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +8 -0
  369. data/spec/unit/cookbook/metadata_spec.rb +43 -6
  370. data/spec/unit/cookbook/syntax_check_spec.rb +8 -2
  371. data/spec/unit/cookbook_loader_spec.rb +4 -2
  372. data/spec/unit/cookbook_version_spec.rb +83 -2
  373. data/spec/unit/data_bag_item_spec.rb +5 -1
  374. data/spec/unit/data_bag_spec.rb +6 -1
  375. data/spec/unit/dsl/data_query_spec.rb +8 -110
  376. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -0
  377. data/spec/unit/encrypted_data_bag_item_spec.rb +16 -23
  378. data/spec/unit/environment_spec.rb +6 -2
  379. data/spec/unit/exceptions_spec.rb +6 -0
  380. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +16 -15
  381. data/spec/unit/json_compat_spec.rb +12 -2
  382. data/spec/unit/knife/bootstrap_spec.rb +16 -63
  383. data/spec/unit/knife/cookbook_site_share_spec.rb +59 -6
  384. data/spec/unit/knife/core/bootstrap_context_spec.rb +8 -37
  385. data/spec/unit/knife/core/subcommand_loader_spec.rb +1 -1
  386. data/spec/unit/knife/core/ui_spec.rb +28 -0
  387. data/spec/unit/knife/data_bag_create_spec.rb +63 -71
  388. data/spec/unit/knife/data_bag_edit_spec.rb +83 -49
  389. data/spec/unit/knife/data_bag_from_file_spec.rb +104 -126
  390. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -0
  391. data/spec/unit/knife/data_bag_show_spec.rb +74 -72
  392. data/spec/unit/knife/environment_from_file_spec.rb +3 -2
  393. data/spec/unit/knife/ssl_check_spec.rb +46 -1
  394. data/spec/unit/knife/status_spec.rb +1 -2
  395. data/spec/unit/knife_spec.rb +18 -1
  396. data/spec/unit/lwrp_spec.rb +29 -8
  397. data/spec/unit/mixin/homebrew_user_spec.rb +100 -0
  398. data/spec/unit/node_map_spec.rb +155 -0
  399. data/spec/unit/node_spec.rb +11 -0
  400. data/spec/unit/platform/query_helpers_spec.rb +23 -0
  401. data/spec/unit/platform_spec.rb +23 -0
  402. data/spec/unit/provider/breakpoint_spec.rb +9 -9
  403. data/spec/unit/provider/cookbook_file/content_spec.rb +3 -3
  404. data/spec/unit/provider/cookbook_file_spec.rb +1 -1
  405. data/spec/unit/provider/cron/unix_spec.rb +78 -60
  406. data/spec/unit/provider/cron_spec.rb +175 -175
  407. data/spec/unit/provider/deploy/revision_spec.rb +22 -21
  408. data/spec/unit/provider/deploy/timestamped_spec.rb +3 -3
  409. data/spec/unit/provider/deploy_spec.rb +231 -230
  410. data/spec/unit/provider/directory_spec.rb +55 -55
  411. data/spec/unit/provider/dsc_script_spec.rb +174 -0
  412. data/spec/unit/provider/env/windows_spec.rb +70 -34
  413. data/spec/unit/provider/env_spec.rb +95 -49
  414. data/spec/unit/provider/erl_call_spec.rb +9 -9
  415. data/spec/unit/provider/execute_spec.rb +43 -27
  416. data/spec/unit/provider/file/content_spec.rb +9 -9
  417. data/spec/unit/provider/file_spec.rb +1 -1
  418. data/spec/unit/provider/git_spec.rb +221 -159
  419. data/spec/unit/provider/group/dscl_spec.rb +64 -63
  420. data/spec/unit/provider/group/gpasswd_spec.rb +14 -14
  421. data/spec/unit/provider/group/groupadd_spec.rb +33 -33
  422. data/spec/unit/provider/group/groupmod_spec.rb +23 -23
  423. data/spec/unit/provider/group/pw_spec.rb +21 -21
  424. data/spec/unit/provider/group/usermod_spec.rb +20 -20
  425. data/spec/unit/provider/group/windows_spec.rb +15 -15
  426. data/spec/unit/provider/group_spec.rb +76 -76
  427. data/spec/unit/provider/http_request_spec.rb +30 -30
  428. data/spec/unit/provider/ifconfig/aix_spec.rb +20 -20
  429. data/spec/unit/provider/ifconfig/debian_spec.rb +25 -9
  430. data/spec/unit/provider/ifconfig/redhat_spec.rb +13 -13
  431. data/spec/unit/provider/ifconfig_spec.rb +43 -43
  432. data/spec/unit/provider/link_spec.rb +60 -60
  433. data/spec/unit/provider/log_spec.rb +0 -4
  434. data/spec/unit/provider/mdadm_spec.rb +23 -23
  435. data/spec/unit/provider/mount/aix_spec.rb +17 -17
  436. data/spec/unit/provider/mount/mount_spec.rb +115 -119
  437. data/spec/unit/provider/mount/solaris_spec.rb +72 -72
  438. data/spec/unit/provider/mount/windows_spec.rb +24 -24
  439. data/spec/unit/provider/ohai_spec.rb +11 -11
  440. data/spec/unit/provider/package/aix_spec.rb +34 -34
  441. data/spec/unit/provider/package/apt_spec.rb +36 -36
  442. data/spec/unit/provider/package/dpkg_spec.rb +27 -27
  443. data/spec/unit/provider/package/easy_install_spec.rb +16 -16
  444. data/spec/unit/provider/package/freebsd/pkg_spec.rb +53 -53
  445. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +24 -24
  446. data/spec/unit/provider/package/freebsd/port_spec.rb +45 -35
  447. data/spec/unit/provider/package/homebrew_spec.rb +266 -0
  448. data/spec/unit/provider/package/ips_spec.rb +34 -34
  449. data/spec/unit/provider/package/macports_spec.rb +49 -49
  450. data/spec/unit/provider/package/pacman_spec.rb +35 -39
  451. data/spec/unit/provider/package/paludis_spec.rb +20 -20
  452. data/spec/unit/provider/package/portage_spec.rb +38 -38
  453. data/spec/unit/provider/package/rpm_spec.rb +29 -29
  454. data/spec/unit/provider/package/rubygems_spec.rb +284 -270
  455. data/spec/unit/provider/package/smartos_spec.rb +15 -15
  456. data/spec/unit/provider/package/solaris_spec.rb +35 -35
  457. data/spec/unit/provider/package/windows/msi_spec.rb +3 -3
  458. data/spec/unit/provider/package/windows_spec.rb +6 -6
  459. data/spec/unit/provider/package/yum_spec.rb +416 -416
  460. data/spec/unit/provider/package/zypper_spec.rb +47 -47
  461. data/spec/unit/provider/package_spec.rb +107 -107
  462. data/spec/unit/provider/powershell_spec.rb +1 -1
  463. data/spec/unit/provider/registry_key_spec.rb +61 -61
  464. data/spec/unit/provider/remote_directory_spec.rb +36 -36
  465. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +24 -24
  466. data/spec/unit/provider/remote_file/content_spec.rb +45 -45
  467. data/spec/unit/provider/remote_file/fetcher_spec.rb +9 -9
  468. data/spec/unit/provider/remote_file/ftp_spec.rb +32 -32
  469. data/spec/unit/provider/remote_file/http_spec.rb +44 -44
  470. data/spec/unit/provider/remote_file/local_file_spec.rb +9 -9
  471. data/spec/unit/provider/remote_file_spec.rb +3 -3
  472. data/spec/unit/provider/route_spec.rb +63 -63
  473. data/spec/unit/provider/ruby_block_spec.rb +4 -4
  474. data/spec/unit/provider/script_spec.rb +12 -12
  475. data/spec/unit/provider/service/aix_service_spec.rb +181 -0
  476. data/spec/unit/provider/service/aixinit_service_spec.rb +269 -0
  477. data/spec/unit/provider/service/arch_service_spec.rb +48 -48
  478. data/spec/unit/provider/service/debian_service_spec.rb +40 -40
  479. data/spec/unit/provider/service/gentoo_service_spec.rb +28 -28
  480. data/spec/unit/provider/service/init_service_spec.rb +39 -39
  481. data/spec/unit/provider/service/insserv_service_spec.rb +8 -8
  482. data/spec/unit/provider/service/invokercd_service_spec.rb +35 -35
  483. data/spec/unit/provider/service/macosx_spec.rb +49 -49
  484. data/spec/unit/provider/service/redhat_spec.rb +27 -27
  485. data/spec/unit/provider/service/simple_service_spec.rb +28 -28
  486. data/spec/unit/provider/service/solaris_smf_service_spec.rb +43 -46
  487. data/spec/unit/provider/service/systemd_service_spec.rb +63 -63
  488. data/spec/unit/provider/service/upstart_service_spec.rb +78 -78
  489. data/spec/unit/provider/service/windows_spec.rb +92 -92
  490. data/spec/unit/provider/service_spec.rb +40 -40
  491. data/spec/unit/provider/subversion_spec.rb +80 -80
  492. data/spec/unit/provider/template/content_spec.rb +9 -9
  493. data/spec/unit/provider/template_spec.rb +6 -6
  494. data/spec/unit/provider/user/dscl_spec.rb +170 -167
  495. data/spec/unit/provider/user/pw_spec.rb +48 -48
  496. data/spec/unit/provider/user/solaris_spec.rb +8 -8
  497. data/spec/unit/provider/user/useradd_spec.rb +1 -1
  498. data/spec/unit/provider/user/windows_spec.rb +26 -26
  499. data/spec/unit/provider/user_spec.rb +72 -72
  500. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +4 -4
  501. data/spec/unit/provider_resolver_spec.rb +387 -0
  502. data/spec/unit/recipe_spec.rb +33 -12
  503. data/spec/unit/resource/apt_package_spec.rb +10 -13
  504. data/spec/unit/resource/bash_spec.rb +4 -4
  505. data/spec/unit/resource/batch_spec.rb +1 -1
  506. data/spec/unit/resource/breakpoint_spec.rb +11 -7
  507. data/spec/unit/resource/chef_gem_spec.rb +8 -15
  508. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
  509. data/spec/unit/resource/conditional_spec.rb +35 -16
  510. data/spec/unit/resource/cookbook_file_spec.rb +13 -13
  511. data/spec/unit/resource/cron_spec.rb +37 -37
  512. data/spec/unit/resource/csh_spec.rb +4 -4
  513. data/spec/unit/resource/deploy_revision_spec.rb +13 -18
  514. data/spec/unit/resource/deploy_spec.rb +60 -55
  515. data/spec/unit/resource/directory_spec.rb +18 -18
  516. data/spec/unit/resource/dpkg_package_spec.rb +8 -14
  517. data/spec/unit/resource/dsc_script_spec.rb +98 -0
  518. data/spec/unit/resource/easy_install_package_spec.rb +9 -18
  519. data/spec/unit/resource/env_spec.rb +12 -12
  520. data/spec/unit/resource/erl_call_spec.rb +11 -11
  521. data/spec/unit/resource/execute_spec.rb +5 -0
  522. data/spec/unit/resource/file_spec.rb +29 -29
  523. data/spec/unit/resource/freebsd_package_spec.rb +11 -12
  524. data/spec/unit/resource/gem_package_spec.rb +8 -15
  525. data/spec/unit/resource/git_spec.rb +12 -8
  526. data/spec/unit/resource/group_spec.rb +27 -27
  527. data/spec/unit/resource/homebrew_package_spec.rb +50 -0
  528. data/spec/unit/resource/http_request_spec.rb +6 -6
  529. data/spec/unit/resource/ifconfig_spec.rb +8 -8
  530. data/spec/unit/resource/ips_package_spec.rb +10 -13
  531. data/spec/unit/resource/link_spec.rb +25 -25
  532. data/spec/unit/resource/log_spec.rb +9 -9
  533. data/spec/unit/resource/macports_package_spec.rb +8 -13
  534. data/spec/unit/resource/mdadm_spec.rb +18 -18
  535. data/spec/unit/resource/mount_spec.rb +45 -45
  536. data/spec/unit/resource/ohai_spec.rb +7 -7
  537. data/spec/unit/resource/package_spec.rb +12 -12
  538. data/spec/unit/resource/pacman_package_spec.rb +8 -14
  539. data/spec/unit/resource/perl_spec.rb +4 -4
  540. data/spec/unit/resource/portage_package_spec.rb +3 -3
  541. data/spec/unit/resource/powershell_spec.rb +7 -7
  542. data/spec/unit/resource/python_spec.rb +4 -4
  543. data/spec/unit/resource/registry_key_spec.rb +32 -32
  544. data/spec/unit/resource/remote_directory_spec.rb +17 -17
  545. data/spec/unit/resource/remote_file_spec.rb +41 -41
  546. data/spec/unit/resource/route_spec.rb +19 -19
  547. data/spec/unit/resource/rpm_package_spec.rb +9 -13
  548. data/spec/unit/resource/ruby_block_spec.rb +8 -8
  549. data/spec/unit/resource/ruby_spec.rb +4 -4
  550. data/spec/unit/resource/scm_spec.rb +40 -40
  551. data/spec/unit/resource/script_spec.rb +2 -2
  552. data/spec/unit/resource/service_spec.rb +37 -47
  553. data/spec/unit/resource/smartos_package_spec.rb +10 -15
  554. data/spec/unit/resource/solaris_package_spec.rb +13 -28
  555. data/spec/unit/resource/subversion_spec.rb +16 -12
  556. data/spec/unit/resource/template_spec.rb +35 -35
  557. data/spec/unit/resource/timestamped_deploy_spec.rb +30 -4
  558. data/spec/unit/resource/user_spec.rb +23 -23
  559. data/spec/unit/resource/windows_package_spec.rb +17 -10
  560. data/spec/unit/resource/windows_service_spec.rb +9 -6
  561. data/spec/unit/resource/yum_package_spec.rb +16 -21
  562. data/spec/unit/resource_collection/resource_list_spec.rb +137 -0
  563. data/spec/unit/resource_collection/resource_set_spec.rb +199 -0
  564. data/spec/unit/resource_collection_spec.rb +73 -92
  565. data/spec/unit/resource_definition_spec.rb +38 -40
  566. data/spec/unit/resource_reporter_spec.rb +3 -3
  567. data/spec/unit/resource_spec.rb +68 -33
  568. data/spec/unit/rest_spec.rb +83 -76
  569. data/spec/unit/role_spec.rb +5 -0
  570. data/spec/unit/run_list_spec.rb +5 -1
  571. data/spec/unit/runner_spec.rb +245 -238
  572. data/spec/unit/shell/shell_ext_spec.rb +1 -1
  573. data/spec/unit/user_spec.rb +5 -1
  574. data/spec/unit/util/dsc/configuration_generator_spec.rb +171 -0
  575. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +169 -0
  576. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +139 -0
  577. data/spec/unit/util/path_helper_spec.rb +23 -1
  578. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -0
  579. data/spec/unit/workstation_config_loader_spec.rb +1 -1
  580. metadata +257 -191
  581. checksums.yaml +0 -7
  582. data/distro/README +0 -2
  583. data/distro/arch/etc/conf.d/chef-client.conf +0 -5
  584. data/distro/arch/etc/conf.d/chef-expander.conf +0 -8
  585. data/distro/arch/etc/conf.d/chef-server-webui.conf +0 -10
  586. data/distro/arch/etc/conf.d/chef-server.conf +0 -10
  587. data/distro/arch/etc/conf.d/chef-solr.conf +0 -8
  588. data/distro/arch/etc/rc.d/chef-client +0 -90
  589. data/distro/arch/etc/rc.d/chef-expander +0 -78
  590. data/distro/arch/etc/rc.d/chef-server +0 -78
  591. data/distro/arch/etc/rc.d/chef-server-webui +0 -78
  592. data/distro/arch/etc/rc.d/chef-solr +0 -78
  593. data/distro/debian/etc/default/chef-client +0 -4
  594. data/distro/debian/etc/default/chef-expander +0 -8
  595. data/distro/debian/etc/default/chef-server +0 -9
  596. data/distro/debian/etc/default/chef-server-webui +0 -9
  597. data/distro/debian/etc/default/chef-solr +0 -8
  598. data/distro/debian/etc/init.d/chef-client +0 -212
  599. data/distro/debian/etc/init.d/chef-expander +0 -176
  600. data/distro/debian/etc/init.d/chef-server +0 -122
  601. data/distro/debian/etc/init.d/chef-server-webui +0 -123
  602. data/distro/debian/etc/init.d/chef-solr +0 -176
  603. data/distro/debian/etc/init/chef-client.conf +0 -17
  604. data/distro/debian/etc/init/chef-expander.conf +0 -17
  605. data/distro/debian/etc/init/chef-server-webui.conf +0 -17
  606. data/distro/debian/etc/init/chef-server.conf +0 -17
  607. data/distro/debian/etc/init/chef-solr.conf +0 -17
  608. data/distro/redhat/etc/init.d/chef-client +0 -121
  609. data/distro/redhat/etc/init.d/chef-expander +0 -104
  610. data/distro/redhat/etc/init.d/chef-server +0 -112
  611. data/distro/redhat/etc/init.d/chef-server-webui +0 -112
  612. data/distro/redhat/etc/init.d/chef-solr +0 -104
  613. data/distro/redhat/etc/logrotate.d/chef-client +0 -8
  614. data/distro/redhat/etc/logrotate.d/chef-expander +0 -8
  615. data/distro/redhat/etc/logrotate.d/chef-server +0 -8
  616. data/distro/redhat/etc/logrotate.d/chef-server-webui +0 -8
  617. data/distro/redhat/etc/logrotate.d/chef-solr +0 -8
  618. data/distro/redhat/etc/sysconfig/chef-client +0 -15
  619. data/distro/redhat/etc/sysconfig/chef-expander +0 -7
  620. data/distro/redhat/etc/sysconfig/chef-server +0 -14
  621. data/distro/redhat/etc/sysconfig/chef-server-webui +0 -14
  622. data/distro/redhat/etc/sysconfig/chef-solr +0 -8
  623. data/distro/windows/service_manager.rb +0 -20
  624. data/lib/chef/resource_platform_map.rb +0 -151
  625. data/spec/support/shared/matchers.rb +0 -17
  626. data/spec/unit/resource_platform_map_spec.rb +0 -164
@@ -28,7 +28,7 @@ describe Chef::Provider::Package::Paludis do
28
28
  @run_context = Chef::RunContext.new(@node, {}, @events)
29
29
  @new_resource = Chef::Resource::Package.new("net/ntp")
30
30
  @current_resource = Chef::Resource::Package.new("net/ntp")
31
- Chef::Resource::Package.stub(:new).and_return(@current_resource)
31
+ allow(Chef::Resource::Package).to receive(:new).and_return(@current_resource)
32
32
  @provider = Chef::Provider::Package::Paludis.new(@new_resource, @run_context)
33
33
 
34
34
  @stdin = StringIO.new
@@ -47,19 +47,19 @@ PKG_STATUS
47
47
 
48
48
  context "when loading current resource" do
49
49
  it "should create a current resource with the name of the new_resource" do
50
- @provider.should_receive(:shell_out!).and_return(@shell_out)
51
- Chef::Resource::Package.should_receive(:new).and_return(@current_resource)
50
+ expect(@provider).to receive(:shell_out!).and_return(@shell_out)
51
+ expect(Chef::Resource::Package).to receive(:new).and_return(@current_resource)
52
52
  @provider.load_current_resource
53
53
  end
54
54
 
55
55
  it "should set the current resources package name to the new resources package name" do
56
- @provider.should_receive(:shell_out!).and_return(@shell_out)
57
- @current_resource.should_receive(:package_name).with(@new_resource.package_name)
56
+ expect(@provider).to receive(:shell_out!).and_return(@shell_out)
57
+ expect(@current_resource).to receive(:package_name).with(@new_resource.package_name)
58
58
  @provider.load_current_resource
59
59
  end
60
60
 
61
61
  it "should run pkg info with the package name" do
62
- @provider.should_receive(:shell_out!).with("cave -L warning print-ids -M none -m \"*/#{@new_resource.package_name.split('/').last}\" -f \"%c/%p %v %r\n\"").and_return(@shell_out)
62
+ expect(@provider).to receive(:shell_out!).with("cave -L warning print-ids -M none -m \"#{@new_resource.package_name}\" -f \"%c/%p %v %r\n\"").and_return(@shell_out)
63
63
  @provider.load_current_resource
64
64
  end
65
65
 
@@ -72,28 +72,28 @@ user/ntp 0 accounts
72
72
  user/ntp 0 installed-accounts
73
73
  net/ntp 4.2.6_p5-r1 installed
74
74
  INSTALLED
75
- @provider.should_receive(:shell_out!).and_return(@shell_out)
75
+ expect(@provider).to receive(:shell_out!).and_return(@shell_out)
76
76
  @provider.load_current_resource
77
- @current_resource.version.should == "4.2.6_p5-r1"
78
- @provider.candidate_version.should eql("4.2.6_p5-r2")
77
+ expect(@current_resource.version).to eq("4.2.6_p5-r1")
78
+ expect(@provider.candidate_version).to eql("4.2.6_p5-r2")
79
79
  end
80
80
 
81
81
  it "should return the current resource" do
82
- @provider.should_receive(:shell_out!).and_return(@shell_out)
83
- @provider.load_current_resource.should eql(@current_resource)
82
+ expect(@provider).to receive(:shell_out!).and_return(@shell_out)
83
+ expect(@provider.load_current_resource).to eql(@current_resource)
84
84
  end
85
85
  end
86
86
 
87
87
  context "when installing a package" do
88
88
  it "should run pkg install with the package name and version" do
89
- @provider.should_receive(:shell_out!).with("cave -L warning resolve -x \"=net/ntp-4.2.6_p5-r2\"", {:timeout=>@new_resource.timeout})
89
+ expect(@provider).to receive(:shell_out!).with("cave -L warning resolve -x \"=net/ntp-4.2.6_p5-r2\"", {:timeout=>@new_resource.timeout})
90
90
  @provider.install_package("net/ntp", "4.2.6_p5-r2")
91
91
  end
92
92
 
93
93
 
94
94
  it "should run pkg install with the package name and version and options if specified" do
95
- @provider.should_receive(:shell_out!).with("cave -L warning resolve -x --preserve-world \"=net/ntp-4.2.6_p5-r2\"", {:timeout=>@new_resource.timeout})
96
- @new_resource.stub(:options).and_return("--preserve-world")
95
+ expect(@provider).to receive(:shell_out!).with("cave -L warning resolve -x --preserve-world \"=net/ntp-4.2.6_p5-r2\"", {:timeout=>@new_resource.timeout})
96
+ allow(@new_resource).to receive(:options).and_return("--preserve-world")
97
97
  @provider.install_package("net/ntp", "4.2.6_p5-r2")
98
98
  end
99
99
 
@@ -102,7 +102,7 @@ INSTALLED
102
102
  sys-process/lsof 4.87 arbor
103
103
  sys-process/lsof 4.87 x86_64
104
104
  PKG_STATUS
105
- @provider.should_receive(:shell_out!).with("cave -L warning resolve -x \"=sys-process/lsof-4.87\"", {:timeout=>@new_resource.timeout})
105
+ expect(@provider).to receive(:shell_out!).with("cave -L warning resolve -x \"=sys-process/lsof-4.87\"", {:timeout=>@new_resource.timeout})
106
106
  @provider.install_package("sys-process/lsof", "4.87")
107
107
  end
108
108
 
@@ -111,23 +111,23 @@ PKG_STATUS
111
111
  sys-process/lsof 4.87 arbor
112
112
  sys-process/lsof 4.87 x86_64
113
113
  PKG_STATUS
114
- @provider.should_receive(:shell_out!).and_return(@shell_out)
114
+ expect(@provider).to receive(:shell_out!).and_return(@shell_out)
115
115
  @provider.load_current_resource
116
- @current_resource.version.should be_nil
117
- @provider.candidate_version.should eql("4.87")
116
+ expect(@current_resource.version).to be_nil
117
+ expect(@provider.candidate_version).to eql("4.87")
118
118
  end
119
119
  end
120
120
 
121
121
  context "when upgrading a package" do
122
122
  it "should run pkg install with the package name and version" do
123
- @provider.should_receive(:shell_out!).with("cave -L warning resolve -x \"=net/ntp-4.2.6_p5-r2\"", {:timeout=>@new_resource.timeout})
123
+ expect(@provider).to receive(:shell_out!).with("cave -L warning resolve -x \"=net/ntp-4.2.6_p5-r2\"", {:timeout=>@new_resource.timeout})
124
124
  @provider.upgrade_package("net/ntp", "4.2.6_p5-r2")
125
125
  end
126
126
  end
127
127
 
128
128
  context "when uninstalling a package" do
129
129
  it "should run pkg uninstall with the package name and version" do
130
- @provider.should_receive(:shell_out!).with("cave -L warning uninstall -x \"=net/ntp-4.2.6_p5-r2\"")
130
+ expect(@provider).to receive(:shell_out!).with("cave -L warning uninstall -x \"=net/ntp-4.2.6_p5-r2\"")
131
131
  @provider.remove_package("net/ntp", "4.2.6_p5-r2")
132
132
  end
133
133
 
@@ -27,73 +27,73 @@ describe Chef::Provider::Package::Portage, "load_current_resource" do
27
27
  @current_resource = Chef::Resource::Package.new("dev-util/git")
28
28
 
29
29
  @provider = Chef::Provider::Package::Portage.new(@new_resource, @run_context)
30
- Chef::Resource::Package.stub(:new).and_return(@current_resource)
30
+ allow(Chef::Resource::Package).to receive(:new).and_return(@current_resource)
31
31
  end
32
32
 
33
33
  describe "when determining the current state of the package" do
34
34
 
35
35
  it "should create a current resource with the name of new_resource" do
36
- ::Dir.stub(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0"])
37
- Chef::Resource::Package.should_receive(:new).and_return(@current_resource)
36
+ allow(::Dir).to receive(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0"])
37
+ expect(Chef::Resource::Package).to receive(:new).and_return(@current_resource)
38
38
  @provider.load_current_resource
39
39
  end
40
40
 
41
41
  it "should set the current resource package name to the new resource package name" do
42
- ::Dir.stub(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0"])
43
- @current_resource.should_receive(:package_name).with(@new_resource.package_name)
42
+ allow(::Dir).to receive(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0"])
43
+ expect(@current_resource).to receive(:package_name).with(@new_resource.package_name)
44
44
  @provider.load_current_resource
45
45
  end
46
46
 
47
47
  it "should return a current resource with the correct version if the package is found" do
48
- ::Dir.stub(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-foobar-0.9", "/var/db/pkg/dev-util/git-1.0.0"])
48
+ allow(::Dir).to receive(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-foobar-0.9", "/var/db/pkg/dev-util/git-1.0.0"])
49
49
  @provider.load_current_resource
50
- @provider.current_resource.version.should == "1.0.0"
50
+ expect(@provider.current_resource.version).to eq("1.0.0")
51
51
  end
52
52
 
53
53
  it "should return a current resource with the correct version if the package is found with revision" do
54
- ::Dir.stub(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0-r1"])
54
+ allow(::Dir).to receive(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0-r1"])
55
55
  @provider.load_current_resource
56
- @provider.current_resource.version.should == "1.0.0-r1"
56
+ expect(@provider.current_resource.version).to eq("1.0.0-r1")
57
57
  end
58
58
 
59
59
  it "should return a current resource with a nil version if the package is not found" do
60
- ::Dir.stub(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/notgit-1.0.0"])
60
+ allow(::Dir).to receive(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/notgit-1.0.0"])
61
61
  @provider.load_current_resource
62
- @provider.current_resource.version.should be_nil
62
+ expect(@provider.current_resource.version).to be_nil
63
63
  end
64
64
 
65
65
  it "should return a package name match from /var/db/pkg/* if a category isn't specified and a match is found" do
66
- ::Dir.stub(:[]).with("/var/db/pkg/*/git-*").and_return(["/var/db/pkg/dev-util/git-foobar-0.9", "/var/db/pkg/dev-util/git-1.0.0"])
66
+ allow(::Dir).to receive(:[]).with("/var/db/pkg/*/git-*").and_return(["/var/db/pkg/dev-util/git-foobar-0.9", "/var/db/pkg/dev-util/git-1.0.0"])
67
67
  @provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
68
68
  @provider.load_current_resource
69
- @provider.current_resource.version.should == "1.0.0"
69
+ expect(@provider.current_resource.version).to eq("1.0.0")
70
70
  end
71
71
 
72
72
  it "should return a current resource with a nil version if a category isn't specified and a name match from /var/db/pkg/* is not found" do
73
- ::Dir.stub(:[]).with("/var/db/pkg/*/git-*").and_return(["/var/db/pkg/dev-util/notgit-1.0.0"])
73
+ allow(::Dir).to receive(:[]).with("/var/db/pkg/*/git-*").and_return(["/var/db/pkg/dev-util/notgit-1.0.0"])
74
74
  @provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
75
75
  @provider.load_current_resource
76
- @provider.current_resource.version.should be_nil
76
+ expect(@provider.current_resource.version).to be_nil
77
77
  end
78
78
 
79
79
  it "should throw an exception if a category isn't specified and multiple packages are found" do
80
- ::Dir.stub(:[]).with("/var/db/pkg/*/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0", "/var/db/pkg/funny-words/git-1.0.0"])
80
+ allow(::Dir).to receive(:[]).with("/var/db/pkg/*/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0", "/var/db/pkg/funny-words/git-1.0.0"])
81
81
  @provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
82
- lambda { @provider.load_current_resource }.should raise_error(Chef::Exceptions::Package)
82
+ expect { @provider.load_current_resource }.to raise_error(Chef::Exceptions::Package)
83
83
  end
84
84
 
85
85
  it "should return a current resource with a nil version if a category is specified and multiple packages are found" do
86
- ::Dir.stub(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0", "/var/db/pkg/funny-words/git-1.0.0"])
86
+ allow(::Dir).to receive(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0", "/var/db/pkg/funny-words/git-1.0.0"])
87
87
  @provider = Chef::Provider::Package::Portage.new(@new_resource, @run_context)
88
88
  @provider.load_current_resource
89
- @provider.current_resource.version.should be_nil
89
+ expect(@provider.current_resource.version).to be_nil
90
90
  end
91
91
 
92
92
  it "should return a current resource with a nil version if a category is not specified and multiple packages from the same category are found" do
93
- ::Dir.stub(:[]).with("/var/db/pkg/*/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0", "/var/db/pkg/dev-util/git-1.0.1"])
93
+ allow(::Dir).to receive(:[]).with("/var/db/pkg/*/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0", "/var/db/pkg/dev-util/git-1.0.1"])
94
94
  @provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
95
95
  @provider.load_current_resource
96
- @provider.current_resource.version.should be_nil
96
+ expect(@provider.current_resource.version).to be_nil
97
97
  end
98
98
  end
99
99
 
@@ -102,14 +102,14 @@ describe Chef::Provider::Package::Portage, "load_current_resource" do
102
102
  describe Chef::Provider::Package::Portage, "candidate_version" do
103
103
  it "should return the candidate_version variable if already set" do
104
104
  @provider.candidate_version = "1.0.0"
105
- @provider.should_not_receive(:popen4)
105
+ expect(@provider).not_to receive(:popen4)
106
106
  @provider.candidate_version
107
107
  end
108
108
 
109
109
  it "should throw an exception if the exitstatus is not 0" do
110
110
  @status = double("Status", :exitstatus => 1)
111
- @provider.stub(:popen4).and_return(@status)
112
- lambda { @provider.candidate_version }.should raise_error(Chef::Exceptions::Package)
111
+ allow(@provider).to receive(:popen4).and_return(@status)
112
+ expect { @provider.candidate_version }.to raise_error(Chef::Exceptions::Package)
113
113
  end
114
114
 
115
115
  it "should find the candidate_version if a category is specifed and there are no duplicates" do
@@ -144,8 +144,8 @@ Searching...
144
144
  EOF
145
145
 
146
146
  @status = double("Status", :exitstatus => 0)
147
- @provider.should_receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
148
- @provider.candidate_version.should == "1.6.0.6"
147
+ expect(@provider).to receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
148
+ expect(@provider.candidate_version).to eq("1.6.0.6")
149
149
  end
150
150
 
151
151
  it "should find the candidate_version if a category is not specifed and there are no duplicates" do
@@ -181,8 +181,8 @@ EOF
181
181
 
182
182
  @status = double("Status", :exitstatus => 0)
183
183
  @provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
184
- @provider.should_receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
185
- @provider.candidate_version.should == "1.6.0.6"
184
+ expect(@provider).to receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
185
+ expect(@provider.candidate_version).to eq("1.6.0.6")
186
186
  end
187
187
 
188
188
  it "should throw an exception if a category is not specified and there are duplicates" do
@@ -226,8 +226,8 @@ EOF
226
226
 
227
227
  @status = double("Status", :exitstatus => 0)
228
228
  @provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
229
- @provider.should_receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
230
- lambda { @provider.candidate_version }.should raise_error(Chef::Exceptions::Package)
229
+ expect(@provider).to receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
230
+ expect { @provider.candidate_version }.to raise_error(Chef::Exceptions::Package)
231
231
  end
232
232
 
233
233
  it "should find the candidate_version if a category is specifed and there are category duplicates" do
@@ -271,25 +271,25 @@ EOF
271
271
 
272
272
  @status = double("Status", :exitstatus => 0)
273
273
  @provider = Chef::Provider::Package::Portage.new(@new_resource, @run_context)
274
- @provider.should_receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
275
- @provider.candidate_version.should == "1.6.0.6"
274
+ expect(@provider).to receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
275
+ expect(@provider.candidate_version).to eq("1.6.0.6")
276
276
  end
277
277
  end
278
278
 
279
279
  describe Chef::Provider::Package::Portage, "install_package" do
280
280
  it "should install a normally versioned package using portage" do
281
- @provider.should_receive(:shell_out!).with("emerge -g --color n --nospinner --quiet =dev-util/git-1.0.0")
281
+ expect(@provider).to receive(:shell_out!).with("emerge -g --color n --nospinner --quiet =dev-util/git-1.0.0")
282
282
  @provider.install_package("dev-util/git", "1.0.0")
283
283
  end
284
284
 
285
285
  it "should install a tilde versioned package using portage" do
286
- @provider.should_receive(:shell_out!).with("emerge -g --color n --nospinner --quiet ~dev-util/git-1.0.0")
286
+ expect(@provider).to receive(:shell_out!).with("emerge -g --color n --nospinner --quiet ~dev-util/git-1.0.0")
287
287
  @provider.install_package("dev-util/git", "~1.0.0")
288
288
  end
289
289
 
290
290
  it "should add options to the emerge command when specified" do
291
- @provider.should_receive(:shell_out!).with("emerge -g --color n --nospinner --quiet --oneshot =dev-util/git-1.0.0")
292
- @new_resource.stub(:options).and_return("--oneshot")
291
+ expect(@provider).to receive(:shell_out!).with("emerge -g --color n --nospinner --quiet --oneshot =dev-util/git-1.0.0")
292
+ allow(@new_resource).to receive(:options).and_return("--oneshot")
293
293
 
294
294
  @provider.install_package("dev-util/git", "1.0.0")
295
295
  end
@@ -297,12 +297,12 @@ EOF
297
297
 
298
298
  describe Chef::Provider::Package::Portage, "remove_package" do
299
299
  it "should un-emerge the package with no version specified" do
300
- @provider.should_receive(:shell_out!).with("emerge --unmerge --color n --nospinner --quiet dev-util/git")
300
+ expect(@provider).to receive(:shell_out!).with("emerge --unmerge --color n --nospinner --quiet dev-util/git")
301
301
  @provider.remove_package("dev-util/git", nil)
302
302
  end
303
303
 
304
304
  it "should un-emerge the package with a version specified" do
305
- @provider.should_receive(:shell_out!).with("emerge --unmerge --color n --nospinner --quiet =dev-util/git-1.0.0")
305
+ expect(@provider).to receive(:shell_out!).with("emerge --unmerge --color n --nospinner --quiet =dev-util/git-1.0.0")
306
306
  @provider.remove_package("dev-util/git", "1.0.0")
307
307
  end
308
308
  end
@@ -30,55 +30,55 @@ describe Chef::Provider::Package::Rpm do
30
30
  @provider = Chef::Provider::Package::Rpm.new(@new_resource, @run_context)
31
31
 
32
32
  @status = double("Status", :exitstatus => 0)
33
- ::File.stub(:exists?).and_return(true)
33
+ allow(::File).to receive(:exists?).and_return(true)
34
34
  end
35
35
 
36
36
  describe "when determining the current state of the package" do
37
37
 
38
38
  it "should create a current resource with the name of new_resource" do
39
- @provider.stub(:popen4).and_return(@status)
39
+ allow(@provider).to receive(:popen4).and_return(@status)
40
40
  @provider.load_current_resource
41
- @provider.current_resource.name.should == "ImageMagick-c++"
41
+ expect(@provider.current_resource.name).to eq("ImageMagick-c++")
42
42
  end
43
43
 
44
44
  it "should set the current reource package name to the new resource package name" do
45
- @provider.stub(:popen4).and_return(@status)
45
+ allow(@provider).to receive(:popen4).and_return(@status)
46
46
  @provider.load_current_resource
47
- @provider.current_resource.package_name.should == 'ImageMagick-c++'
47
+ expect(@provider.current_resource.package_name).to eq('ImageMagick-c++')
48
48
  end
49
49
 
50
50
  it "should raise an exception if a source is supplied but not found" do
51
- ::File.stub(:exists?).and_return(false)
52
- lambda { @provider.run_action(:any) }.should raise_error(Chef::Exceptions::Package)
51
+ allow(::File).to receive(:exists?).and_return(false)
52
+ expect { @provider.run_action(:any) }.to raise_error(Chef::Exceptions::Package)
53
53
  end
54
54
 
55
55
  it "should get the source package version from rpm if provided" do
56
56
  @stdout = StringIO.new("ImageMagick-c++ 6.5.4.7-7.el6_5")
57
- @provider.should_receive(:popen4).with("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
58
- @provider.should_receive(:popen4).with("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' ImageMagick-c++").and_return(@status)
57
+ expect(@provider).to receive(:popen4).with("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
58
+ expect(@provider).to receive(:popen4).with("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' ImageMagick-c++").and_return(@status)
59
59
  @provider.load_current_resource
60
- @provider.current_resource.package_name.should == "ImageMagick-c++"
61
- @provider.new_resource.version.should == "6.5.4.7-7.el6_5"
60
+ expect(@provider.current_resource.package_name).to eq("ImageMagick-c++")
61
+ expect(@provider.new_resource.version).to eq("6.5.4.7-7.el6_5")
62
62
  end
63
63
 
64
64
  it "should return the current version installed if found by rpm" do
65
65
  @stdout = StringIO.new("ImageMagick-c++ 6.5.4.7-7.el6_5")
66
- @provider.should_receive(:popen4).with("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm").and_return(@status)
67
- @provider.should_receive(:popen4).with("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' ImageMagick-c++").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
66
+ expect(@provider).to receive(:popen4).with("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm").and_return(@status)
67
+ expect(@provider).to receive(:popen4).with("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' ImageMagick-c++").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
68
68
  @provider.load_current_resource
69
- @provider.current_resource.version.should == "6.5.4.7-7.el6_5"
69
+ expect(@provider.current_resource.version).to eq("6.5.4.7-7.el6_5")
70
70
  end
71
71
 
72
72
  it "should raise an exception if the source is not set but we are installing" do
73
73
  new_resource = Chef::Resource::Package.new("ImageMagick-c++")
74
74
  provider = Chef::Provider::Package::Rpm.new(new_resource, @run_context)
75
- lambda { provider.run_action(:any) }.should raise_error(Chef::Exceptions::Package)
75
+ expect { provider.run_action(:any) }.to raise_error(Chef::Exceptions::Package)
76
76
  end
77
77
 
78
78
  it "should raise an exception if rpm fails to run" do
79
79
  status = double("Status", :exitstatus => -1)
80
- @provider.stub(:popen4).and_return(status)
81
- lambda { @provider.run_action(:any) }.should raise_error(Chef::Exceptions::Package)
80
+ allow(@provider).to receive(:popen4).and_return(status)
81
+ expect { @provider.run_action(:any) }.to raise_error(Chef::Exceptions::Package)
82
82
  end
83
83
 
84
84
  it "should not detect the package name as version when not installed" do
@@ -87,10 +87,10 @@ describe Chef::Provider::Package::Rpm do
87
87
  @new_resource = Chef::Resource::Package.new("openssh-askpass")
88
88
  @new_resource.source 'openssh-askpass'
89
89
  @provider = Chef::Provider::Package::Rpm.new(@new_resource, @run_context)
90
- @provider.should_receive(:popen4).with("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' openssh-askpass").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
91
- @provider.should_receive(:popen4).with("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' openssh-askpass").and_return(@status)
90
+ expect(@provider).to receive(:popen4).with("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' openssh-askpass").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
91
+ expect(@provider).to receive(:popen4).with("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' openssh-askpass").and_return(@status)
92
92
  @provider.load_current_resource
93
- @provider.current_resource.version.should be_nil
93
+ expect(@provider.current_resource.version).to be_nil
94
94
  end
95
95
  end
96
96
 
@@ -102,54 +102,54 @@ describe Chef::Provider::Package::Rpm do
102
102
 
103
103
  describe "when installing or upgrading" do
104
104
  it "should run rpm -i with the package source to install" do
105
- @provider.should_receive(:shell_out!).with("rpm -i /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
105
+ expect(@provider).to receive(:shell_out!).with("rpm -i /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
106
106
  @provider.install_package("ImageMagick-c++", "6.5.4.7-7.el6_5")
107
107
  end
108
108
 
109
109
  it "should run rpm -U with the package source to upgrade" do
110
110
  @current_resource.version("21.4-19.el5")
111
- @provider.should_receive(:shell_out!).with("rpm -U /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
111
+ expect(@provider).to receive(:shell_out!).with("rpm -U /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
112
112
  @provider.upgrade_package("ImageMagick-c++", "6.5.4.7-7.el6_5")
113
113
  end
114
114
 
115
115
  it "should install package if missing and set to upgrade" do
116
116
  @current_resource.version("ImageMagick-c++")
117
- @provider.should_receive(:shell_out!).with("rpm -U /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
117
+ expect(@provider).to receive(:shell_out!).with("rpm -U /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
118
118
  @provider.upgrade_package("ImageMagick-c++", "6.5.4.7-7.el6_5")
119
119
  end
120
120
 
121
121
  it "should install from a path when the package is a path and the source is nil" do
122
122
  @new_resource = Chef::Resource::Package.new("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
123
123
  @provider = Chef::Provider::Package::Rpm.new(@new_resource, @run_context)
124
- @new_resource.source.should == "/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm"
124
+ expect(@new_resource.source).to eq("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
125
125
  @current_resource = Chef::Resource::Package.new("ImageMagick-c++")
126
126
  @provider.current_resource = @current_resource
127
- @provider.should_receive(:shell_out!).with("rpm -i /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
127
+ expect(@provider).to receive(:shell_out!).with("rpm -i /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
128
128
  @provider.install_package("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm", "6.5.4.7-7.el6_5")
129
129
  end
130
130
 
131
131
  it "should uprgrade from a path when the package is a path and the source is nil" do
132
132
  @new_resource = Chef::Resource::Package.new("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
133
133
  @provider = Chef::Provider::Package::Rpm.new(@new_resource, @run_context)
134
- @new_resource.source.should == "/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm"
134
+ expect(@new_resource.source).to eq("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
135
135
  @current_resource = Chef::Resource::Package.new("ImageMagick-c++")
136
136
  @current_resource.version("21.4-19.el5")
137
137
  @provider.current_resource = @current_resource
138
- @provider.should_receive(:shell_out!).with("rpm -U /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
138
+ expect(@provider).to receive(:shell_out!).with("rpm -U /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
139
139
  @provider.upgrade_package("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm", "6.5.4.7-7.el6_5")
140
140
  end
141
141
 
142
142
  it "installs with custom options specified in the resource" do
143
143
  @provider.candidate_version = '11'
144
144
  @new_resource.options("--dbpath /var/lib/rpm")
145
- @provider.should_receive(:shell_out!).with("rpm --dbpath /var/lib/rpm -i /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
145
+ expect(@provider).to receive(:shell_out!).with("rpm --dbpath /var/lib/rpm -i /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
146
146
  @provider.install_package(@new_resource.name, @provider.candidate_version)
147
147
  end
148
148
  end
149
149
 
150
150
  describe "when removing the package" do
151
151
  it "should run rpm -e to remove the package" do
152
- @provider.should_receive(:shell_out!).with("rpm -e ImageMagick-c++-6.5.4.7-7.el6_5")
152
+ expect(@provider).to receive(:shell_out!).with("rpm -e ImageMagick-c++-6.5.4.7-7.el6_5")
153
153
  @provider.remove_package("ImageMagick-c++", "6.5.4.7-7.el6_5")
154
154
  end
155
155
  end
@@ -39,23 +39,23 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
39
39
  end
40
40
 
41
41
  it "determines the gem paths from the in memory rubygems" do
42
- @gem_env.gem_paths.should == Gem.path
42
+ expect(@gem_env.gem_paths).to eq(Gem.path)
43
43
  end
44
44
 
45
45
  it "determines the installed versions of gems from Gem.source_index" do
46
46
  gems = [gemspec('rspec-core', Gem::Version.new('1.2.9')), gemspec('rspec-core', Gem::Version.new('1.3.0'))]
47
47
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.8.0')
48
- Gem::Specification.should_receive(:find_all_by_name).with('rspec-core', Gem::Dependency.new('rspec-core').requirement).and_return(gems)
48
+ expect(Gem::Specification).to receive(:find_all_by_name).with('rspec-core', Gem::Dependency.new('rspec-core').requirement).and_return(gems)
49
49
  else
50
- Gem.source_index.should_receive(:search).with(Gem::Dependency.new('rspec-core', nil)).and_return(gems)
50
+ expect(Gem.source_index).to receive(:search).with(Gem::Dependency.new('rspec-core', nil)).and_return(gems)
51
51
  end
52
- @gem_env.installed_versions(Gem::Dependency.new('rspec-core', nil)).should == gems
52
+ expect(@gem_env.installed_versions(Gem::Dependency.new('rspec-core', nil))).to eq(gems)
53
53
  end
54
54
 
55
55
  it "determines the installed versions of gems from the source index (part2: the unmockening)" do
56
56
  expected = ['rspec-core', Gem::Version.new(RSpec::Core::Version::STRING)]
57
57
  actual = @gem_env.installed_versions(Gem::Dependency.new('rspec-core', nil)).map { |spec| [spec.name, spec.version] }
58
- actual.should include(expected)
58
+ expect(actual).to include(expected)
59
59
  end
60
60
 
61
61
  it "yields to a block with an alternate source list set" do
@@ -68,8 +68,8 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
68
68
  end
69
69
  rescue RuntimeError
70
70
  end
71
- sources_in_block.should == %w{http://gems.example.org}
72
- Gem.sources.should == normal_sources
71
+ expect(sources_in_block).to eq(%w{http://gems.example.org})
72
+ expect(Gem.sources).to eq(normal_sources)
73
73
  end
74
74
 
75
75
  it "it doesnt alter the gem sources if none are set" do
@@ -82,29 +82,29 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
82
82
  end
83
83
  rescue RuntimeError
84
84
  end
85
- sources_in_block.should == normal_sources
86
- Gem.sources.should == normal_sources
85
+ expect(sources_in_block).to eq(normal_sources)
86
+ expect(Gem.sources).to eq(normal_sources)
87
87
  end
88
88
 
89
89
  it "finds a matching gem candidate version" do
90
90
  dep = Gem::Dependency.new('rspec', '>= 0')
91
91
  dep_installer = Gem::DependencyInstaller.new
92
- @gem_env.stub(:dependency_installer).and_return(dep_installer)
92
+ allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
93
93
  latest = [[gemspec("rspec", Gem::Version.new("1.3.0")), "http://rubygems.org/"]]
94
- dep_installer.should_receive(:find_gems_with_sources).with(dep).and_return(latest)
95
- @gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0')).should == Gem::Version.new('1.3.0')
94
+ expect(dep_installer).to receive(:find_gems_with_sources).with(dep).and_return(latest)
95
+ expect(@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0'))).to eq(Gem::Version.new('1.3.0'))
96
96
  end
97
97
 
98
98
  it "finds a matching gem candidate version on rubygems 2.0.0+" do
99
99
  dep = Gem::Dependency.new('rspec', '>= 0')
100
100
  dep_installer = Gem::DependencyInstaller.new
101
- @gem_env.stub(:dependency_installer).and_return(dep_installer)
101
+ allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
102
102
  best_gem = double("best gem match", :spec => gemspec("rspec", Gem::Version.new("1.3.0")), :source => "https://rubygems.org")
103
103
  available_set = double("Gem::AvailableSet test double")
104
- available_set.should_receive(:pick_best!)
105
- available_set.should_receive(:set).and_return([best_gem])
106
- dep_installer.should_receive(:find_gems_with_sources).with(dep).and_return(available_set)
107
- @gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0')).should == Gem::Version.new('1.3.0')
104
+ expect(available_set).to receive(:pick_best!)
105
+ expect(available_set).to receive(:set).and_return([best_gem])
106
+ expect(dep_installer).to receive(:find_gems_with_sources).with(dep).and_return(available_set)
107
+ expect(@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0'))).to eq(Gem::Version.new('1.3.0'))
108
108
  end
109
109
 
110
110
  context "when rubygems was upgraded from 1.8->2.0" do
@@ -121,7 +121,7 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
121
121
  Gem.const_set(:Format, Object.new)
122
122
  @remove_gem_format = true
123
123
  end
124
- Gem::Package.stub(:respond_to?).with(:open).and_return(false)
124
+ allow(Gem::Package).to receive(:respond_to?).with(:open).and_return(false)
125
125
  end
126
126
 
127
127
  after do
@@ -132,8 +132,8 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
132
132
 
133
133
  it "finds a matching gem candidate version on rubygems 2.0+ with some rubygems 1.8 code loaded" do
134
134
  package = double("Gem::Package", :spec => "a gemspec from package")
135
- Gem::Package.should_receive(:new).with("/path/to/package.gem").and_return(package)
136
- @gem_env.spec_from_file("/path/to/package.gem").should == "a gemspec from package"
135
+ expect(Gem::Package).to receive(:new).with("/path/to/package.gem").and_return(package)
136
+ expect(@gem_env.spec_from_file("/path/to/package.gem")).to eq("a gemspec from package")
137
137
  end
138
138
 
139
139
  end
@@ -142,54 +142,54 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
142
142
  dep = Gem::Dependency.new('rspec', '>= 0')
143
143
  latest = []
144
144
  dep_installer = Gem::DependencyInstaller.new
145
- @gem_env.stub(:dependency_installer).and_return(dep_installer)
146
- dep_installer.should_receive(:find_gems_with_sources).with(dep).and_return(latest)
147
- @gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0')).should be_nil
145
+ allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
146
+ expect(dep_installer).to receive(:find_gems_with_sources).with(dep).and_return(latest)
147
+ expect(@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0'))).to be_nil
148
148
  end
149
149
 
150
150
  it "finds a matching candidate version from a .gem file when the path to the gem is supplied" do
151
151
  location = CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem'
152
- @gem_env.candidate_version_from_file(Gem::Dependency.new('chef-integration-test', '>= 0'), location).should == Gem::Version.new('0.1.0')
153
- @gem_env.candidate_version_from_file(Gem::Dependency.new('chef-integration-test', '>= 0.2.0'), location).should be_nil
152
+ expect(@gem_env.candidate_version_from_file(Gem::Dependency.new('chef-integration-test', '>= 0'), location)).to eq(Gem::Version.new('0.1.0'))
153
+ expect(@gem_env.candidate_version_from_file(Gem::Dependency.new('chef-integration-test', '>= 0.2.0'), location)).to be_nil
154
154
  end
155
155
 
156
156
  it "finds a matching gem from a specific gemserver when explicit sources are given" do
157
157
  dep = Gem::Dependency.new('rspec', '>= 0')
158
158
  latest = [[gemspec("rspec", Gem::Version.new("1.3.0")), "http://rubygems.org/"]]
159
159
 
160
- @gem_env.should_receive(:with_gem_sources).with('http://gems.example.com').and_yield
160
+ expect(@gem_env).to receive(:with_gem_sources).with('http://gems.example.com').and_yield
161
161
  dep_installer = Gem::DependencyInstaller.new
162
- @gem_env.stub(:dependency_installer).and_return(dep_installer)
163
- dep_installer.should_receive(:find_gems_with_sources).with(dep).and_return(latest)
164
- @gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>=0'), 'http://gems.example.com').should == Gem::Version.new('1.3.0')
162
+ allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
163
+ expect(dep_installer).to receive(:find_gems_with_sources).with(dep).and_return(latest)
164
+ expect(@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>=0'), 'http://gems.example.com')).to eq(Gem::Version.new('1.3.0'))
165
165
  end
166
166
 
167
167
  it "installs a gem with a hash of options for the dependency installer" do
168
168
  dep_installer = Gem::DependencyInstaller.new
169
- @gem_env.should_receive(:dependency_installer).with(:install_dir => '/foo/bar').and_return(dep_installer)
170
- @gem_env.should_receive(:with_gem_sources).with('http://gems.example.com').and_yield
171
- dep_installer.should_receive(:install).with(Gem::Dependency.new('rspec', '>= 0'))
169
+ expect(@gem_env).to receive(:dependency_installer).with(:install_dir => '/foo/bar').and_return(dep_installer)
170
+ expect(@gem_env).to receive(:with_gem_sources).with('http://gems.example.com').and_yield
171
+ expect(dep_installer).to receive(:install).with(Gem::Dependency.new('rspec', '>= 0'))
172
172
  @gem_env.install(Gem::Dependency.new('rspec', '>= 0'), :install_dir => '/foo/bar', :sources => ['http://gems.example.com'])
173
173
  end
174
174
 
175
175
  it "builds an uninstaller for a gem with options set to avoid requiring user input" do
176
176
  # default options for uninstaller should be:
177
177
  # :ignore => true, :executables => true
178
- Gem::Uninstaller.should_receive(:new).with('rspec', :ignore => true, :executables => true)
178
+ expect(Gem::Uninstaller).to receive(:new).with('rspec', :ignore => true, :executables => true)
179
179
  @gem_env.uninstaller('rspec')
180
180
  end
181
181
 
182
182
  it "uninstalls all versions of a gem" do
183
183
  uninstaller = double('gem uninstaller')
184
- uninstaller.should_receive(:uninstall)
185
- @gem_env.should_receive(:uninstaller).with('rspec', :all => true).and_return(uninstaller)
184
+ expect(uninstaller).to receive(:uninstall)
185
+ expect(@gem_env).to receive(:uninstaller).with('rspec', :all => true).and_return(uninstaller)
186
186
  @gem_env.uninstall('rspec')
187
187
  end
188
188
 
189
189
  it "uninstalls a specific version of a gem" do
190
190
  uninstaller = double('gem uninstaller')
191
- uninstaller.should_receive(:uninstall)
192
- @gem_env.should_receive(:uninstaller).with('rspec', :version => '1.2.3').and_return(uninstaller)
191
+ expect(uninstaller).to receive(:uninstall)
192
+ expect(@gem_env).to receive(:uninstaller).with('rspec', :version => '1.2.3').and_return(uninstaller)
193
193
  @gem_env.uninstall('rspec', '1.2.3')
194
194
  end
195
195
 
@@ -207,35 +207,35 @@ describe Chef::Provider::Package::Rubygems::AlternateGemEnvironment do
207
207
  it "determines the gem paths from shelling out to gem env" do
208
208
  gem_env_output = ['/path/to/gems', '/another/path/to/gems'].join(File::PATH_SEPARATOR)
209
209
  shell_out_result = OpenStruct.new(:stdout => gem_env_output)
210
- @gem_env.should_receive(:shell_out!).with('/usr/weird/bin/gem env gempath').and_return(shell_out_result)
211
- @gem_env.gem_paths.should == ['/path/to/gems', '/another/path/to/gems']
210
+ expect(@gem_env).to receive(:shell_out!).with('/usr/weird/bin/gem env gempath').and_return(shell_out_result)
211
+ expect(@gem_env.gem_paths).to eq(['/path/to/gems', '/another/path/to/gems'])
212
212
  end
213
213
 
214
214
  it "caches the gempaths by gem_binary" do
215
215
  gem_env_output = ['/path/to/gems', '/another/path/to/gems'].join(File::PATH_SEPARATOR)
216
216
  shell_out_result = OpenStruct.new(:stdout => gem_env_output)
217
- @gem_env.should_receive(:shell_out!).with('/usr/weird/bin/gem env gempath').and_return(shell_out_result)
217
+ expect(@gem_env).to receive(:shell_out!).with('/usr/weird/bin/gem env gempath').and_return(shell_out_result)
218
218
  expected = ['/path/to/gems', '/another/path/to/gems']
219
- @gem_env.gem_paths.should == ['/path/to/gems', '/another/path/to/gems']
220
- Chef::Provider::Package::Rubygems::AlternateGemEnvironment.gempath_cache['/usr/weird/bin/gem'].should == expected
219
+ expect(@gem_env.gem_paths).to eq(['/path/to/gems', '/another/path/to/gems'])
220
+ expect(Chef::Provider::Package::Rubygems::AlternateGemEnvironment.gempath_cache['/usr/weird/bin/gem']).to eq(expected)
221
221
  end
222
222
 
223
223
  it "uses the cached result for gem paths when available" do
224
224
  gem_env_output = ['/path/to/gems', '/another/path/to/gems'].join(File::PATH_SEPARATOR)
225
225
  shell_out_result = OpenStruct.new(:stdout => gem_env_output)
226
- @gem_env.should_not_receive(:shell_out!)
226
+ expect(@gem_env).not_to receive(:shell_out!)
227
227
  expected = ['/path/to/gems', '/another/path/to/gems']
228
228
  Chef::Provider::Package::Rubygems::AlternateGemEnvironment.gempath_cache['/usr/weird/bin/gem']= expected
229
- @gem_env.gem_paths.should == ['/path/to/gems', '/another/path/to/gems']
229
+ expect(@gem_env.gem_paths).to eq(['/path/to/gems', '/another/path/to/gems'])
230
230
  end
231
231
 
232
232
  it "builds the gems source index from the gem paths" do
233
- @gem_env.stub(:gem_paths).and_return(['/path/to/gems', '/another/path/to/gems'])
233
+ allow(@gem_env).to receive(:gem_paths).and_return(['/path/to/gems', '/another/path/to/gems'])
234
234
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.8.0')
235
235
  @gem_env.gem_specification
236
- Gem::Specification.dirs.should == [ '/path/to/gems/specifications', '/another/path/to/gems/specifications' ]
236
+ expect(Gem::Specification.dirs).to eq([ '/path/to/gems/specifications', '/another/path/to/gems/specifications' ])
237
237
  else
238
- Gem::SourceIndex.should_receive(:from_gems_in).with('/path/to/gems/specifications', '/another/path/to/gems/specifications')
238
+ expect(Gem::SourceIndex).to receive(:from_gems_in).with('/path/to/gems/specifications', '/another/path/to/gems/specifications')
239
239
  @gem_env.gem_source_index
240
240
  end
241
241
  end
@@ -244,17 +244,17 @@ describe Chef::Provider::Package::Rubygems::AlternateGemEnvironment do
244
244
  gems = [gemspec('rspec', Gem::Version.new('1.2.9')), gemspec('rspec', Gem::Version.new('1.3.0'))]
245
245
  rspec_dep = Gem::Dependency.new('rspec', nil)
246
246
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.8.0')
247
- @gem_env.stub(:gem_specification).and_return(Gem::Specification)
248
- @gem_env.gem_specification.should_receive(:find_all_by_name).with(rspec_dep.name, rspec_dep.requirement).and_return(gems)
247
+ allow(@gem_env).to receive(:gem_specification).and_return(Gem::Specification)
248
+ expect(@gem_env.gem_specification).to receive(:find_all_by_name).with(rspec_dep.name, rspec_dep.requirement).and_return(gems)
249
249
  else
250
- @gem_env.stub(:gem_source_index).and_return(Gem.source_index)
251
- @gem_env.gem_source_index.should_receive(:search).with(rspec_dep).and_return(gems)
250
+ allow(@gem_env).to receive(:gem_source_index).and_return(Gem.source_index)
251
+ expect(@gem_env.gem_source_index).to receive(:search).with(rspec_dep).and_return(gems)
252
252
  end
253
- @gem_env.installed_versions(Gem::Dependency.new('rspec', nil)).should == gems
253
+ expect(@gem_env.installed_versions(Gem::Dependency.new('rspec', nil))).to eq(gems)
254
254
  end
255
255
 
256
256
  it "determines the installed versions of gems from the source index (part2: the unmockening)" do
257
- $stdout.stub(:write)
257
+ allow($stdout).to receive(:write)
258
258
  path_to_gem = if windows?
259
259
  `where gem`.split[1]
260
260
  else
@@ -264,7 +264,7 @@ describe Chef::Provider::Package::Rubygems::AlternateGemEnvironment do
264
264
  gem_env = Chef::Provider::Package::Rubygems::AlternateGemEnvironment.new(path_to_gem)
265
265
  expected = ['rspec-core', Gem::Version.new(RSpec::Core::Version::STRING)]
266
266
  actual = gem_env.installed_versions(Gem::Dependency.new('rspec-core', nil)).map { |s| [s.name, s.version] }
267
- actual.should include(expected)
267
+ expect(actual).to include(expected)
268
268
  end
269
269
 
270
270
  it "detects when the target gem environment is the jruby platform" do
@@ -295,18 +295,18 @@ RubyGems Environment:
295
295
  - http://rubygems.org/
296
296
  - http://gems.github.com/
297
297
  JRUBY_GEM_ENV
298
- @gem_env.should_receive(:shell_out!).with('/usr/weird/bin/gem env').and_return(double('jruby_gem_env', :stdout => gem_env_out))
298
+ expect(@gem_env).to receive(:shell_out!).with('/usr/weird/bin/gem env').and_return(double('jruby_gem_env', :stdout => gem_env_out))
299
299
  expected = ['ruby', Gem::Platform.new('universal-java-1.6')]
300
- @gem_env.gem_platforms.should == expected
300
+ expect(@gem_env.gem_platforms).to eq(expected)
301
301
  # it should also cache the result
302
- Chef::Provider::Package::Rubygems::AlternateGemEnvironment.platform_cache['/usr/weird/bin/gem'].should == expected
302
+ expect(Chef::Provider::Package::Rubygems::AlternateGemEnvironment.platform_cache['/usr/weird/bin/gem']).to eq(expected)
303
303
  end
304
304
 
305
305
  it "uses the cached result for gem platforms if available" do
306
- @gem_env.should_not_receive(:shell_out!)
306
+ expect(@gem_env).not_to receive(:shell_out!)
307
307
  expected = ['ruby', Gem::Platform.new('universal-java-1.6')]
308
308
  Chef::Provider::Package::Rubygems::AlternateGemEnvironment.platform_cache['/usr/weird/bin/gem']= expected
309
- @gem_env.gem_platforms.should == expected
309
+ expect(@gem_env.gem_platforms).to eq(expected)
310
310
  end
311
311
 
312
312
  it "uses the current gem platforms when the target env is not jruby" do
@@ -337,9 +337,9 @@ RubyGems Environment:
337
337
  - http://rubygems.org/
338
338
  - http://gems.github.com/
339
339
  RBX_GEM_ENV
340
- @gem_env.should_receive(:shell_out!).with('/usr/weird/bin/gem env').and_return(double('rbx_gem_env', :stdout => gem_env_out))
341
- @gem_env.gem_platforms.should == Gem.platforms
342
- Chef::Provider::Package::Rubygems::AlternateGemEnvironment.platform_cache['/usr/weird/bin/gem'].should == Gem.platforms
340
+ expect(@gem_env).to receive(:shell_out!).with('/usr/weird/bin/gem env').and_return(double('rbx_gem_env', :stdout => gem_env_out))
341
+ expect(@gem_env.gem_platforms).to eq(Gem.platforms)
342
+ expect(Chef::Provider::Package::Rubygems::AlternateGemEnvironment.platform_cache['/usr/weird/bin/gem']).to eq(Gem.platforms)
343
343
  end
344
344
 
345
345
  it "yields to a block while masquerading as a different gems platform" do
@@ -352,288 +352,302 @@ RBX_GEM_ENV
352
352
  end
353
353
  rescue RuntimeError
354
354
  end
355
- platforms_in_block.should == ['ruby', Gem::Platform.new('sparc64-java-1.7')]
356
- Gem.platforms.should == original_platforms
355
+ expect(platforms_in_block).to eq(['ruby', Gem::Platform.new('sparc64-java-1.7')])
356
+ expect(Gem.platforms).to eq(original_platforms)
357
357
  end
358
358
 
359
359
  end
360
360
 
361
361
  describe Chef::Provider::Package::Rubygems do
362
+ let(:target_version) { nil }
363
+
362
364
  before(:each) do
363
365
  @node = Chef::Node.new
364
366
  @new_resource = Chef::Resource::GemPackage.new("rspec-core")
365
- @spec_version = @new_resource.version RSpec::Core::Version::STRING
367
+ @spec_version = @new_resource.version(target_version)
366
368
  @events = Chef::EventDispatch::Dispatcher.new
367
369
  @run_context = Chef::RunContext.new(@node, {}, @events)
368
370
 
369
371
  # We choose detect omnibus via RbConfig::CONFIG['bindir'] in Chef::Provider::Package::Rubygems.new
370
- RbConfig::CONFIG.stub(:[]).with('bindir').and_return("/usr/bin/ruby")
372
+ allow(RbConfig::CONFIG).to receive(:[]).with('bindir').and_return("/usr/bin/ruby")
371
373
  @provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
372
374
  end
373
375
 
374
- it "triggers a gem configuration load so a later one will not stomp its config values" do
375
- # ugly, is there a better way?
376
- Gem.instance_variable_get(:@configuration).should_not be_nil
377
- end
376
+ describe "when new_resource version is nil" do
377
+ let(:target_version) { nil }
378
378
 
379
- it "uses the CurrentGemEnvironment implementation when no gem_binary_path is provided" do
380
- @provider.gem_env.should be_a_kind_of(Chef::Provider::Package::Rubygems::CurrentGemEnvironment)
379
+ it "target_version_already_installed? should return false so that we can search for candidates" do
380
+ @provider.load_current_resource
381
+ expect(@provider.target_version_already_installed?).to be_false
382
+ end
381
383
  end
382
384
 
383
- it "uses the AlternateGemEnvironment implementation when a gem_binary_path is provided" do
384
- @new_resource.gem_binary('/usr/weird/bin/gem')
385
- provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
386
- provider.gem_env.gem_binary_location.should == '/usr/weird/bin/gem'
387
- end
385
+ describe "when new_resource version is current rspec version" do
386
+ let(:target_version) { RSpec::Core::Version::STRING }
388
387
 
389
- it "searches for a gem binary when running on Omnibus on Unix" do
390
- platform_mock :unix do
391
- RbConfig::CONFIG.stub(:[]).with('bindir').and_return("/opt/chef/embedded/bin")
392
- ENV.stub(:[]).with('PATH').and_return("/usr/bin:/usr/sbin:/opt/chef/embedded/bin")
393
- File.stub(:exists?).with('/usr/bin/gem').and_return(false)
394
- File.stub(:exists?).with('/usr/sbin/gem').and_return(true)
395
- File.stub(:exists?).with('/opt/chef/embedded/bin/gem').and_return(true) # should not get here
396
- provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
397
- provider.gem_env.gem_binary_location.should == '/usr/sbin/gem'
388
+ it "triggers a gem configuration load so a later one will not stomp its config values" do
389
+ # ugly, is there a better way?
390
+ expect(Gem.instance_variable_get(:@configuration)).not_to be_nil
398
391
  end
399
- end
400
392
 
401
- it "searches for a gem binary when running on Omnibus on Windows" do
402
- platform_mock :windows do
403
- RbConfig::CONFIG.stub(:[]).with('bindir').and_return("d:/opscode/chef/embedded/bin")
404
- ENV.stub(:[]).with('PATH').and_return('C:\windows\system32;C:\windows;C:\Ruby186\bin;d:\opscode\chef\embedded\bin')
405
- File.stub(:exists?).with('C:\\windows\\system32\\gem').and_return(false)
406
- File.stub(:exists?).with('C:\\windows\\gem').and_return(false)
407
- File.stub(:exists?).with('C:\\Ruby186\\bin\\gem').and_return(true)
408
- File.stub(:exists?).with('d:\\opscode\\chef\\bin\\gem').and_return(false) # should not get here
409
- File.stub(:exists?).with('d:\\opscode\\chef\\embedded\\bin\\gem').and_return(false) # should not get here
410
- provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
411
- provider.gem_env.gem_binary_location.should == 'C:\Ruby186\bin\gem'
393
+ it "uses the CurrentGemEnvironment implementation when no gem_binary_path is provided" do
394
+ expect(@provider.gem_env).to be_a_kind_of(Chef::Provider::Package::Rubygems::CurrentGemEnvironment)
412
395
  end
413
- end
414
396
 
415
- it "smites you when you try to use a hash of install options with an explicit gem binary" do
416
- @new_resource.gem_binary('/foo/bar')
417
- @new_resource.options(:fail => :burger)
418
- lambda {Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)}.should raise_error(ArgumentError)
419
- end
420
-
421
- it "converts the new resource into a gem dependency" do
422
- @provider.gem_dependency.should == Gem::Dependency.new('rspec-core', @spec_version)
423
- @new_resource.version('~> 1.2.0')
424
- @provider.gem_dependency.should == Gem::Dependency.new('rspec-core', '~> 1.2.0')
425
- end
397
+ it "uses the AlternateGemEnvironment implementation when a gem_binary_path is provided" do
398
+ @new_resource.gem_binary('/usr/weird/bin/gem')
399
+ provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
400
+ expect(provider.gem_env.gem_binary_location).to eq('/usr/weird/bin/gem')
401
+ end
426
402
 
427
- describe "when determining the currently installed version" do
403
+ it "searches for a gem binary when running on Omnibus on Unix" do
404
+ platform_mock :unix do
405
+ allow(RbConfig::CONFIG).to receive(:[]).with('bindir').and_return("/opt/chef/embedded/bin")
406
+ allow(ENV).to receive(:[]).with('PATH').and_return("/usr/bin:/usr/sbin:/opt/chef/embedded/bin")
407
+ allow(File).to receive(:exists?).with('/usr/bin/gem').and_return(false)
408
+ allow(File).to receive(:exists?).with('/usr/sbin/gem').and_return(true)
409
+ allow(File).to receive(:exists?).with('/opt/chef/embedded/bin/gem').and_return(true) # should not get here
410
+ provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
411
+ expect(provider.gem_env.gem_binary_location).to eq('/usr/sbin/gem')
412
+ end
413
+ end
428
414
 
429
- it "sets the current version to the version specified by the new resource if that version is installed" do
430
- @provider.load_current_resource
431
- @provider.current_resource.version.should == @spec_version
415
+ it "searches for a gem binary when running on Omnibus on Windows" do
416
+ platform_mock :windows do
417
+ allow(RbConfig::CONFIG).to receive(:[]).with('bindir').and_return("d:/opscode/chef/embedded/bin")
418
+ allow(ENV).to receive(:[]).with('PATH').and_return('C:\windows\system32;C:\windows;C:\Ruby186\bin;d:\opscode\chef\embedded\bin')
419
+ allow(File).to receive(:exists?).with('C:\\windows\\system32\\gem').and_return(false)
420
+ allow(File).to receive(:exists?).with('C:\\windows\\gem').and_return(false)
421
+ allow(File).to receive(:exists?).with('C:\\Ruby186\\bin\\gem').and_return(true)
422
+ allow(File).to receive(:exists?).with('d:\\opscode\\chef\\bin\\gem').and_return(false) # should not get here
423
+ allow(File).to receive(:exists?).with('d:\\opscode\\chef\\embedded\\bin\\gem').and_return(false) # should not get here
424
+ provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
425
+ expect(provider.gem_env.gem_binary_location).to eq('C:\Ruby186\bin\gem')
426
+ end
432
427
  end
433
428
 
434
- it "sets the current version to the highest installed version if the requested version is not installed" do
435
- @new_resource.version('9000.0.2')
436
- @provider.load_current_resource
437
- @provider.current_resource.version.should == @spec_version
429
+ it "smites you when you try to use a hash of install options with an explicit gem binary" do
430
+ @new_resource.gem_binary('/foo/bar')
431
+ @new_resource.options(:fail => :burger)
432
+ expect {Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)}.to raise_error(ArgumentError)
438
433
  end
439
434
 
440
- it "leaves the current version at nil if the package is not installed" do
441
- @new_resource.package_name("no-such-gem-should-exist-with-this-name")
442
- @provider.load_current_resource
443
- @provider.current_resource.version.should be_nil
435
+ it "converts the new resource into a gem dependency" do
436
+ expect(@provider.gem_dependency).to eq(Gem::Dependency.new('rspec-core', @spec_version))
437
+ @new_resource.version('~> 1.2.0')
438
+ expect(@provider.gem_dependency).to eq(Gem::Dependency.new('rspec-core', '~> 1.2.0'))
444
439
  end
445
440
 
446
- end
441
+ describe "when determining the currently installed version" do
447
442
 
448
- describe "when determining the candidate version to install" do
443
+ it "sets the current version to the version specified by the new resource if that version is installed" do
444
+ @provider.load_current_resource
445
+ expect(@provider.current_resource.version).to eq(@spec_version)
446
+ end
449
447
 
450
- it "does not query for available versions when the current version is the target version" do
451
- @provider.current_resource = @new_resource.dup
452
- @provider.candidate_version.should be_nil
453
- end
448
+ it "sets the current version to the highest installed version if the requested version is not installed" do
449
+ @new_resource.version('9000.0.2')
450
+ @provider.load_current_resource
451
+ expect(@provider.current_resource.version).to eq(@spec_version)
452
+ end
454
453
 
455
- it "determines the candidate version by querying the remote gem servers" do
456
- @new_resource.source('http://mygems.example.com')
457
- version = Gem::Version.new(@spec_version)
458
- @provider.gem_env.should_receive(:candidate_version_from_remote).
459
- with(Gem::Dependency.new('rspec-core', @spec_version), "http://mygems.example.com").
460
- and_return(version)
461
- @provider.candidate_version.should == @spec_version
462
- end
454
+ it "leaves the current version at nil if the package is not installed" do
455
+ @new_resource.package_name("no-such-gem-should-exist-with-this-name")
456
+ @provider.load_current_resource
457
+ expect(@provider.current_resource.version).to be_nil
458
+ end
463
459
 
464
- it "parses the gem's specification if the requested source is a file" do
465
- @new_resource.package_name('chef-integration-test')
466
- @new_resource.version('>= 0')
467
- @new_resource.source(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
468
- @provider.candidate_version.should == '0.1.0'
469
460
  end
470
461
 
471
- end
472
-
473
- describe "when installing a gem" do
474
- before do
475
- @current_resource = Chef::Resource::GemPackage.new('rspec-core')
476
- @provider.current_resource = @current_resource
477
- @gem_dep = Gem::Dependency.new('rspec-core', @spec_version)
478
- @provider.stub(:load_current_resource)
479
- end
462
+ describe "when determining the candidate version to install" do
480
463
 
481
- describe "in the current gem environment" do
482
- it "installs the gem via the gems api when no explicit options are used" do
483
- @provider.gem_env.should_receive(:install).with(@gem_dep, :sources => nil)
484
- @provider.action_install.should be_true
464
+ it "does not query for available versions when the current version is the target version" do
465
+ @provider.current_resource = @new_resource.dup
466
+ expect(@provider.candidate_version).to be_nil
485
467
  end
486
468
 
487
- it "installs the gem via the gems api when a remote source is provided" do
488
- @new_resource.source('http://gems.example.org')
489
- sources = ['http://gems.example.org']
490
- @provider.gem_env.should_receive(:install).with(@gem_dep, :sources => sources)
491
- @provider.action_install.should be_true
469
+ it "determines the candidate version by querying the remote gem servers" do
470
+ @new_resource.source('http://mygems.example.com')
471
+ version = Gem::Version.new(@spec_version)
472
+ expect(@provider.gem_env).to receive(:candidate_version_from_remote).
473
+ with(Gem::Dependency.new('rspec-core', @spec_version), "http://mygems.example.com").
474
+ and_return(version)
475
+ expect(@provider.candidate_version).to eq(@spec_version)
492
476
  end
493
477
 
494
- it "installs the gem from file via the gems api when no explicit options are used" do
478
+ it "parses the gem's specification if the requested source is a file" do
479
+ @new_resource.package_name('chef-integration-test')
480
+ @new_resource.version('>= 0')
495
481
  @new_resource.source(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
496
- @provider.gem_env.should_receive(:install).with(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
497
- @provider.action_install.should be_true
482
+ expect(@provider.candidate_version).to eq('0.1.0')
498
483
  end
499
484
 
500
- it "installs the gem from file via the gems api when the package is a path and the source is nil" do
501
- @new_resource = Chef::Resource::GemPackage.new(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
502
- @provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
485
+ end
486
+
487
+ describe "when installing a gem" do
488
+ before do
489
+ @current_resource = Chef::Resource::GemPackage.new('rspec-core')
503
490
  @provider.current_resource = @current_resource
504
- @new_resource.source.should == CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem'
505
- @provider.gem_env.should_receive(:install).with(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
506
- @provider.action_install.should be_true
491
+ @gem_dep = Gem::Dependency.new('rspec-core', @spec_version)
492
+ allow(@provider).to receive(:load_current_resource)
507
493
  end
508
494
 
509
- # this catches 'gem_package "foo"' when "./foo" is a file in the cwd, and instead of installing './foo' it fetches the remote gem
510
- it "installs the gem via the gems api, when the package has no file separator characters in it, but a matching file exists in cwd" do
511
- ::File.stub(:exists?).and_return(true)
512
- @new_resource.package_name('rspec-core')
513
- @provider.gem_env.should_receive(:install).with(@gem_dep, :sources => nil)
514
- @provider.action_install.should be_true
515
- end
495
+ describe "in the current gem environment" do
496
+ it "installs the gem via the gems api when no explicit options are used" do
497
+ expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => nil)
498
+ expect(@provider.action_install).to be_true
499
+ end
516
500
 
517
- it "installs the gem by shelling out when options are provided as a String" do
518
- @new_resource.options('-i /alt/install/location')
519
- expected ="gem install rspec-core -q --no-rdoc --no-ri -v \"#{@spec_version}\" -i /alt/install/location"
520
- @provider.should_receive(:shell_out!).with(expected, :env => nil)
521
- @provider.action_install.should be_true
522
- end
501
+ it "installs the gem via the gems api when a remote source is provided" do
502
+ @new_resource.source('http://gems.example.org')
503
+ sources = ['http://gems.example.org']
504
+ expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => sources)
505
+ expect(@provider.action_install).to be_true
506
+ end
523
507
 
524
- it "installs the gem via the gems api when options are given as a Hash" do
525
- @new_resource.options(:install_dir => '/alt/install/location')
526
- @provider.gem_env.should_receive(:install).with(@gem_dep, :sources => nil, :install_dir => '/alt/install/location')
527
- @provider.action_install.should be_true
528
- end
508
+ it "installs the gem from file via the gems api when no explicit options are used" do
509
+ @new_resource.source(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
510
+ expect(@provider.gem_env).to receive(:install).with(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
511
+ expect(@provider.action_install).to be_true
512
+ end
529
513
 
530
- describe "at a specific version" do
531
- before do
532
- @gem_dep = Gem::Dependency.new('rspec-core', @spec_version)
514
+ it "installs the gem from file via the gems api when the package is a path and the source is nil" do
515
+ @new_resource = Chef::Resource::GemPackage.new(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
516
+ @provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
517
+ @provider.current_resource = @current_resource
518
+ expect(@new_resource.source).to eq(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
519
+ expect(@provider.gem_env).to receive(:install).with(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
520
+ expect(@provider.action_install).to be_true
533
521
  end
534
522
 
535
- it "installs the gem via the gems api" do
536
- @provider.gem_env.should_receive(:install).with(@gem_dep, :sources => nil)
537
- @provider.action_install.should be_true
523
+ # this catches 'gem_package "foo"' when "./foo" is a file in the cwd, and instead of installing './foo' it fetches the remote gem
524
+ it "installs the gem via the gems api, when the package has no file separator characters in it, but a matching file exists in cwd" do
525
+ allow(::File).to receive(:exists?).and_return(true)
526
+ @new_resource.package_name('rspec-core')
527
+ expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => nil)
528
+ expect(@provider.action_install).to be_true
529
+ end
530
+
531
+ it "installs the gem by shelling out when options are provided as a String" do
532
+ @new_resource.options('-i /alt/install/location')
533
+ expected ="gem install rspec-core -q --no-rdoc --no-ri -v \"#{@spec_version}\" -i /alt/install/location"
534
+ expect(@provider).to receive(:shell_out!).with(expected, :env => nil)
535
+ expect(@provider.action_install).to be_true
538
536
  end
539
- end
540
- describe "at version specified with comparison operator" do
541
- it "skips install if current version satisifies requested version" do
542
- @current_resource.stub(:version).and_return("2.3.3")
543
- @new_resource.stub(:version).and_return(">=2.3.0")
544
537
 
545
- @provider.gem_env.should_not_receive(:install)
546
- @provider.action_install
538
+ it "installs the gem via the gems api when options are given as a Hash" do
539
+ @new_resource.options(:install_dir => '/alt/install/location')
540
+ expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => nil, :install_dir => '/alt/install/location')
541
+ expect(@provider.action_install).to be_true
547
542
  end
548
543
 
549
- it "allows user to specify gem version with fuzzy operator" do
550
- @current_resource.stub(:version).and_return("2.3.3")
551
- @new_resource.stub(:version).and_return("~>2.3.0")
544
+ describe "at a specific version" do
545
+ before do
546
+ @gem_dep = Gem::Dependency.new('rspec-core', @spec_version)
547
+ end
552
548
 
553
- @provider.gem_env.should_not_receive(:install)
554
- @provider.action_install
549
+ it "installs the gem via the gems api" do
550
+ expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => nil)
551
+ expect(@provider.action_install).to be_true
552
+ end
553
+ end
554
+ describe "at version specified with comparison operator" do
555
+ it "skips install if current version satisifies requested version" do
556
+ allow(@current_resource).to receive(:version).and_return("2.3.3")
557
+ allow(@new_resource).to receive(:version).and_return(">=2.3.0")
558
+
559
+ expect(@provider.gem_env).not_to receive(:install)
560
+ @provider.action_install
561
+ end
562
+
563
+ it "allows user to specify gem version with fuzzy operator" do
564
+ allow(@current_resource).to receive(:version).and_return("2.3.3")
565
+ allow(@new_resource).to receive(:version).and_return("~>2.3.0")
566
+
567
+ expect(@provider.gem_env).not_to receive(:install)
568
+ @provider.action_install
569
+ end
555
570
  end
556
571
  end
557
- end
558
572
 
559
- describe "in an alternate gem environment" do
560
- it "installs the gem by shelling out to gem install" do
561
- @new_resource.gem_binary('/usr/weird/bin/gem')
562
- @provider.should_receive(:shell_out!).with("/usr/weird/bin/gem install rspec-core -q --no-rdoc --no-ri -v \"#{@spec_version}\"", :env=>nil)
563
- @provider.action_install.should be_true
564
- end
573
+ describe "in an alternate gem environment" do
574
+ it "installs the gem by shelling out to gem install" do
575
+ @new_resource.gem_binary('/usr/weird/bin/gem')
576
+ expect(@provider).to receive(:shell_out!).with("/usr/weird/bin/gem install rspec-core -q --no-rdoc --no-ri -v \"#{@spec_version}\"", :env=>nil)
577
+ expect(@provider.action_install).to be_true
578
+ end
565
579
 
566
- it "installs the gem from file by shelling out to gem install" do
567
- @new_resource.gem_binary('/usr/weird/bin/gem')
568
- @new_resource.source(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
569
- @new_resource.version('>= 0')
570
- @provider.should_receive(:shell_out!).with("/usr/weird/bin/gem install #{CHEF_SPEC_DATA}/gems/chef-integration-test-0.1.0.gem -q --no-rdoc --no-ri -v \">= 0\"", :env=>nil)
571
- @provider.action_install.should be_true
572
- end
580
+ it "installs the gem from file by shelling out to gem install" do
581
+ @new_resource.gem_binary('/usr/weird/bin/gem')
582
+ @new_resource.source(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
583
+ @new_resource.version('>= 0')
584
+ expect(@provider).to receive(:shell_out!).with("/usr/weird/bin/gem install #{CHEF_SPEC_DATA}/gems/chef-integration-test-0.1.0.gem -q --no-rdoc --no-ri -v \">= 0\"", :env=>nil)
585
+ expect(@provider.action_install).to be_true
586
+ end
573
587
 
574
- it "installs the gem from file by shelling out to gem install when the package is a path and the source is nil" do
575
- @new_resource = Chef::Resource::GemPackage.new(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
576
- @provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
577
- @provider.current_resource = @current_resource
578
- @new_resource.gem_binary('/usr/weird/bin/gem')
579
- @new_resource.version('>= 0')
580
- @new_resource.source.should == CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem'
581
- @provider.should_receive(:shell_out!).with("/usr/weird/bin/gem install #{CHEF_SPEC_DATA}/gems/chef-integration-test-0.1.0.gem -q --no-rdoc --no-ri -v \">= 0\"", :env=>nil)
582
- @provider.action_install.should be_true
588
+ it "installs the gem from file by shelling out to gem install when the package is a path and the source is nil" do
589
+ @new_resource = Chef::Resource::GemPackage.new(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
590
+ @provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
591
+ @provider.current_resource = @current_resource
592
+ @new_resource.gem_binary('/usr/weird/bin/gem')
593
+ @new_resource.version('>= 0')
594
+ expect(@new_resource.source).to eq(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
595
+ expect(@provider).to receive(:shell_out!).with("/usr/weird/bin/gem install #{CHEF_SPEC_DATA}/gems/chef-integration-test-0.1.0.gem -q --no-rdoc --no-ri -v \">= 0\"", :env=>nil)
596
+ expect(@provider.action_install).to be_true
597
+ end
583
598
  end
584
- end
585
-
586
- end
587
599
 
588
- describe "when uninstalling a gem" do
589
- before do
590
- @new_resource = Chef::Resource::GemPackage.new("rspec")
591
- @current_resource = @new_resource.dup
592
- @current_resource.version('1.2.3')
593
- @provider.new_resource = @new_resource
594
- @provider.current_resource = @current_resource
595
600
  end
596
601
 
597
- describe "in the current gem environment" do
598
- it "uninstalls via the api when no explicit options are used" do
599
- # pre-reqs for action_remove to actually remove the package:
600
- @provider.new_resource.version.should be_nil
601
- @provider.current_resource.version.should_not be_nil
602
- # the behavior we're testing:
603
- @provider.gem_env.should_receive(:uninstall).with('rspec', nil)
604
- @provider.action_remove
602
+ describe "when uninstalling a gem" do
603
+ before do
604
+ @new_resource = Chef::Resource::GemPackage.new("rspec")
605
+ @current_resource = @new_resource.dup
606
+ @current_resource.version('1.2.3')
607
+ @provider.new_resource = @new_resource
608
+ @provider.current_resource = @current_resource
605
609
  end
606
610
 
607
- it "uninstalls via the api when options are given as a Hash" do
608
- # pre-reqs for action_remove to actually remove the package:
609
- @provider.new_resource.version.should be_nil
610
- @provider.current_resource.version.should_not be_nil
611
- # the behavior we're testing:
612
- @new_resource.options(:install_dir => '/alt/install/location')
613
- @provider.gem_env.should_receive(:uninstall).with('rspec', nil, :install_dir => '/alt/install/location')
614
- @provider.action_remove
615
- end
611
+ describe "in the current gem environment" do
612
+ it "uninstalls via the api when no explicit options are used" do
613
+ # pre-reqs for action_remove to actually remove the package:
614
+ expect(@provider.new_resource.version).to be_nil
615
+ expect(@provider.current_resource.version).not_to be_nil
616
+ # the behavior we're testing:
617
+ expect(@provider.gem_env).to receive(:uninstall).with('rspec', nil)
618
+ @provider.action_remove
619
+ end
616
620
 
617
- it "uninstalls via the gem command when options are given as a String" do
618
- @new_resource.options('-i /alt/install/location')
619
- @provider.should_receive(:shell_out!).with("gem uninstall rspec -q -x -I -a -i /alt/install/location", :env=>nil)
620
- @provider.action_remove
621
- end
621
+ it "uninstalls via the api when options are given as a Hash" do
622
+ # pre-reqs for action_remove to actually remove the package:
623
+ expect(@provider.new_resource.version).to be_nil
624
+ expect(@provider.current_resource.version).not_to be_nil
625
+ # the behavior we're testing:
626
+ @new_resource.options(:install_dir => '/alt/install/location')
627
+ expect(@provider.gem_env).to receive(:uninstall).with('rspec', nil, :install_dir => '/alt/install/location')
628
+ @provider.action_remove
629
+ end
630
+
631
+ it "uninstalls via the gem command when options are given as a String" do
632
+ @new_resource.options('-i /alt/install/location')
633
+ expect(@provider).to receive(:shell_out!).with("gem uninstall rspec -q -x -I -a -i /alt/install/location", :env=>nil)
634
+ @provider.action_remove
635
+ end
622
636
 
623
- it "uninstalls a specific version of a gem when a version is provided" do
624
- @new_resource.version('1.2.3')
625
- @provider.gem_env.should_receive(:uninstall).with('rspec', '1.2.3')
626
- @provider.action_remove
637
+ it "uninstalls a specific version of a gem when a version is provided" do
638
+ @new_resource.version('1.2.3')
639
+ expect(@provider.gem_env).to receive(:uninstall).with('rspec', '1.2.3')
640
+ @provider.action_remove
641
+ end
627
642
  end
628
- end
629
643
 
630
- describe "in an alternate gem environment" do
631
- it "uninstalls via the gem command" do
632
- @new_resource.gem_binary('/usr/weird/bin/gem')
633
- @provider.should_receive(:shell_out!).with("/usr/weird/bin/gem uninstall rspec -q -x -I -a", :env=>nil)
634
- @provider.action_remove
644
+ describe "in an alternate gem environment" do
645
+ it "uninstalls via the gem command" do
646
+ @new_resource.gem_binary('/usr/weird/bin/gem')
647
+ expect(@provider).to receive(:shell_out!).with("/usr/weird/bin/gem uninstall rspec -q -x -I -a", :env=>nil)
648
+ @provider.action_remove
649
+ end
635
650
  end
636
651
  end
637
652
  end
638
653
  end
639
-