chefspec 7.2.1 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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