chefspec 7.2.1 → 7.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (342) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +21 -13
  3. data/CHANGELOG.md +4 -0
  4. data/Gemfile +14 -10
  5. data/README.md +322 -1025
  6. data/README_old.md +1291 -0
  7. data/Rakefile +8 -3
  8. data/examples/apt_package/spec/install_spec.rb +1 -1
  9. data/examples/apt_package/spec/lock_spec.rb +1 -1
  10. data/examples/apt_package/spec/purge_spec.rb +1 -1
  11. data/examples/apt_package/spec/reconfig_spec.rb +1 -1
  12. data/examples/apt_package/spec/remove_spec.rb +1 -1
  13. data/examples/apt_package/spec/unlock_spec.rb +1 -1
  14. data/examples/apt_package/spec/upgrade_spec.rb +1 -1
  15. data/examples/apt_repository/spec/add_spec.rb +1 -1
  16. data/examples/apt_repository/spec/remove_spec.rb +1 -1
  17. data/examples/apt_update/spec/periodic_spec.rb +1 -1
  18. data/examples/apt_update/spec/update_spec.rb +1 -1
  19. data/examples/attributes/spec/default_spec.rb +1 -1
  20. data/examples/batch/spec/run_spec.rb +1 -1
  21. data/examples/cab_package/spec/install_spec.rb +1 -1
  22. data/examples/cab_package/spec/remove_spec.rb +1 -1
  23. data/examples/cached/spec/default_spec.rb +1 -1
  24. data/examples/chef_gem/spec/install_spec.rb +1 -1
  25. data/examples/chef_gem/spec/purge_spec.rb +1 -1
  26. data/examples/chef_gem/spec/reconfig_spec.rb +1 -1
  27. data/examples/chef_gem/spec/remove_spec.rb +1 -1
  28. data/examples/chef_gem/spec/upgrade_spec.rb +1 -1
  29. data/examples/chocolatey_package/spec/install_spec.rb +1 -1
  30. data/examples/chocolatey_package/spec/remove_spec.rb +1 -1
  31. data/examples/chocolatey_package/spec/upgrade_spec.rb +1 -1
  32. data/examples/compile_time/spec/default_spec.rb +1 -1
  33. data/examples/cookbook_file/spec/create_if_missing_spec.rb +1 -1
  34. data/examples/cookbook_file/spec/create_spec.rb +1 -1
  35. data/examples/cookbook_file/spec/delete_spec.rb +1 -1
  36. data/examples/cookbook_file/spec/touch_spec.rb +1 -1
  37. data/examples/core/recipes/default.rb +1 -0
  38. data/examples/core/spec/default_spec.rb +7 -0
  39. data/examples/core/spec/non_recipe_spec.rb +5 -0
  40. data/examples/cron/spec/create_spec.rb +1 -1
  41. data/examples/cron/spec/delete_spec.rb +1 -1
  42. data/examples/custom_matcher/spec/install_spec.rb +1 -1
  43. data/examples/custom_matcher/spec/remove_spec.rb +1 -1
  44. data/examples/custom_resource/spec/default_spec.rb +1 -1
  45. data/examples/custom_resource_block/resources/default.rb +3 -0
  46. data/examples/custom_resource_block/spec/default_spec.rb +10 -0
  47. data/examples/directory/spec/create_spec.rb +1 -1
  48. data/examples/directory/spec/delete_spec.rb +1 -1
  49. data/examples/dnf_package/spec/install_spec.rb +1 -1
  50. data/examples/dnf_package/spec/purge_spec.rb +1 -1
  51. data/examples/dnf_package/spec/remove_spec.rb +1 -1
  52. data/examples/dnf_package/spec/upgrade_spec.rb +1 -1
  53. data/examples/do_nothing/spec/default_spec.rb +1 -1
  54. data/examples/dpkg_package/spec/install_spec.rb +1 -1
  55. data/examples/dpkg_package/spec/purge_spec.rb +1 -1
  56. data/examples/dpkg_package/spec/remove_spec.rb +1 -1
  57. data/examples/dsc_resource/spec/run_spec.rb +1 -1
  58. data/examples/dsc_script/spec/run_spec.rb +1 -1
  59. data/examples/env/spec/create_spec.rb +1 -1
  60. data/examples/env/spec/delete_spec.rb +1 -1
  61. data/examples/env/spec/modify_spec.rb +1 -1
  62. data/examples/execute/spec/run_spec.rb +1 -1
  63. data/examples/expect_exception/spec/compile_error_spec.rb +1 -1
  64. data/examples/expect_exception/spec/converge_error_spec.rb +1 -1
  65. data/examples/expect_exception/spec/no_error_spec.rb +1 -1
  66. data/examples/file/spec/create_if_missing_spec.rb +1 -1
  67. data/examples/file/spec/create_spec.rb +1 -1
  68. data/examples/file/spec/delete_spec.rb +1 -1
  69. data/examples/file/spec/touch_spec.rb +1 -1
  70. data/examples/freebsd_package/spec/install_spec.rb +1 -1
  71. data/examples/freebsd_package/spec/remove_spec.rb +1 -1
  72. data/examples/gem_package/spec/install_spec.rb +1 -1
  73. data/examples/gem_package/spec/purge_spec.rb +1 -1
  74. data/examples/gem_package/spec/reconfig_spec.rb +1 -1
  75. data/examples/gem_package/spec/remove_spec.rb +1 -1
  76. data/examples/gem_package/spec/upgrade_spec.rb +1 -1
  77. data/examples/git/spec/checkout_spec.rb +1 -1
  78. data/examples/git/spec/export_spec.rb +1 -1
  79. data/examples/git/spec/sync_spec.rb +1 -1
  80. data/examples/group/spec/create_spec.rb +1 -1
  81. data/examples/group/spec/manage_spec.rb +1 -1
  82. data/examples/group/spec/modify_spec.rb +1 -1
  83. data/examples/group/spec/remove_spec.rb +1 -1
  84. data/examples/guards/spec/default_spec.rb +1 -1
  85. data/examples/heavy_provider_light_resource/spec/provider_service_spec.rb +1 -1
  86. data/examples/homebrew_package/spec/install_spec.rb +1 -1
  87. data/examples/homebrew_package/spec/purge_spec.rb +1 -1
  88. data/examples/homebrew_package/spec/remove_spec.rb +1 -1
  89. data/examples/homebrew_package/spec/upgrade_spec.rb +1 -1
  90. data/examples/http_request/spec/delete_spec.rb +1 -1
  91. data/examples/http_request/spec/get_spec.rb +1 -1
  92. data/examples/http_request/spec/head_spec.rb +1 -1
  93. data/examples/http_request/spec/options_spec.rb +1 -1
  94. data/examples/http_request/spec/post_spec.rb +1 -1
  95. data/examples/http_request/spec/put_spec.rb +1 -1
  96. data/examples/ifconfig/spec/add_spec.rb +1 -1
  97. data/examples/ifconfig/spec/delete_spec.rb +1 -1
  98. data/examples/ifconfig/spec/disable_spec.rb +1 -1
  99. data/examples/ifconfig/spec/enable_spec.rb +1 -1
  100. data/examples/include_recipe/spec/default_spec.rb +1 -1
  101. data/examples/ips_package/spec/install_spec.rb +1 -1
  102. data/examples/ips_package/spec/remove_spec.rb +1 -1
  103. data/examples/ips_package/spec/upgrade_spec.rb +1 -1
  104. data/examples/launchd/spec/create_if_missing_spec.rb +1 -1
  105. data/examples/launchd/spec/create_spec.rb +1 -1
  106. data/examples/launchd/spec/delete_spec.rb +1 -1
  107. data/examples/launchd/spec/disable_spec.rb +1 -1
  108. data/examples/launchd/spec/enable_spec.rb +1 -1
  109. data/examples/library_patch/libraries/default.rb +5 -0
  110. data/examples/library_patch/recipes/default.rb +1 -0
  111. data/examples/library_patch/spec/default_spec.rb +14 -0
  112. data/examples/link/spec/create_spec.rb +1 -1
  113. data/examples/link/spec/delete_spec.rb +1 -1
  114. data/examples/link/spec/link_to_spec.rb +1 -1
  115. data/examples/log/spec/write_spec.rb +1 -1
  116. data/examples/macports_package/spec/install_spec.rb +1 -1
  117. data/examples/macports_package/spec/purge_spec.rb +1 -1
  118. data/examples/macports_package/spec/remove_spec.rb +1 -1
  119. data/examples/macports_package/spec/upgrade_spec.rb +1 -1
  120. data/examples/mdadm/spec/assemble_spec.rb +1 -1
  121. data/examples/mdadm/spec/create_spec.rb +1 -1
  122. data/examples/mdadm/spec/stop_spec.rb +1 -1
  123. data/examples/mount/spec/disable_spec.rb +1 -1
  124. data/examples/mount/spec/enable_spec.rb +1 -1
  125. data/examples/mount/spec/mount_spec.rb +1 -1
  126. data/examples/mount/spec/remount_spec.rb +1 -1
  127. data/examples/mount/spec/umount_spec.rb +1 -1
  128. data/examples/msu_package/spec/install_spec.rb +1 -1
  129. data/examples/msu_package/spec/remove_spec.rb +1 -1
  130. data/examples/multiple_actions/spec/default_spec.rb +1 -1
  131. data/examples/multiple_actions/spec/reversed_spec.rb +1 -1
  132. data/examples/multiple_actions/spec/sequential_spec.rb +1 -1
  133. data/examples/multiple_run_action/spec/default_spec.rb +1 -1
  134. data/examples/nothing_matcher/spec/default_spec.rb +1 -1
  135. data/examples/notifications/spec/before_spec.rb +1 -1
  136. data/examples/notifications/spec/chained_spec.rb +1 -1
  137. data/examples/notifications/spec/default_spec.rb +1 -1
  138. data/examples/notifications/spec/delayed_spec.rb +1 -1
  139. data/examples/notifications/spec/immediately_spec.rb +1 -1
  140. data/examples/ohai/spec/reload_spec.rb +1 -1
  141. data/examples/osx_profile/spec/install_spec.rb +1 -1
  142. data/examples/osx_profile/spec/remove_spec.rb +1 -1
  143. data/examples/package/spec/install_spec.rb +1 -1
  144. data/examples/package/spec/lock_spec.rb +1 -1
  145. data/examples/package/spec/purge_spec.rb +1 -1
  146. data/examples/package/spec/reconfig_spec.rb +1 -1
  147. data/examples/package/spec/remove_spec.rb +1 -1
  148. data/examples/package/spec/unlock_spec.rb +1 -1
  149. data/examples/package/spec/upgrade_spec.rb +1 -1
  150. data/examples/pacman_package/spec/install_spec.rb +1 -1
  151. data/examples/pacman_package/spec/purge_spec.rb +1 -1
  152. data/examples/pacman_package/spec/remove_spec.rb +1 -1
  153. data/examples/pacman_package/spec/upgrade_spec.rb +1 -1
  154. data/examples/paludis_package/spec/install_spec.rb +1 -1
  155. data/examples/paludis_package/spec/purge_spec.rb +1 -1
  156. data/examples/paludis_package/spec/remove_spec.rb +1 -1
  157. data/examples/paludis_package/spec/upgrade_spec.rb +1 -1
  158. data/examples/portage_package/spec/install_spec.rb +1 -1
  159. data/examples/portage_package/spec/purge_spec.rb +1 -1
  160. data/examples/portage_package/spec/remove_spec.rb +1 -1
  161. data/examples/portage_package/spec/upgrade_spec.rb +1 -1
  162. data/examples/powershell_script/spec/run_spec.rb +1 -1
  163. data/examples/reboot/spec/cancel_spec.rb +1 -1
  164. data/examples/reboot/spec/now_spec.rb +1 -1
  165. data/examples/reboot/spec/request_spec.rb +1 -1
  166. data/examples/recipe_block/metadata.rb +1 -0
  167. data/examples/recipe_block/spec/recipe_block_spec.rb +34 -0
  168. data/examples/recipe_block/templates/apache2.conf.erb +1 -0
  169. data/examples/registry_key/spec/create_if_missing_spec.rb +1 -1
  170. data/examples/registry_key/spec/create_spec.rb +1 -1
  171. data/examples/registry_key/spec/delete_key_spec.rb +1 -1
  172. data/examples/registry_key/spec/delete_spec.rb +1 -1
  173. data/examples/remote_directory/spec/create_if_missing_spec.rb +1 -1
  174. data/examples/remote_directory/spec/create_spec.rb +1 -1
  175. data/examples/remote_directory/spec/delete_spec.rb +1 -1
  176. data/examples/remote_file/spec/create_if_missing_spec.rb +1 -1
  177. data/examples/remote_file/spec/create_spec.rb +1 -1
  178. data/examples/remote_file/spec/delete_spec.rb +1 -1
  179. data/examples/remote_file/spec/touch_spec.rb +1 -1
  180. data/examples/render_file/spec/default_spec.rb +12 -1
  181. data/examples/render_file/spec/template_helpers_spec.rb +1 -1
  182. data/examples/roles/spec/default_spec.rb +1 -1
  183. data/examples/route/spec/add_spec.rb +1 -1
  184. data/examples/route/spec/delete_spec.rb +1 -1
  185. data/examples/rpm_package/spec/install_spec.rb +1 -1
  186. data/examples/rpm_package/spec/remove_spec.rb +1 -1
  187. data/examples/rpm_package/spec/upgrade_spec.rb +1 -1
  188. data/examples/ruby_block/spec/create_spec.rb +1 -1
  189. data/examples/ruby_block/spec/run_spec.rb +1 -1
  190. data/examples/runner/recipes/default.rb +1 -0
  191. data/examples/runner/spec/default_spec.rb +11 -0
  192. data/examples/script/spec/run_bash_spec.rb +1 -1
  193. data/examples/script/spec/run_csh_spec.rb +1 -1
  194. data/examples/script/spec/run_ksh_spec.rb +1 -1
  195. data/examples/script/spec/run_perl_spec.rb +1 -1
  196. data/examples/script/spec/run_python_spec.rb +1 -1
  197. data/examples/script/spec/run_ruby_spec.rb +1 -1
  198. data/examples/script/spec/run_script_spec.rb +1 -1
  199. data/examples/server/spec/client_spec.rb +1 -1
  200. data/examples/server/spec/data_bag_spec.rb +1 -1
  201. data/examples/server/spec/environment_spec.rb +1 -1
  202. data/examples/server/spec/exotic_port_spec.rb +1 -1
  203. data/examples/server/spec/node_spec.rb +4 -4
  204. data/examples/server/spec/render_with_cached_spec.rb +1 -1
  205. data/examples/server/spec/role_spec.rb +1 -1
  206. data/examples/server/spec/search_spec.rb +1 -1
  207. data/examples/service/spec/disable_spec.rb +1 -1
  208. data/examples/service/spec/enable_spec.rb +1 -1
  209. data/examples/service/spec/reload_spec.rb +1 -1
  210. data/examples/service/spec/restart_spec.rb +1 -1
  211. data/examples/service/spec/start_spec.rb +1 -1
  212. data/examples/service/spec/stop_spec.rb +1 -1
  213. data/examples/smartos_package/spec/install_spec.rb +1 -1
  214. data/examples/smartos_package/spec/remove_spec.rb +1 -1
  215. data/examples/smartos_package/spec/upgrade_spec.rb +1 -1
  216. data/examples/solaris_package/spec/install_spec.rb +1 -1
  217. data/examples/solaris_package/spec/remove_spec.rb +1 -1
  218. data/examples/solaris_package/spec/upgrade_spec.rb +1 -1
  219. data/examples/spec_attributes/attributes/default.rb +1 -0
  220. data/examples/spec_attributes/recipes/default.rb +5 -0
  221. data/examples/spec_attributes/spec/default_spec.rb +54 -0
  222. data/examples/spec_platform/recipes/default.rb +3 -0
  223. data/examples/spec_platform/spec/default_spec.rb +36 -0
  224. data/examples/spec_step_into/recipes/default.rb +3 -0
  225. data/examples/spec_step_into/resources/one.rb +3 -0
  226. data/examples/spec_step_into/resources/two.rb +3 -0
  227. data/examples/spec_step_into/spec/default_spec.rb +50 -0
  228. data/examples/state_attrs/spec/default_spec.rb +1 -1
  229. data/examples/step_into/spec/default_spec.rb +2 -2
  230. data/examples/stub_command/spec/default_spec.rb +1 -1
  231. data/examples/stub_data_bag/spec/default_spec.rb +1 -1
  232. data/examples/stub_data_bag_item/spec/default_spec.rb +1 -1
  233. data/examples/stub_node/spec/default_spec.rb +1 -1
  234. data/examples/stub_search/spec/block_spec.rb +1 -1
  235. data/examples/stub_search/spec/default_spec.rb +1 -1
  236. data/examples/stubs_for/resources/default.rb +20 -0
  237. data/examples/stubs_for/resources/old.rb +26 -0
  238. data/examples/stubs_for/spec/default_spec.rb +240 -0
  239. data/examples/subscribes/spec/before_spec.rb +1 -1
  240. data/examples/subscribes/spec/chained_spec.rb +1 -1
  241. data/examples/subscribes/spec/default_spec.rb +1 -1
  242. data/examples/subscribes/spec/delayed_spec.rb +1 -1
  243. data/examples/subscribes/spec/immediately_spec.rb +1 -1
  244. data/examples/subversion/spec/checkout_spec.rb +1 -1
  245. data/examples/subversion/spec/export_spec.rb +1 -1
  246. data/examples/subversion/spec/force_export_spec.rb +1 -1
  247. data/examples/subversion/spec/sync_spec.rb +1 -1
  248. data/examples/systemd_unit/spec/create_spec.rb +1 -1
  249. data/examples/systemd_unit/spec/delete_spec.rb +1 -1
  250. data/examples/systemd_unit/spec/disable_spec.rb +1 -1
  251. data/examples/systemd_unit/spec/enable_spec.rb +1 -1
  252. data/examples/systemd_unit/spec/mask_spec.rb +1 -1
  253. data/examples/systemd_unit/spec/reload_or_restart_spec.rb +1 -1
  254. data/examples/systemd_unit/spec/reload_or_try_restart_spec.rb +1 -1
  255. data/examples/systemd_unit/spec/restart_spec.rb +1 -1
  256. data/examples/systemd_unit/spec/start_spec.rb +1 -1
  257. data/examples/systemd_unit/spec/stop_spec.rb +1 -1
  258. data/examples/systemd_unit/spec/try_restart_spec.rb +1 -1
  259. data/examples/systemd_unit/spec/unmask_spec.rb +1 -1
  260. data/examples/template/spec/create_if_missing_spec.rb +1 -1
  261. data/examples/template/spec/create_spec.rb +1 -1
  262. data/examples/template/spec/delete_spec.rb +1 -1
  263. data/examples/template/spec/touch_spec.rb +1 -1
  264. data/examples/use_inline_resources/spec/default_spec.rb +1 -1
  265. data/examples/user/spec/create_spec.rb +1 -1
  266. data/examples/user/spec/lock_spec.rb +1 -1
  267. data/examples/user/spec/manage_spec.rb +1 -1
  268. data/examples/user/spec/modify_spec.rb +1 -1
  269. data/examples/user/spec/remove_spec.rb +1 -1
  270. data/examples/user/spec/unlock_spec.rb +1 -1
  271. data/examples/windows_package/spec/install_spec.rb +1 -1
  272. data/examples/windows_package/spec/remove_spec.rb +1 -1
  273. data/examples/windows_service/spec/configure_startup_spec.rb +1 -1
  274. data/examples/windows_service/spec/disable_spec.rb +1 -1
  275. data/examples/windows_service/spec/enable_spec.rb +1 -1
  276. data/examples/windows_service/spec/reload_spec.rb +1 -1
  277. data/examples/windows_service/spec/restart_spec.rb +1 -1
  278. data/examples/windows_service/spec/start_spec.rb +1 -1
  279. data/examples/windows_service/spec/stop_spec.rb +1 -1
  280. data/examples/yum_package/spec/install_spec.rb +1 -1
  281. data/examples/yum_package/spec/lock_spec.rb +1 -1
  282. data/examples/yum_package/spec/purge_spec.rb +1 -1
  283. data/examples/yum_package/spec/remove_spec.rb +1 -1
  284. data/examples/yum_package/spec/unlock_spec.rb +1 -1
  285. data/examples/yum_package/spec/upgrade_spec.rb +1 -1
  286. data/examples/yum_repository/spec/add_spec.rb +1 -1
  287. data/examples/yum_repository/spec/create_spec.rb +1 -1
  288. data/examples/yum_repository/spec/delete_spec.rb +1 -1
  289. data/examples/yum_repository/spec/makecache_spec.rb +1 -1
  290. data/examples/yum_repository/spec/remove_spec.rb +1 -1
  291. data/examples/zypper_package/spec/install_spec.rb +1 -1
  292. data/examples/zypper_package/spec/lock_spec.rb +1 -1
  293. data/examples/zypper_package/spec/purge_spec.rb +1 -1
  294. data/examples/zypper_package/spec/remove_spec.rb +1 -1
  295. data/examples/zypper_package/spec/unlock_spec.rb +1 -1
  296. data/examples/zypper_package/spec/upgrade_spec.rb +1 -1
  297. data/lib/chefspec.rb +1 -1
  298. data/lib/chefspec/api.rb +33 -14
  299. data/lib/chefspec/api/core.rb +195 -0
  300. data/lib/chefspec/api/described.rb +55 -0
  301. data/lib/chefspec/api/do_nothing.rb +24 -19
  302. data/lib/chefspec/api/include_recipe.rb +26 -21
  303. data/lib/chefspec/api/link.rb +26 -21
  304. data/lib/chefspec/api/notifications.rb +38 -33
  305. data/lib/chefspec/api/reboot.rb +11 -6
  306. data/lib/chefspec/api/render_file.rb +35 -30
  307. data/lib/chefspec/api/state_attrs.rb +28 -23
  308. data/lib/chefspec/api/stubs.rb +183 -0
  309. data/lib/chefspec/api/stubs_for.rb +134 -0
  310. data/lib/chefspec/api/subscriptions.rb +35 -30
  311. data/lib/chefspec/api/user.rb +222 -217
  312. data/lib/chefspec/berkshelf.rb +1 -1
  313. data/lib/chefspec/deprecations.rb +2 -11
  314. data/lib/chefspec/errors.rb +1 -0
  315. data/lib/chefspec/extensions.rb +4 -1
  316. data/lib/chefspec/extensions/chef/client.rb +3 -4
  317. data/lib/chefspec/extensions/chef/conditional.rb +3 -2
  318. data/lib/chefspec/extensions/chef/cookbook/gem_installer.rb +25 -28
  319. data/lib/chefspec/extensions/chef/cookbook_loader.rb +13 -0
  320. data/lib/chefspec/extensions/chef/cookbook_uploader.rb +3 -2
  321. data/lib/chefspec/extensions/chef/data_query.rb +5 -8
  322. data/lib/chefspec/extensions/chef/lwrp_base.rb +17 -21
  323. data/lib/chefspec/extensions/chef/provider.rb +36 -0
  324. data/lib/chefspec/extensions/chef/resource.rb +51 -4
  325. data/lib/chefspec/extensions/chef/resource/freebsd_package.rb +13 -16
  326. data/lib/chefspec/extensions/chef/run_context/cookbook_compiler.rb +64 -0
  327. data/lib/chefspec/matchers/render_file_matcher.rb +36 -26
  328. data/lib/chefspec/matchers/resource_matcher.rb +1 -1
  329. data/lib/chefspec/rspec.rb +3 -8
  330. data/lib/chefspec/runner.rb +8 -0
  331. data/lib/chefspec/server_methods.rb +1 -1
  332. data/lib/chefspec/server_runner.rb +13 -9
  333. data/lib/chefspec/solo_runner.rb +136 -32
  334. data/lib/chefspec/version.rb +1 -1
  335. data/spec/unit/deprecations_spec.rb +1 -26
  336. data/spec/unit/macros_spec.rb +14 -14
  337. data/spec/unit/matchers/render_file_matcher_spec.rb +8 -1
  338. data/spec/unit/solo_runner_spec.rb +3 -3
  339. data/templates/errors/may_need_to_specify_platform.erb +1 -1
  340. data/templates/errors/shell_out_not_stubbed.erb +10 -0
  341. metadata +38 -4
  342. data/lib/chefspec/macros.rb +0 -222
@@ -0,0 +1,134 @@
1
+ require "chef/version"
2
+
3
+ module ChefSpec
4
+ module API
5
+ module StubsFor
6
+ # Pull in the needed machinery to use `before` here.
7
+ extend RSpec::SharedContext
8
+
9
+ # Which version to use the shell_out_compacted hook on.
10
+ HAS_SHELLOUT_COMPACTED = Gem::Requirement.create("> 14.2")
11
+
12
+ # Hook used in the monkey patches to set up a place to inject stubs when
13
+ # needed for a resource or provider.
14
+ #
15
+ # @api private
16
+ # @param object [Chef::Resource, Chef::Provider] Resource or provider to inject
17
+ # @param type [Symbol] Type of object to register stubs on
18
+ # @return [void]
19
+ def self.setup_stubs_for(object, type)
20
+ # This space left intentionally blank, real implementation is below.
21
+ end
22
+
23
+ # Place to hold any stubs which should be active for this example.
24
+ let(:_chefspec_stubs_for_registry) do
25
+ # Auto-vivify for things like _chefspec_stubs_for_registry[:resource]['my_resource'] == [].
26
+ Hash.new do |hash, key|
27
+ hash[key] = Hash.new do |inner_hash, inner_key|
28
+ inner_hash[inner_key] = []
29
+ end
30
+ end
31
+ end
32
+
33
+ # Take over from the default, no-op implementation of {.setup_stubs_for}.
34
+ before do
35
+ allow(StubsFor).to receive(:setup_stubs_for) do |object, type|
36
+ type_stubs = _chefspec_stubs_for_registry[type]
37
+ resource_object = object.is_a?(Chef::Provider) ? object.new_resource : object
38
+ stubs = type_stubs[nil] + type_stubs[resource_object.resource_name.to_s] + type_stubs[resource_object.to_s]
39
+ stubs.each do |stub|
40
+ instance_exec(object, &stub)
41
+ end
42
+ end
43
+ end
44
+
45
+ # Register stubs for resource objects.
46
+ #
47
+ # The `target` parameter can select either a resource string like `'package[foo]'`,
48
+ # a resource name like `'package'`, or `nil` for all resources.
49
+ #
50
+ # @example Setting method stub on a single resource
51
+ # it "does a thing" do
52
+ # stubs_for_resource("my_resource[foo]") do |res|
53
+ # expect(res).to receive_shell_out.with("my_command").and_return(stdout: "asdf")
54
+ # end
55
+ # expect(subject.some_method).to eq "asdf"
56
+ # end
57
+ # @param target [String, nil] Resource name to inject, or nil for all resources.
58
+ # @param current_resource [Boolean] If true, also register stubs for current_resource objects on the same target.
59
+ # @param block [Proc] A block taking the resource object as a parameter.
60
+ # @return [void]
61
+ def stubs_for_resource(target=nil, current_resource: true, &block)
62
+ _chefspec_stubs_for_registry[:resource][target] << block
63
+ stubs_for_current_resource(target, &block) if current_resource
64
+ end
65
+
66
+ # Register stubs for current_resource objects.
67
+ #
68
+ # @see #stubs_for_resource
69
+ # @param target [String, nil] Resource name to inject, or nil for all resources.
70
+ # @param block [Proc] A block taking the resource object as a parameter.
71
+ # @return [void]
72
+ def stubs_for_current_resource(target=nil, &block)
73
+ _chefspec_stubs_for_registry[:current_resource][target] << block
74
+ end
75
+
76
+ # Register stubs for provider objects.
77
+ #
78
+ # @see #stubs_for_resource
79
+ # @param target [String, nil] Resource name to inject, or nil for all providers.
80
+ # @param block [Proc] A block taking the resource object as a parameter.
81
+ # @return [void]
82
+ def stubs_for_provider(target=nil, &block)
83
+ _chefspec_stubs_for_registry[:provider][target] << block
84
+ end
85
+
86
+ def receive_shell_out(*cmd, stdout: '', stderr: '', exitstatus: 0, **opts)
87
+ # Ruby does not allow constructing an actual exitstatus object from Ruby code. Really.
88
+ fake_exitstatus = double(exitstatus: exitstatus)
89
+ fake_cmd = Mixlib::ShellOut.new(*cmd, **opts)
90
+ fake_cmd.define_singleton_method(:run_command) { } # Do nothing, just in case.
91
+ # Inject our canned data.
92
+ fake_cmd.instance_exec do
93
+ @stdout = stdout
94
+ @stderr = stderr
95
+ @status = fake_exitstatus
96
+ end
97
+ # On newer Chef, we can intercept using the new, better shell_out_compact hook point.
98
+ shell_out_method ||= if HAS_SHELLOUT_COMPACTED.satisfied_by?(Gem::Version.create(Chef::VERSION))
99
+ :shell_out_compacted
100
+ else
101
+ :shell_out
102
+ end
103
+ receive(shell_out_method).with(*cmd).and_return(fake_cmd)
104
+ end
105
+
106
+ module ClassMethods
107
+ # (see StubsFor#stubs_for_resource)
108
+ def stubs_for_resource(*args, &block)
109
+ before { stubs_for_resource(*args, &block) }
110
+ end
111
+
112
+ # (see StubsFor#stubs_for_current_resource)
113
+ def stubs_for_current_resource(*args, &block)
114
+ before { stubs_for_current_resource(*args, &block) }
115
+ end
116
+
117
+ # (see StubsFor#stubs_for_provider)
118
+ def stubs_for_provider(*args, &block)
119
+ before { stubs_for_provider(*args, &block) }
120
+ end
121
+
122
+ # @api private
123
+ def included(klass)
124
+ super
125
+ # Inject classmethods into the group.
126
+ klass.extend(ClassMethods)
127
+ end
128
+ end
129
+
130
+ extend ClassMethods
131
+
132
+ end
133
+ end
134
+ end
@@ -1,32 +1,37 @@
1
- module ChefSpec::API
2
- #
3
- # Assert that a resource subscribes to another. Given a Chef Recipe that
4
- # subscribes a template resource to restart apache:
5
- #
6
- # service 'apache2' do
7
- # subscribes :create, 'template[/etc/apache2/config]'
8
- # end
9
- #
10
- # The Examples section demonstrates the different ways to test a
11
- # subscription on a resource with ChefSpec.
12
- #
13
- # @example Assert a basic subscription
14
- # service = chef_run.service('apache2')
15
- # expect(service).to subscribe_to('template[/etc/apache2/config]')
16
- #
17
- # @example Assert a subscription with specified action
18
- # expect(service).to subscribe_to('template[/etc/apache2/config]').on(:restart)
19
- #
20
- # @example Assert a subscription with specified action and timing
21
- # expect(service).to subscribe_to('template[/etc/apache2/config]').on(:restart).immediately
22
- #
23
- #
24
- # @param [String] signature
25
- # the signature of the notification to match
26
- #
27
- # @return [ChefSpec::Matchers::NotificationsMatcher]
28
- #
29
- def subscribe_to(signature)
30
- ChefSpec::Matchers::SubscribesMatcher.new(signature)
1
+ module ChefSpec
2
+ module API
3
+ module Subscriptions
4
+ #
5
+ # Assert that a resource subscribes to another. Given a Chef Recipe that
6
+ # subscribes a template resource to restart apache:
7
+ #
8
+ # service 'apache2' do
9
+ # subscribes :create, 'template[/etc/apache2/config]'
10
+ # end
11
+ #
12
+ # The Examples section demonstrates the different ways to test a
13
+ # subscription on a resource with ChefSpec.
14
+ #
15
+ # @example Assert a basic subscription
16
+ # service = chef_run.service('apache2')
17
+ # expect(service).to subscribe_to('template[/etc/apache2/config]')
18
+ #
19
+ # @example Assert a subscription with specified action
20
+ # expect(service).to subscribe_to('template[/etc/apache2/config]').on(:restart)
21
+ #
22
+ # @example Assert a subscription with specified action and timing
23
+ # expect(service).to subscribe_to('template[/etc/apache2/config]').on(:restart).immediately
24
+ #
25
+ #
26
+ # @param [String] signature
27
+ # the signature of the notification to match
28
+ #
29
+ # @return [ChefSpec::Matchers::NotificationsMatcher]
30
+ #
31
+ def subscribe_to(signature)
32
+ ChefSpec::Matchers::SubscribesMatcher.new(signature)
33
+ end
34
+
35
+ end
31
36
  end
32
37
  end
@@ -1,225 +1,230 @@
1
- module ChefSpec::API
2
- ChefSpec.define_matcher :user
1
+ module ChefSpec
2
+ module API
3
+ module User
4
+ ChefSpec.define_matcher :user
3
5
 
4
- #
5
- # Assert that a +user+ resource exists in the Chef run with the
6
- # action +:create+. Given a Chef Recipe that creates "apache2" as a
7
- # +user+:
8
- #
9
- # user 'apache2' do
10
- # action :create
11
- # end
12
- #
13
- # The Examples section demonstrates the different ways to test a
14
- # +user+ resource with ChefSpec.
15
- #
16
- # @example Assert that a +user+ was created
17
- # expect(chef_run).to create_user('apache2')
18
- #
19
- # @example Assert that a +user+ was created with predicate matchers
20
- # expect(chef_run).to create_user('apache2').with_uid(1234)
21
- #
22
- # @example Assert that a +user+ was created with attributes
23
- # expect(chef_run).to create_user('apache2').with(uid: 1234)
24
- #
25
- # @example Assert that a +user+ was created using a regex
26
- # expect(chef_run).to create_user('apache2').with(uid: /\d+/)
27
- #
28
- # @example Assert that a +user+ was _not_ created
29
- # expect(chef_run).to_not create_user('apache2')
30
- #
31
- #
32
- # @param [String, Regex] resource_name
33
- # the name of the resource to match
34
- #
35
- # @return [ChefSpec::Matchers::ResourceMatcher]
36
- #
37
- def create_user(resource_name)
38
- ChefSpec::Matchers::ResourceMatcher.new(:user, :create, resource_name)
39
- end
6
+ #
7
+ # Assert that a +user+ resource exists in the Chef run with the
8
+ # action +:create+. Given a Chef Recipe that creates "apache2" as a
9
+ # +user+:
10
+ #
11
+ # user 'apache2' do
12
+ # action :create
13
+ # end
14
+ #
15
+ # The Examples section demonstrates the different ways to test a
16
+ # +user+ resource with ChefSpec.
17
+ #
18
+ # @example Assert that a +user+ was created
19
+ # expect(chef_run).to create_user('apache2')
20
+ #
21
+ # @example Assert that a +user+ was created with predicate matchers
22
+ # expect(chef_run).to create_user('apache2').with_uid(1234)
23
+ #
24
+ # @example Assert that a +user+ was created with attributes
25
+ # expect(chef_run).to create_user('apache2').with(uid: 1234)
26
+ #
27
+ # @example Assert that a +user+ was created using a regex
28
+ # expect(chef_run).to create_user('apache2').with(uid: /\d+/)
29
+ #
30
+ # @example Assert that a +user+ was _not_ created
31
+ # expect(chef_run).to_not create_user('apache2')
32
+ #
33
+ #
34
+ # @param [String, Regex] resource_name
35
+ # the name of the resource to match
36
+ #
37
+ # @return [ChefSpec::Matchers::ResourceMatcher]
38
+ #
39
+ def create_user(resource_name)
40
+ ChefSpec::Matchers::ResourceMatcher.new(:user, :create, resource_name)
41
+ end
40
42
 
41
- #
42
- # Assert that a +user+ resource exists in the Chef run with the
43
- # action +:remove+. Given a Chef Recipe that removes "apache2" as a
44
- # +user+:
45
- #
46
- # user 'apache2' do
47
- # action :remove
48
- # end
49
- #
50
- # The Examples section demonstrates the different ways to test a
51
- # +user+ resource with ChefSpec.
52
- #
53
- # @example Assert that a +user+ was remove
54
- # expect(chef_run).to remove_user('apache2')
55
- #
56
- # @example Assert that a +user+ was remove with predicate matchers
57
- # expect(chef_run).to remove_user('apache2').with_uid(1234)
58
- #
59
- # @example Assert that a +user+ was remove with attributes
60
- # expect(chef_run).to remove_user('apache2').with(uid: 1234)
61
- #
62
- # @example Assert that a +user+ was remove using a regex
63
- # expect(chef_run).to remove_user('apache2').with(uid: /\d+/)
64
- #
65
- # @example Assert that a +user+ was _not_ remove
66
- # expect(chef_run).to_not remove_user('apache2')
67
- #
68
- #
69
- # @param [String, Regex] resource_name
70
- # the name of the resource to match
71
- #
72
- # @return [ChefSpec::Matchers::ResourceMatcher]
73
- #
74
- def remove_user(resource_name)
75
- ChefSpec::Matchers::ResourceMatcher.new(:user, :remove, resource_name)
76
- end
43
+ #
44
+ # Assert that a +user+ resource exists in the Chef run with the
45
+ # action +:remove+. Given a Chef Recipe that removes "apache2" as a
46
+ # +user+:
47
+ #
48
+ # user 'apache2' do
49
+ # action :remove
50
+ # end
51
+ #
52
+ # The Examples section demonstrates the different ways to test a
53
+ # +user+ resource with ChefSpec.
54
+ #
55
+ # @example Assert that a +user+ was remove
56
+ # expect(chef_run).to remove_user('apache2')
57
+ #
58
+ # @example Assert that a +user+ was remove with predicate matchers
59
+ # expect(chef_run).to remove_user('apache2').with_uid(1234)
60
+ #
61
+ # @example Assert that a +user+ was remove with attributes
62
+ # expect(chef_run).to remove_user('apache2').with(uid: 1234)
63
+ #
64
+ # @example Assert that a +user+ was remove using a regex
65
+ # expect(chef_run).to remove_user('apache2').with(uid: /\d+/)
66
+ #
67
+ # @example Assert that a +user+ was _not_ remove
68
+ # expect(chef_run).to_not remove_user('apache2')
69
+ #
70
+ #
71
+ # @param [String, Regex] resource_name
72
+ # the name of the resource to match
73
+ #
74
+ # @return [ChefSpec::Matchers::ResourceMatcher]
75
+ #
76
+ def remove_user(resource_name)
77
+ ChefSpec::Matchers::ResourceMatcher.new(:user, :remove, resource_name)
78
+ end
77
79
 
78
- #
79
- # Assert that a +user+ resource exists in the Chef run with the
80
- # action +:modify+. Given a Chef Recipe that modifies "apache2" as a
81
- # +user+:
82
- #
83
- # user 'apache2' do
84
- # action :modify
85
- # end
86
- #
87
- # The Examples section demonstrates the different ways to test a
88
- # +user+ resource with ChefSpec.
89
- #
90
- # @example Assert that a +user+ was modified
91
- # expect(chef_run).to modify_user('apache2')
92
- #
93
- # @example Assert that a +user+ was modified with predicate matchers
94
- # expect(chef_run).to modify_user('apache2').with_uid(1234)
95
- #
96
- # @example Assert that a +user+ was modified with attributes
97
- # expect(chef_run).to modify_user('apache2').with(uid: 1234)
98
- #
99
- # @example Assert that a +user+ was modified using a regex
100
- # expect(chef_run).to modify_user('apache2').with(uid: /\d+/)
101
- #
102
- # @example Assert that a +user+ was _not_ modified
103
- # expect(chef_run).to_not modify_user('apache2')
104
- #
105
- #
106
- # @param [String, Regex] resource_name
107
- # the name of the resource to match
108
- #
109
- # @return [ChefSpec::Matchers::ResourceMatcher]
110
- #
111
- def modify_user(resource_name)
112
- ChefSpec::Matchers::ResourceMatcher.new(:user, :modify, resource_name)
113
- end
80
+ #
81
+ # Assert that a +user+ resource exists in the Chef run with the
82
+ # action +:modify+. Given a Chef Recipe that modifies "apache2" as a
83
+ # +user+:
84
+ #
85
+ # user 'apache2' do
86
+ # action :modify
87
+ # end
88
+ #
89
+ # The Examples section demonstrates the different ways to test a
90
+ # +user+ resource with ChefSpec.
91
+ #
92
+ # @example Assert that a +user+ was modified
93
+ # expect(chef_run).to modify_user('apache2')
94
+ #
95
+ # @example Assert that a +user+ was modified with predicate matchers
96
+ # expect(chef_run).to modify_user('apache2').with_uid(1234)
97
+ #
98
+ # @example Assert that a +user+ was modified with attributes
99
+ # expect(chef_run).to modify_user('apache2').with(uid: 1234)
100
+ #
101
+ # @example Assert that a +user+ was modified using a regex
102
+ # expect(chef_run).to modify_user('apache2').with(uid: /\d+/)
103
+ #
104
+ # @example Assert that a +user+ was _not_ modified
105
+ # expect(chef_run).to_not modify_user('apache2')
106
+ #
107
+ #
108
+ # @param [String, Regex] resource_name
109
+ # the name of the resource to match
110
+ #
111
+ # @return [ChefSpec::Matchers::ResourceMatcher]
112
+ #
113
+ def modify_user(resource_name)
114
+ ChefSpec::Matchers::ResourceMatcher.new(:user, :modify, resource_name)
115
+ end
114
116
 
115
- #
116
- # Assert that a +user+ resource exists in the Chef run with the
117
- # action +:manage+. Given a Chef Recipe that manages "apache2" as a
118
- # +user+:
119
- #
120
- # user 'apache2' do
121
- # action :manage
122
- # end
123
- #
124
- # The Examples section demonstrates the different ways to test a
125
- # +user+ resource with ChefSpec.
126
- #
127
- # @example Assert that a +user+ was managed
128
- # expect(chef_run).to manage_user('apache2')
129
- #
130
- # @example Assert that a +user+ was managed with predicate matchers
131
- # expect(chef_run).to manage_user('apache2').with_uid(1234)
132
- #
133
- # @example Assert that a +user+ was managed with attributes
134
- # expect(chef_run).to manage_user('apache2').with(uid: 1234)
135
- #
136
- # @example Assert that a +user+ was managed using a regex
137
- # expect(chef_run).to manage_user('apache2').with(uid: /\d+/)
138
- #
139
- # @example Assert that a +user+ was _not_ managed
140
- # expect(chef_run).to_not manage_user('apache2')
141
- #
142
- #
143
- # @param [String, Regex] resource_name
144
- # the name of the resource to match
145
- #
146
- # @return [ChefSpec::Matchers::ResourceMatcher]
147
- #
148
- def manage_user(resource_name)
149
- ChefSpec::Matchers::ResourceMatcher.new(:user, :manage, resource_name)
150
- end
117
+ #
118
+ # Assert that a +user+ resource exists in the Chef run with the
119
+ # action +:manage+. Given a Chef Recipe that manages "apache2" as a
120
+ # +user+:
121
+ #
122
+ # user 'apache2' do
123
+ # action :manage
124
+ # end
125
+ #
126
+ # The Examples section demonstrates the different ways to test a
127
+ # +user+ resource with ChefSpec.
128
+ #
129
+ # @example Assert that a +user+ was managed
130
+ # expect(chef_run).to manage_user('apache2')
131
+ #
132
+ # @example Assert that a +user+ was managed with predicate matchers
133
+ # expect(chef_run).to manage_user('apache2').with_uid(1234)
134
+ #
135
+ # @example Assert that a +user+ was managed with attributes
136
+ # expect(chef_run).to manage_user('apache2').with(uid: 1234)
137
+ #
138
+ # @example Assert that a +user+ was managed using a regex
139
+ # expect(chef_run).to manage_user('apache2').with(uid: /\d+/)
140
+ #
141
+ # @example Assert that a +user+ was _not_ managed
142
+ # expect(chef_run).to_not manage_user('apache2')
143
+ #
144
+ #
145
+ # @param [String, Regex] resource_name
146
+ # the name of the resource to match
147
+ #
148
+ # @return [ChefSpec::Matchers::ResourceMatcher]
149
+ #
150
+ def manage_user(resource_name)
151
+ ChefSpec::Matchers::ResourceMatcher.new(:user, :manage, resource_name)
152
+ end
151
153
 
152
- #
153
- # Assert that a +user+ resource exists in the Chef run with the
154
- # action +:lock+. Given a Chef Recipe that locks "apache2" as a
155
- # +user+:
156
- #
157
- # user 'apache2' do
158
- # action :lock
159
- # end
160
- #
161
- # The Examples section demonstrates the different ways to test a
162
- # +user+ resource with ChefSpec.
163
- #
164
- # @example Assert that a +user+ was locked
165
- # expect(chef_run).to lock_user('apache2')
166
- #
167
- # @example Assert that a +user+ was locked with predicate matchers
168
- # expect(chef_run).to lock_user('apache2').with_uid(1234)
169
- #
170
- # @example Assert that a +user+ was locked with attributes
171
- # expect(chef_run).to lock_user('apache2').with(uid: 1234)
172
- #
173
- # @example Assert that a +user+ was locked using a regex
174
- # expect(chef_run).to lock_user('apache2').with(uid: /\d+/)
175
- #
176
- # @example Assert that a +user+ was _not_ locked
177
- # expect(chef_run).to_not lock_user('apache2')
178
- #
179
- #
180
- # @param [String, Regex] resource_name
181
- # the name of the resource to match
182
- #
183
- # @return [ChefSpec::Matchers::ResourceMatcher]
184
- #
185
- def lock_user(resource_name)
186
- ChefSpec::Matchers::ResourceMatcher.new(:user, :lock, resource_name)
187
- end
154
+ #
155
+ # Assert that a +user+ resource exists in the Chef run with the
156
+ # action +:lock+. Given a Chef Recipe that locks "apache2" as a
157
+ # +user+:
158
+ #
159
+ # user 'apache2' do
160
+ # action :lock
161
+ # end
162
+ #
163
+ # The Examples section demonstrates the different ways to test a
164
+ # +user+ resource with ChefSpec.
165
+ #
166
+ # @example Assert that a +user+ was locked
167
+ # expect(chef_run).to lock_user('apache2')
168
+ #
169
+ # @example Assert that a +user+ was locked with predicate matchers
170
+ # expect(chef_run).to lock_user('apache2').with_uid(1234)
171
+ #
172
+ # @example Assert that a +user+ was locked with attributes
173
+ # expect(chef_run).to lock_user('apache2').with(uid: 1234)
174
+ #
175
+ # @example Assert that a +user+ was locked using a regex
176
+ # expect(chef_run).to lock_user('apache2').with(uid: /\d+/)
177
+ #
178
+ # @example Assert that a +user+ was _not_ locked
179
+ # expect(chef_run).to_not lock_user('apache2')
180
+ #
181
+ #
182
+ # @param [String, Regex] resource_name
183
+ # the name of the resource to match
184
+ #
185
+ # @return [ChefSpec::Matchers::ResourceMatcher]
186
+ #
187
+ def lock_user(resource_name)
188
+ ChefSpec::Matchers::ResourceMatcher.new(:user, :lock, resource_name)
189
+ end
190
+
191
+ #
192
+ # Assert that a +user+ resource exists in the Chef run with the
193
+ # action +:unlock+. Given a Chef Recipe that unlocks "apache2" as a
194
+ # +user+:
195
+ #
196
+ # user 'apache2' do
197
+ # action :unlock
198
+ # end
199
+ #
200
+ # The Examples section demonstrates the different ways to test a
201
+ # +user+ resource with ChefSpec.
202
+ #
203
+ # @example Assert that a +user+ was unlocked
204
+ # expect(chef_run).to unlock_user('apache2')
205
+ #
206
+ # @example Assert that a +user+ was unlocked with predicate matchers
207
+ # expect(chef_run).to unlock_user('apache2').with_uid(1234)
208
+ #
209
+ # @example Assert that a +user+ was unlocked with attributes
210
+ # expect(chef_run).to unlock_user('apache2').with(uid: 1234)
211
+ #
212
+ # @example Assert that a +user+ was unlocked using a regex
213
+ # expect(chef_run).to unlock_user('apache2').with(uid: /\d+/)
214
+ #
215
+ # @example Assert that a +user+ was _not_ unlocked
216
+ # expect(chef_run).to_not unlock_user('apache2')
217
+ #
218
+ #
219
+ # @param [String, Regex] resource_name
220
+ # the name of the resource to match
221
+ #
222
+ # @return [ChefSpec::Matchers::ResourceMatcher]
223
+ #
224
+ def unlock_user(resource_name)
225
+ ChefSpec::Matchers::ResourceMatcher.new(:user, :unlock, resource_name)
226
+ end
188
227
 
189
- #
190
- # Assert that a +user+ resource exists in the Chef run with the
191
- # action +:unlock+. Given a Chef Recipe that unlocks "apache2" as a
192
- # +user+:
193
- #
194
- # user 'apache2' do
195
- # action :unlock
196
- # end
197
- #
198
- # The Examples section demonstrates the different ways to test a
199
- # +user+ resource with ChefSpec.
200
- #
201
- # @example Assert that a +user+ was unlocked
202
- # expect(chef_run).to unlock_user('apache2')
203
- #
204
- # @example Assert that a +user+ was unlocked with predicate matchers
205
- # expect(chef_run).to unlock_user('apache2').with_uid(1234)
206
- #
207
- # @example Assert that a +user+ was unlocked with attributes
208
- # expect(chef_run).to unlock_user('apache2').with(uid: 1234)
209
- #
210
- # @example Assert that a +user+ was unlocked using a regex
211
- # expect(chef_run).to unlock_user('apache2').with(uid: /\d+/)
212
- #
213
- # @example Assert that a +user+ was _not_ unlocked
214
- # expect(chef_run).to_not unlock_user('apache2')
215
- #
216
- #
217
- # @param [String, Regex] resource_name
218
- # the name of the resource to match
219
- #
220
- # @return [ChefSpec::Matchers::ResourceMatcher]
221
- #
222
- def unlock_user(resource_name)
223
- ChefSpec::Matchers::ResourceMatcher.new(:user, :unlock, resource_name)
228
+ end
224
229
  end
225
230
  end