chefspec 3.1.4 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (532) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +15 -0
  3. data/.travis.yml +39 -0
  4. data/CHANGELOG.md +444 -0
  5. data/CONTRIBUTING.md +52 -0
  6. data/Gemfile +2 -0
  7. data/ISSUES.md +41 -0
  8. data/LICENSE +22 -0
  9. data/README.md +893 -0
  10. data/Rakefile +29 -0
  11. data/chefspec.gemspec +42 -0
  12. data/examples/apt_package/recipes/install.rb +13 -0
  13. data/examples/apt_package/recipes/purge.rb +13 -0
  14. data/examples/apt_package/recipes/reconfig.rb +13 -0
  15. data/examples/apt_package/recipes/remove.rb +13 -0
  16. data/examples/apt_package/recipes/upgrade.rb +13 -0
  17. data/examples/apt_package/spec/install_spec.rb +23 -0
  18. data/examples/apt_package/spec/purge_spec.rb +19 -0
  19. data/examples/apt_package/spec/reconfig_spec.rb +19 -0
  20. data/examples/apt_package/spec/remove_spec.rb +19 -0
  21. data/examples/apt_package/spec/upgrade_spec.rb +19 -0
  22. data/examples/attributes/attributes/default.rb +1 -0
  23. data/examples/attributes/recipes/default.rb +4 -0
  24. data/examples/attributes/spec/default_spec.rb +20 -0
  25. data/examples/batch/recipes/run.rb +13 -0
  26. data/examples/batch/spec/run_spec.rb +23 -0
  27. data/examples/cached/recipes/default.rb +1 -0
  28. data/examples/cached/spec/default_spec.rb +13 -0
  29. data/examples/chef_gem/recipes/install.rb +13 -0
  30. data/examples/chef_gem/recipes/purge.rb +13 -0
  31. data/examples/chef_gem/recipes/reconfig.rb +13 -0
  32. data/examples/chef_gem/recipes/remove.rb +13 -0
  33. data/examples/chef_gem/recipes/upgrade.rb +13 -0
  34. data/examples/chef_gem/spec/install_spec.rb +23 -0
  35. data/examples/chef_gem/spec/purge_spec.rb +19 -0
  36. data/examples/chef_gem/spec/reconfig_spec.rb +19 -0
  37. data/examples/chef_gem/spec/remove_spec.rb +19 -0
  38. data/examples/chef_gem/spec/upgrade_spec.rb +19 -0
  39. data/examples/compile_time/recipes/default.rb +3 -0
  40. data/examples/compile_time/spec/default_spec.rb +27 -0
  41. data/examples/cookbook_file/recipes/create.rb +15 -0
  42. data/examples/cookbook_file/recipes/create_if_missing.rb +15 -0
  43. data/examples/cookbook_file/recipes/delete.rb +15 -0
  44. data/examples/cookbook_file/recipes/touch.rb +15 -0
  45. data/examples/cookbook_file/spec/create_if_missing_spec.rb +28 -0
  46. data/examples/cookbook_file/spec/create_spec.rb +32 -0
  47. data/examples/cookbook_file/spec/delete_spec.rb +19 -0
  48. data/examples/cookbook_file/spec/touch_spec.rb +19 -0
  49. data/examples/cron/recipes/create.rb +10 -0
  50. data/examples/cron/recipes/delete.rb +9 -0
  51. data/examples/cron/spec/create_spec.rb +19 -0
  52. data/examples/cron/spec/delete_spec.rb +15 -0
  53. data/examples/custom_matcher/libraries/matcher.rb +23 -0
  54. data/examples/custom_matcher/providers/thing.rb +2 -0
  55. data/examples/custom_matcher/recipes/install.rb +13 -0
  56. data/examples/custom_matcher/recipes/remove.rb +13 -0
  57. data/examples/custom_matcher/resources/thing.rb +5 -0
  58. data/examples/custom_matcher/spec/install_spec.rb +27 -0
  59. data/examples/custom_matcher/spec/remove_spec.rb +23 -0
  60. data/examples/deploy/recipes/deploy.rb +10 -0
  61. data/examples/deploy/recipes/force_deploy.rb +9 -0
  62. data/examples/deploy/recipes/rollback.rb +9 -0
  63. data/examples/deploy/spec/deploy_spec.rb +15 -0
  64. data/examples/deploy/spec/force_deploy_spec.rb +15 -0
  65. data/examples/deploy/spec/rollback_spec.rb +15 -0
  66. data/examples/directory/recipes/create.rb +14 -0
  67. data/examples/directory/recipes/delete.rb +14 -0
  68. data/examples/directory/spec/create_spec.rb +30 -0
  69. data/examples/directory/spec/delete_spec.rb +26 -0
  70. data/examples/dpkg_package/recipes/install.rb +13 -0
  71. data/examples/dpkg_package/recipes/purge.rb +13 -0
  72. data/examples/dpkg_package/recipes/remove.rb +13 -0
  73. data/examples/dpkg_package/spec/install_spec.rb +23 -0
  74. data/examples/dpkg_package/spec/purge_spec.rb +19 -0
  75. data/examples/dpkg_package/spec/remove_spec.rb +19 -0
  76. data/examples/easy_install_package/recipes/install.rb +13 -0
  77. data/examples/easy_install_package/recipes/purge.rb +13 -0
  78. data/examples/easy_install_package/recipes/remove.rb +13 -0
  79. data/examples/easy_install_package/recipes/upgrade.rb +13 -0
  80. data/examples/easy_install_package/spec/install_spec.rb +23 -0
  81. data/examples/easy_install_package/spec/purge_spec.rb +19 -0
  82. data/examples/easy_install_package/spec/remove_spec.rb +19 -0
  83. data/examples/easy_install_package/spec/upgrade_spec.rb +19 -0
  84. data/examples/env/recipes/create.rb +13 -0
  85. data/examples/env/recipes/delete.rb +13 -0
  86. data/examples/env/recipes/modify.rb +13 -0
  87. data/examples/env/spec/create_spec.rb +23 -0
  88. data/examples/env/spec/delete_spec.rb +19 -0
  89. data/examples/env/spec/modify_spec.rb +19 -0
  90. data/examples/erl_call/recipes/run.rb +13 -0
  91. data/examples/erl_call/spec/run_spec.rb +23 -0
  92. data/examples/execute/recipes/run.rb +13 -0
  93. data/examples/execute/spec/run_spec.rb +23 -0
  94. data/examples/expect_exception/recipes/compile_error.rb +1 -0
  95. data/examples/expect_exception/recipes/converge_error.rb +5 -0
  96. data/examples/expect_exception/recipes/no_error.rb +1 -0
  97. data/examples/expect_exception/spec/compile_error_spec.rb +10 -0
  98. data/examples/expect_exception/spec/converge_error_spec.rb +10 -0
  99. data/examples/expect_exception/spec/no_error_spec.rb +10 -0
  100. data/examples/file/recipes/create.rb +15 -0
  101. data/examples/file/recipes/create_if_missing.rb +15 -0
  102. data/examples/file/recipes/delete.rb +15 -0
  103. data/examples/file/recipes/touch.rb +15 -0
  104. data/examples/file/spec/create_if_missing_spec.rb +28 -0
  105. data/examples/file/spec/create_spec.rb +32 -0
  106. data/examples/file/spec/delete_spec.rb +19 -0
  107. data/examples/file/spec/touch_spec.rb +19 -0
  108. data/examples/freebsd_package/recipes/install.rb +13 -0
  109. data/examples/freebsd_package/recipes/remove.rb +13 -0
  110. data/examples/freebsd_package/spec/install_spec.rb +23 -0
  111. data/examples/freebsd_package/spec/remove_spec.rb +19 -0
  112. data/examples/gem_package/recipes/install.rb +13 -0
  113. data/examples/gem_package/recipes/purge.rb +13 -0
  114. data/examples/gem_package/recipes/reconfig.rb +13 -0
  115. data/examples/gem_package/recipes/remove.rb +13 -0
  116. data/examples/gem_package/recipes/upgrade.rb +13 -0
  117. data/examples/gem_package/spec/install_spec.rb +23 -0
  118. data/examples/gem_package/spec/purge_spec.rb +19 -0
  119. data/examples/gem_package/spec/reconfig_spec.rb +19 -0
  120. data/examples/gem_package/spec/remove_spec.rb +19 -0
  121. data/examples/gem_package/spec/upgrade_spec.rb +19 -0
  122. data/examples/git/recipes/checkout.rb +13 -0
  123. data/examples/git/recipes/export.rb +13 -0
  124. data/examples/git/recipes/sync.rb +13 -0
  125. data/examples/git/spec/checkout_spec.rb +19 -0
  126. data/examples/git/spec/export_spec.rb +19 -0
  127. data/examples/git/spec/sync_spec.rb +23 -0
  128. data/examples/group/recipes/create.rb +13 -0
  129. data/examples/group/recipes/manage.rb +13 -0
  130. data/examples/group/recipes/modify.rb +13 -0
  131. data/examples/group/recipes/remove.rb +13 -0
  132. data/examples/group/spec/create_spec.rb +23 -0
  133. data/examples/group/spec/manage_spec.rb +19 -0
  134. data/examples/group/spec/modify_spec.rb +19 -0
  135. data/examples/group/spec/remove_spec.rb +18 -0
  136. data/examples/guards/recipes/default.rb +13 -0
  137. data/examples/guards/spec/default_spec.rb +17 -0
  138. data/examples/heavy_provider_light_resource/libraries/resource_service.rb +15 -0
  139. data/examples/heavy_provider_light_resource/providers/service.rb +9 -0
  140. data/examples/heavy_provider_light_resource/recipes/default.rb +4 -0
  141. data/examples/heavy_provider_light_resource/spec/provider_service_spec.rb +7 -0
  142. data/examples/http_request/recipes/delete.rb +13 -0
  143. data/examples/http_request/recipes/get.rb +13 -0
  144. data/examples/http_request/recipes/head.rb +13 -0
  145. data/examples/http_request/recipes/options.rb +13 -0
  146. data/examples/http_request/recipes/post.rb +13 -0
  147. data/examples/http_request/recipes/put.rb +13 -0
  148. data/examples/http_request/spec/delete_spec.rb +19 -0
  149. data/examples/http_request/spec/get_spec.rb +23 -0
  150. data/examples/http_request/spec/head_spec.rb +19 -0
  151. data/examples/http_request/spec/options_spec.rb +19 -0
  152. data/examples/http_request/spec/post_spec.rb +19 -0
  153. data/examples/http_request/spec/put_spec.rb +19 -0
  154. data/examples/ifconfig/recipes/add.rb +9 -0
  155. data/examples/ifconfig/recipes/delete.rb +8 -0
  156. data/examples/ifconfig/recipes/disable.rb +8 -0
  157. data/examples/ifconfig/recipes/enable.rb +8 -0
  158. data/examples/ifconfig/spec/add_spec.rb +19 -0
  159. data/examples/ifconfig/spec/delete_spec.rb +15 -0
  160. data/examples/ifconfig/spec/disable_spec.rb +15 -0
  161. data/examples/ifconfig/spec/enable_spec.rb +15 -0
  162. data/examples/include_recipe/recipes/default.rb +1 -0
  163. data/examples/include_recipe/recipes/not.rb +0 -0
  164. data/examples/include_recipe/recipes/other.rb +0 -0
  165. data/examples/include_recipe/spec/default_spec.rb +13 -0
  166. data/examples/inherits/recipes/default.rb +5 -0
  167. data/examples/inherits/spec/default_spec.rb +21 -0
  168. data/examples/ips_package/recipes/install.rb +13 -0
  169. data/examples/ips_package/recipes/remove.rb +13 -0
  170. data/examples/ips_package/recipes/upgrade.rb +13 -0
  171. data/examples/ips_package/spec/install_spec.rb +23 -0
  172. data/examples/ips_package/spec/remove_spec.rb +19 -0
  173. data/examples/ips_package/spec/upgrade_spec.rb +19 -0
  174. data/examples/link/recipes/create.rb +13 -0
  175. data/examples/link/recipes/delete.rb +13 -0
  176. data/examples/link/recipes/link_to.rb +3 -0
  177. data/examples/link/spec/create_spec.rb +23 -0
  178. data/examples/link/spec/delete_spec.rb +19 -0
  179. data/examples/link/spec/link_to_spec.rb +11 -0
  180. data/examples/log/recipes/write.rb +14 -0
  181. data/examples/log/spec/write_spec.rb +24 -0
  182. data/examples/macports_package/recipes/install.rb +13 -0
  183. data/examples/macports_package/recipes/purge.rb +13 -0
  184. data/examples/macports_package/recipes/remove.rb +13 -0
  185. data/examples/macports_package/recipes/upgrade.rb +13 -0
  186. data/examples/macports_package/spec/install_spec.rb +23 -0
  187. data/examples/macports_package/spec/purge_spec.rb +19 -0
  188. data/examples/macports_package/spec/remove_spec.rb +19 -0
  189. data/examples/macports_package/spec/upgrade_spec.rb +19 -0
  190. data/examples/mdadm/recipes/assemble.rb +13 -0
  191. data/examples/mdadm/recipes/create.rb +13 -0
  192. data/examples/mdadm/recipes/stop.rb +13 -0
  193. data/examples/mdadm/spec/assemble_spec.rb +19 -0
  194. data/examples/mdadm/spec/create_spec.rb +23 -0
  195. data/examples/mdadm/spec/stop_spec.rb +19 -0
  196. data/examples/mount/recipes/disable.rb +8 -0
  197. data/examples/mount/recipes/enable.rb +8 -0
  198. data/examples/mount/recipes/mount.rb +9 -0
  199. data/examples/mount/recipes/remount.rb +8 -0
  200. data/examples/mount/recipes/umount.rb +8 -0
  201. data/examples/mount/spec/disable_spec.rb +15 -0
  202. data/examples/mount/spec/enable_spec.rb +15 -0
  203. data/examples/mount/spec/mount_spec.rb +19 -0
  204. data/examples/mount/spec/remount_spec.rb +15 -0
  205. data/examples/mount/spec/umount_spec.rb +15 -0
  206. data/examples/multiple_actions/recipes/default.rb +3 -0
  207. data/examples/multiple_actions/recipes/sequential.rb +7 -0
  208. data/examples/multiple_actions/spec/default_spec.rb +14 -0
  209. data/examples/multiple_actions/spec/sequential_spec.rb +13 -0
  210. data/examples/multiple_run_action/recipes/default.rb +5 -0
  211. data/examples/multiple_run_action/spec/default_spec.rb +18 -0
  212. data/examples/notifications/recipes/chained.rb +12 -0
  213. data/examples/notifications/recipes/default.rb +7 -0
  214. data/examples/notifications/recipes/delayed.rb +7 -0
  215. data/examples/notifications/recipes/immediately.rb +7 -0
  216. data/examples/notifications/spec/chained_spec.rb +21 -0
  217. data/examples/notifications/spec/default_spec.rb +16 -0
  218. data/examples/notifications/spec/delayed_spec.rb +16 -0
  219. data/examples/notifications/spec/immediately_spec.rb +16 -0
  220. data/examples/ohai/recipes/reload.rb +13 -0
  221. data/examples/ohai/spec/reload_spec.rb +23 -0
  222. data/examples/package/recipes/install.rb +13 -0
  223. data/examples/package/recipes/purge.rb +13 -0
  224. data/examples/package/recipes/reconfig.rb +13 -0
  225. data/examples/package/recipes/remove.rb +13 -0
  226. data/examples/package/recipes/upgrade.rb +13 -0
  227. data/examples/package/spec/install_spec.rb +23 -0
  228. data/examples/package/spec/purge_spec.rb +19 -0
  229. data/examples/package/spec/reconfig_spec.rb +19 -0
  230. data/examples/package/spec/remove_spec.rb +19 -0
  231. data/examples/package/spec/upgrade_spec.rb +19 -0
  232. data/examples/pacman_package/recipes/install.rb +13 -0
  233. data/examples/pacman_package/recipes/purge.rb +13 -0
  234. data/examples/pacman_package/recipes/remove.rb +13 -0
  235. data/examples/pacman_package/recipes/upgrade.rb +13 -0
  236. data/examples/pacman_package/spec/install_spec.rb +23 -0
  237. data/examples/pacman_package/spec/purge_spec.rb +19 -0
  238. data/examples/pacman_package/spec/remove_spec.rb +19 -0
  239. data/examples/pacman_package/spec/upgrade_spec.rb +19 -0
  240. data/examples/portage_package/recipes/install.rb +13 -0
  241. data/examples/portage_package/recipes/purge.rb +13 -0
  242. data/examples/portage_package/recipes/remove.rb +13 -0
  243. data/examples/portage_package/recipes/upgrade.rb +13 -0
  244. data/examples/portage_package/spec/install_spec.rb +23 -0
  245. data/examples/portage_package/spec/purge_spec.rb +19 -0
  246. data/examples/portage_package/spec/remove_spec.rb +19 -0
  247. data/examples/portage_package/spec/upgrade_spec.rb +19 -0
  248. data/examples/powershell_script/recipes/run.rb +13 -0
  249. data/examples/powershell_script/spec/run_spec.rb +23 -0
  250. data/examples/registry_key/recipes/create.rb +13 -0
  251. data/examples/registry_key/recipes/create_if_missing.rb +13 -0
  252. data/examples/registry_key/recipes/delete.rb +13 -0
  253. data/examples/registry_key/recipes/delete_key.rb +13 -0
  254. data/examples/registry_key/spec/create_if_missing_spec.rb +19 -0
  255. data/examples/registry_key/spec/create_spec.rb +23 -0
  256. data/examples/registry_key/spec/delete_key_spec.rb +19 -0
  257. data/examples/registry_key/spec/delete_spec.rb +19 -0
  258. data/examples/remote_directory/recipes/create.rb +13 -0
  259. data/examples/remote_directory/recipes/create_if_missing.rb +13 -0
  260. data/examples/remote_directory/recipes/delete.rb +13 -0
  261. data/examples/remote_directory/spec/create_if_missing_spec.rb +19 -0
  262. data/examples/remote_directory/spec/create_spec.rb +23 -0
  263. data/examples/remote_directory/spec/delete_spec.rb +19 -0
  264. data/examples/remote_file/recipes/create.rb +18 -0
  265. data/examples/remote_file/recipes/create_if_missing.rb +16 -0
  266. data/examples/remote_file/recipes/delete.rb +16 -0
  267. data/examples/remote_file/recipes/touch.rb +16 -0
  268. data/examples/remote_file/spec/create_if_missing_spec.rb +19 -0
  269. data/examples/remote_file/spec/create_spec.rb +23 -0
  270. data/examples/remote_file/spec/delete_spec.rb +19 -0
  271. data/examples/remote_file/spec/touch_spec.rb +19 -0
  272. data/examples/render_file/files/default/cookbook_file +1 -0
  273. data/examples/render_file/recipes/default.rb +15 -0
  274. data/examples/render_file/recipes/template_helpers.rb +9 -0
  275. data/examples/render_file/spec/default_spec.rb +73 -0
  276. data/examples/render_file/spec/template_helpers_spec.rb +10 -0
  277. data/examples/render_file/templates/default/_partial.erb +1 -0
  278. data/examples/render_file/templates/default/partial.erb +1 -0
  279. data/examples/render_file/templates/default/template.erb +1 -0
  280. data/examples/render_file/templates/default/template_with_helper.erb +1 -0
  281. data/examples/roles/recipes/another.rb +3 -0
  282. data/examples/roles/recipes/default.rb +1 -0
  283. data/examples/roles/roles/role.rb +9 -0
  284. data/examples/roles/spec/default_spec.rb +21 -0
  285. data/examples/route/recipes/add.rb +13 -0
  286. data/examples/route/recipes/delete.rb +13 -0
  287. data/examples/route/spec/add_spec.rb +23 -0
  288. data/examples/route/spec/delete_spec.rb +19 -0
  289. data/examples/rpm_package/recipes/install.rb +13 -0
  290. data/examples/rpm_package/recipes/remove.rb +13 -0
  291. data/examples/rpm_package/recipes/upgrade.rb +13 -0
  292. data/examples/rpm_package/spec/install_spec.rb +23 -0
  293. data/examples/rpm_package/spec/remove_spec.rb +19 -0
  294. data/examples/rpm_package/spec/upgrade_spec.rb +19 -0
  295. data/examples/ruby_block/recipes/run.rb +9 -0
  296. data/examples/ruby_block/spec/run_spec.rb +18 -0
  297. data/examples/script/recipes/run_bash.rb +13 -0
  298. data/examples/script/recipes/run_csh.rb +13 -0
  299. data/examples/script/recipes/run_perl.rb +13 -0
  300. data/examples/script/recipes/run_python.rb +13 -0
  301. data/examples/script/recipes/run_ruby.rb +13 -0
  302. data/examples/script/recipes/run_script.rb +13 -0
  303. data/examples/script/spec/run_bash_spec.rb +23 -0
  304. data/examples/script/spec/run_csh_spec.rb +23 -0
  305. data/examples/script/spec/run_perl_spec.rb +23 -0
  306. data/examples/script/spec/run_python_spec.rb +23 -0
  307. data/examples/script/spec/run_ruby_spec.rb +23 -0
  308. data/examples/script/spec/run_script_spec.rb +23 -0
  309. data/examples/server/recipes/client.rb +6 -0
  310. data/examples/server/recipes/data_bag.rb +7 -0
  311. data/examples/server/recipes/environment.rb +6 -0
  312. data/examples/server/recipes/node.rb +6 -0
  313. data/examples/server/recipes/role.rb +6 -0
  314. data/examples/server/recipes/search.rb +5 -0
  315. data/examples/server/spec/client_spec.rb +17 -0
  316. data/examples/server/spec/data_bag_spec.rb +26 -0
  317. data/examples/server/spec/environment_spec.rb +17 -0
  318. data/examples/server/spec/node_spec.rb +40 -0
  319. data/examples/server/spec/role_spec.rb +17 -0
  320. data/examples/server/spec/search_spec.rb +58 -0
  321. data/examples/service/recipes/disable.rb +13 -0
  322. data/examples/service/recipes/enable.rb +13 -0
  323. data/examples/service/recipes/reload.rb +13 -0
  324. data/examples/service/recipes/restart.rb +13 -0
  325. data/examples/service/recipes/start.rb +13 -0
  326. data/examples/service/recipes/stop.rb +13 -0
  327. data/examples/service/spec/disable_spec.rb +19 -0
  328. data/examples/service/spec/enable_spec.rb +19 -0
  329. data/examples/service/spec/reload_spec.rb +19 -0
  330. data/examples/service/spec/restart_spec.rb +19 -0
  331. data/examples/service/spec/start_spec.rb +19 -0
  332. data/examples/service/spec/stop_spec.rb +19 -0
  333. data/examples/smartos_package/recipes/install.rb +13 -0
  334. data/examples/smartos_package/recipes/remove.rb +13 -0
  335. data/examples/smartos_package/recipes/upgrade.rb +13 -0
  336. data/examples/smartos_package/spec/install_spec.rb +23 -0
  337. data/examples/smartos_package/spec/remove_spec.rb +19 -0
  338. data/examples/smartos_package/spec/upgrade_spec.rb +19 -0
  339. data/examples/solaris_package/recipes/install.rb +13 -0
  340. data/examples/solaris_package/recipes/remove.rb +13 -0
  341. data/examples/solaris_package/spec/install_spec.rb +23 -0
  342. data/examples/solaris_package/spec/remove_spec.rb +19 -0
  343. data/examples/state_attrs/providers/lwrp.rb +3 -0
  344. data/examples/state_attrs/recipes/default.rb +3 -0
  345. data/examples/state_attrs/resources/lwrp.rb +6 -0
  346. data/examples/state_attrs/spec/default_spec.rb +12 -0
  347. data/examples/step_into/providers/lwrp.rb +3 -0
  348. data/examples/step_into/recipes/default.rb +1 -0
  349. data/examples/step_into/resources/lwrp.rb +4 -0
  350. data/examples/step_into/spec/default_spec.rb +19 -0
  351. data/examples/stub_command/recipes/default.rb +5 -0
  352. data/examples/stub_command/recipes/other_recipe.rb +3 -0
  353. data/examples/stub_command/spec/default_spec.rb +28 -0
  354. data/examples/stub_data_bag/recipes/default.rb +5 -0
  355. data/examples/stub_data_bag/spec/default_spec.rb +27 -0
  356. data/examples/stub_data_bag_item/recipes/default.rb +5 -0
  357. data/examples/stub_data_bag_item/spec/default_spec.rb +27 -0
  358. data/examples/stub_node/recipes/default.rb +0 -0
  359. data/examples/stub_node/spec/default_spec.rb +17 -0
  360. data/examples/stub_search/recipes/default.rb +5 -0
  361. data/examples/stub_search/spec/default_spec.rb +27 -0
  362. data/examples/subscribes/recipes/chained.rb +10 -0
  363. data/examples/subscribes/recipes/default.rb +5 -0
  364. data/examples/subscribes/recipes/delayed.rb +5 -0
  365. data/examples/subscribes/recipes/immediately.rb +5 -0
  366. data/examples/subscribes/spec/chained_spec.rb +21 -0
  367. data/examples/subscribes/spec/default_spec.rb +17 -0
  368. data/examples/subscribes/spec/delayed_spec.rb +16 -0
  369. data/examples/subscribes/spec/immediately_spec.rb +16 -0
  370. data/examples/subversion/recipes/checkout.rb +13 -0
  371. data/examples/subversion/recipes/export.rb +13 -0
  372. data/examples/subversion/recipes/force_export.rb +13 -0
  373. data/examples/subversion/recipes/sync.rb +13 -0
  374. data/examples/subversion/spec/checkout_spec.rb +19 -0
  375. data/examples/subversion/spec/export_spec.rb +19 -0
  376. data/examples/subversion/spec/force_export_spec.rb +19 -0
  377. data/examples/subversion/spec/sync_spec.rb +23 -0
  378. data/examples/template/recipes/create.rb +15 -0
  379. data/examples/template/recipes/create_if_missing.rb +15 -0
  380. data/examples/template/recipes/delete.rb +15 -0
  381. data/examples/template/recipes/touch.rb +15 -0
  382. data/examples/template/spec/create_if_missing_spec.rb +28 -0
  383. data/examples/template/spec/create_spec.rb +32 -0
  384. data/examples/template/spec/delete_spec.rb +19 -0
  385. data/examples/template/spec/touch_spec.rb +19 -0
  386. data/examples/use_inline_resources/libraries/matchers.rb +5 -0
  387. data/examples/use_inline_resources/providers/lwrp.rb +7 -0
  388. data/examples/use_inline_resources/recipes/default.rb +1 -0
  389. data/examples/use_inline_resources/resources/lwrp.rb +4 -0
  390. data/examples/use_inline_resources/spec/default_spec.rb +15 -0
  391. data/examples/user/recipes/create.rb +13 -0
  392. data/examples/user/recipes/lock.rb +13 -0
  393. data/examples/user/recipes/manage.rb +13 -0
  394. data/examples/user/recipes/modify.rb +13 -0
  395. data/examples/user/recipes/remove.rb +13 -0
  396. data/examples/user/recipes/unlock.rb +13 -0
  397. data/examples/user/spec/create_spec.rb +23 -0
  398. data/examples/user/spec/lock_spec.rb +19 -0
  399. data/examples/user/spec/manage_spec.rb +19 -0
  400. data/examples/user/spec/modify_spec.rb +19 -0
  401. data/examples/user/spec/remove_spec.rb +19 -0
  402. data/examples/user/spec/unlock_spec.rb +19 -0
  403. data/examples/yum_package/recipes/install.rb +13 -0
  404. data/examples/yum_package/recipes/purge.rb +13 -0
  405. data/examples/yum_package/recipes/remove.rb +13 -0
  406. data/examples/yum_package/recipes/upgrade.rb +13 -0
  407. data/examples/yum_package/spec/install_spec.rb +23 -0
  408. data/examples/yum_package/spec/purge_spec.rb +19 -0
  409. data/examples/yum_package/spec/remove_spec.rb +19 -0
  410. data/examples/yum_package/spec/upgrade_spec.rb +19 -0
  411. data/features/apt_package.feature +14 -0
  412. data/features/attributes.feature +7 -0
  413. data/features/batch.feature +13 -0
  414. data/features/cached.feature +7 -0
  415. data/features/chef_gem.feature +14 -0
  416. data/features/compile_time.feature +7 -0
  417. data/features/cookbook_file.feature +13 -0
  418. data/features/cron.feature +11 -0
  419. data/features/custom_matcher.feature +11 -0
  420. data/features/deploy.feature +12 -0
  421. data/features/directory.feature +11 -0
  422. data/features/dpkg_package.feature +12 -0
  423. data/features/easy_install_package.feature +13 -0
  424. data/features/env.feature +12 -0
  425. data/features/erl_call.feature +10 -0
  426. data/features/execute.feature +10 -0
  427. data/features/expect_exception.feature +12 -0
  428. data/features/file.feature +13 -0
  429. data/features/freebsd_package.feature +11 -0
  430. data/features/gem_package.feature +14 -0
  431. data/features/git.feature +12 -0
  432. data/features/group.feature +13 -0
  433. data/features/guards.feature +10 -0
  434. data/features/heavy_provider_light_resource.feature +10 -0
  435. data/features/http_request.feature +15 -0
  436. data/features/ifconfig.feature +13 -0
  437. data/features/include_recipe.feature +10 -0
  438. data/features/inherits.feature +7 -0
  439. data/features/ips_package.feature +12 -0
  440. data/features/link.feature +12 -0
  441. data/features/log.feature +10 -0
  442. data/features/macports_package.feature +13 -0
  443. data/features/mdadm.feature +12 -0
  444. data/features/mount.feature +14 -0
  445. data/features/multiple_actions.feature +11 -0
  446. data/features/multiple_run_action.feature +7 -0
  447. data/features/notifications.feature +13 -0
  448. data/features/ohai.feature +10 -0
  449. data/features/package.feature +14 -0
  450. data/features/pacman_package.feature +13 -0
  451. data/features/portage_package.feature +13 -0
  452. data/features/powershell_script.feature +13 -0
  453. data/features/registry_key.feature +13 -0
  454. data/features/remote_directory.feature +12 -0
  455. data/features/remote_file.feature +13 -0
  456. data/features/render_file.feature +16 -0
  457. data/features/roles.feature +7 -0
  458. data/features/route.feature +11 -0
  459. data/features/rpm_package.feature +12 -0
  460. data/features/ruby_block.feature +10 -0
  461. data/features/script.feature +15 -0
  462. data/features/server.feature +21 -0
  463. data/features/service.feature +15 -0
  464. data/features/smartos_package.feature +16 -0
  465. data/features/solaris_package.feature +15 -0
  466. data/features/state_attrs.feature +11 -0
  467. data/features/step_definitions/background_steps.rb +4 -0
  468. data/features/step_into.feature +7 -0
  469. data/features/stub_command.feature +7 -0
  470. data/features/stub_data_bag.feature +7 -0
  471. data/features/stub_data_bag_item.feature +7 -0
  472. data/features/stub_node.feature +7 -0
  473. data/features/stub_search.feature +7 -0
  474. data/features/subscribes.feature +13 -0
  475. data/features/subversion.feature +13 -0
  476. data/features/support/env.rb +36 -0
  477. data/features/support/executor.rb +18 -0
  478. data/features/template.feature +13 -0
  479. data/features/use_inline_resources.feature +7 -0
  480. data/features/user.feature +15 -0
  481. data/features/yum_package.feature +13 -0
  482. data/gemfiles/chef-11.0.0.gemfile +5 -0
  483. data/gemfiles/chef-11.2.0.gemfile +5 -0
  484. data/gemfiles/chef-11.4.4.gemfile +5 -0
  485. data/gemfiles/chef-11.6.0.gemfile +5 -0
  486. data/gemfiles/chef-11.8.0.gemfile +5 -0
  487. data/gemfiles/chef-master.gemfile +5 -0
  488. data/lib/chefspec/api.rb +13 -11
  489. data/lib/chefspec/api/notifications.rb +3 -3
  490. data/lib/chefspec/api/subscriptions.rb +35 -0
  491. data/lib/chefspec/coverage.rb +40 -34
  492. data/lib/chefspec/expect_exception.rb +14 -13
  493. data/lib/chefspec/formatter.rb +8 -8
  494. data/lib/chefspec/matchers.rb +1 -0
  495. data/lib/chefspec/matchers/include_recipe_matcher.rb +19 -18
  496. data/lib/chefspec/matchers/notifications_matcher.rb +25 -24
  497. data/lib/chefspec/matchers/render_file_matcher.rb +32 -31
  498. data/lib/chefspec/matchers/resource_matcher.rb +64 -63
  499. data/lib/chefspec/matchers/state_attrs_matcher.rb +18 -17
  500. data/lib/chefspec/matchers/subscribes_matcher.rb +59 -0
  501. data/lib/chefspec/renderer.rb +82 -81
  502. data/lib/chefspec/runner.rb +66 -51
  503. data/lib/chefspec/server.rb +84 -39
  504. data/lib/chefspec/stubs/stub.rb +10 -9
  505. data/lib/chefspec/version.rb +1 -1
  506. data/spec/spec_helper.rb +8 -0
  507. data/spec/support/hash.rb +35 -0
  508. data/spec/unit/api_spec.rb +18 -0
  509. data/spec/unit/cacher_spec.rb +54 -0
  510. data/spec/unit/expect_exception_spec.rb +32 -0
  511. data/spec/unit/extensions/lwrp_base_spec.rb +89 -0
  512. data/spec/unit/macros_spec.rb +119 -0
  513. data/spec/unit/matchers/include_recipe_matcher_spec.rb +38 -0
  514. data/spec/unit/matchers/link_to_matcher_spec.rb +39 -0
  515. data/spec/unit/matchers/notifications_matcher_spec.rb +5 -0
  516. data/spec/unit/matchers/render_file_matcher_spec.rb +41 -0
  517. data/spec/unit/matchers/resource_matcher_spec.rb +5 -0
  518. data/spec/unit/matchers/state_attrs_matcher_spec.rb +64 -0
  519. data/spec/unit/matchers/subscribes_matcher_spec.rb +5 -0
  520. data/spec/unit/renderer_spec.rb +51 -0
  521. data/spec/unit/runner_spec.rb +125 -0
  522. data/spec/unit/stubs/command_registry_spec.rb +27 -0
  523. data/spec/unit/stubs/command_stub_spec.rb +61 -0
  524. data/spec/unit/stubs/data_bag_item_registry_spec.rb +39 -0
  525. data/spec/unit/stubs/data_bag_item_stub_spec.rb +36 -0
  526. data/spec/unit/stubs/data_bag_registry_spec.rb +39 -0
  527. data/spec/unit/stubs/data_bag_stub_spec.rb +35 -0
  528. data/spec/unit/stubs/registry_spec.rb +29 -0
  529. data/spec/unit/stubs/search_registry_spec.rb +39 -0
  530. data/spec/unit/stubs/search_stub_spec.rb +36 -0
  531. data/spec/unit/stubs/stub_spec.rb +64 -0
  532. metadata +618 -5
@@ -71,9 +71,9 @@ module ChefSpec::Matchers
71
71
  " to include :#{@expected_action}"
72
72
  end
73
73
  else
74
- %Q{expected "#{@resource_name}[#{@expected_identity}] with"} \
75
- " action :#{@expected_action} to be in Chef run. Other" \
76
- " #{@resource_name} resources:" \
74
+ %Q{expected "#{@resource_name}[#{@expected_identity}]"} \
75
+ " with action :#{@expected_action} to be in Chef run." \
76
+ " Other #{@resource_name} resources:" \
77
77
  "\n\n" \
78
78
  " " + similar_resources.map(&:to_s).join("\n ") + "\n "
79
79
  end
@@ -92,77 +92,78 @@ module ChefSpec::Matchers
92
92
  end
93
93
 
94
94
  private
95
- def unmatched_parameters
96
- return @_unmatched_parameters if @_unmatched_parameters
97
95
 
98
- @_unmatched_parameters = {}
96
+ def unmatched_parameters
97
+ return @_unmatched_parameters if @_unmatched_parameters
99
98
 
100
- params.each do |parameter, expected|
101
- unless matches_parameter?(parameter, expected)
102
- @_unmatched_parameters[parameter] = {
103
- expected: expected,
104
- actual: safe_send(parameter),
105
- }
106
- end
107
- end
108
-
109
- @_unmatched_parameters
110
- end
99
+ @_unmatched_parameters = {}
111
100
 
112
- def matches_parameter?(parameter, expected)
113
- # Chef 11+ stores the source parameter internally as an Array
114
- if parameter == :source
115
- Array(expected) == Array(safe_send(parameter))
116
- else
117
- expected === safe_send(parameter)
101
+ params.each do |parameter, expected|
102
+ unless matches_parameter?(parameter, expected)
103
+ @_unmatched_parameters[parameter] = {
104
+ expected: expected,
105
+ actual: safe_send(parameter),
106
+ }
118
107
  end
119
108
  end
120
109
 
121
- def correct_phase?
122
- if @compile_time
123
- resource.performed_action(@expected_action)[:compile_time]
124
- elsif @converge_time
125
- resource.performed_action(@expected_action)[:converge_time]
126
- else
127
- true
128
- end
129
- end
110
+ @_unmatched_parameters
111
+ end
130
112
 
131
- def safe_send(parameter)
132
- resource.send(parameter)
133
- rescue NoMethodError
134
- nil
113
+ def matches_parameter?(parameter, expected)
114
+ # Chef 11+ stores the source parameter internally as an Array
115
+ if parameter == :source
116
+ Array(expected) == Array(safe_send(parameter))
117
+ else
118
+ expected === safe_send(parameter)
135
119
  end
120
+ end
136
121
 
137
- #
138
- # Any other resources in the Chef run that have the same resource
139
- # type. Used by {failure_message} to be ultra helpful.
140
- #
141
- # @return [Array<Chef::Resource>]
142
- #
143
- def similar_resources
144
- @_similar_resources ||= @runner.find_resources(@resource_name)
122
+ def correct_phase?
123
+ if @compile_time
124
+ resource.performed_action(@expected_action)[:compile_time]
125
+ elsif @converge_time
126
+ resource.performed_action(@expected_action)[:converge_time]
127
+ else
128
+ true
145
129
  end
130
+ end
146
131
 
147
- #
148
- # Find the resource in the Chef run by the given class name and
149
- # resource identity/name.
150
- #
151
- # @see ChefSpec::Runner#find_resource
152
- #
153
- # @return [Chef::Resource, nil]
154
- #
155
- def resource
156
- @_resource ||= @runner.find_resource(@resource_name, @expected_identity)
157
- end
132
+ def safe_send(parameter)
133
+ resource.send(parameter)
134
+ rescue NoMethodError
135
+ nil
136
+ end
158
137
 
159
- #
160
- # The list of parameters passed to the {with} matcher.
161
- #
162
- # @return [Hash]
163
- #
164
- def params
165
- @_params ||= {}
166
- end
138
+ #
139
+ # Any other resources in the Chef run that have the same resource
140
+ # type. Used by {failure_message} to be ultra helpful.
141
+ #
142
+ # @return [Array<Chef::Resource>]
143
+ #
144
+ def similar_resources
145
+ @_similar_resources ||= @runner.find_resources(@resource_name)
146
+ end
147
+
148
+ #
149
+ # Find the resource in the Chef run by the given class name and
150
+ # resource identity/name.
151
+ #
152
+ # @see ChefSpec::Runner#find_resource
153
+ #
154
+ # @return [Chef::Resource, nil]
155
+ #
156
+ def resource
157
+ @_resource ||= @runner.find_resource(@resource_name, @expected_identity)
158
+ end
159
+
160
+ #
161
+ # The list of parameters passed to the {with} matcher.
162
+ #
163
+ # @return [Hash]
164
+ #
165
+ def params
166
+ @_params ||= {}
167
+ end
167
168
  end
168
169
  end
@@ -48,23 +48,24 @@ module ChefSpec::Matchers
48
48
  end
49
49
 
50
50
  private
51
- #
52
- # Determine if all the expected state attributes are present on the
53
- # given resource.
54
- #
55
- # @return [Boolean]
56
- #
57
- def matches_state_attrs?
58
- @expected_attrs == state_attrs
59
- end
60
51
 
61
- #
62
- # The list of state attributes declared on the given resource.
63
- #
64
- # @return [Array<Symbol>]
65
- #
66
- def state_attrs
67
- @resource.class.state_attrs.map(&:to_sym)
68
- end
52
+ #
53
+ # Determine if all the expected state attributes are present on the
54
+ # given resource.
55
+ #
56
+ # @return [Boolean]
57
+ #
58
+ def matches_state_attrs?
59
+ @expected_attrs == state_attrs
60
+ end
61
+
62
+ #
63
+ # The list of state attributes declared on the given resource.
64
+ #
65
+ # @return [Array<Symbol>]
66
+ #
67
+ def state_attrs
68
+ @resource.class.state_attrs.map(&:to_sym)
69
+ end
69
70
  end
70
71
  end
@@ -0,0 +1,59 @@
1
+ module ChefSpec::Matchers
2
+ class SubscribesMatcher
3
+ include ChefSpec::Normalize
4
+
5
+ def initialize(signature)
6
+ signature.match(/^([^\[]*)\[(.*)\]$/)
7
+ @expected_resource_type = $1
8
+ @expected_resource_name = $2
9
+ end
10
+
11
+ def matches?(resource)
12
+ @instance = ChefSpec::Matchers::NotificationsMatcher.new(resource.to_s)
13
+
14
+ if @action
15
+ @instance.to(@action)
16
+ end
17
+
18
+ if @immediately
19
+ @instance.immediately
20
+ end
21
+
22
+ if @delayed
23
+ @instance.delayed
24
+ end
25
+
26
+ if resource
27
+ runner = resource.run_context.node.runner
28
+ expected = runner.find_resource(@expected_resource_type, @expected_resource_name)
29
+
30
+ @instance.matches?(expected)
31
+ else
32
+ @instance.matches?(nil)
33
+ end
34
+ end
35
+
36
+ def on(action)
37
+ @action = action
38
+ self
39
+ end
40
+
41
+ def immediately
42
+ @immediately = true
43
+ self
44
+ end
45
+
46
+ def delayed
47
+ @delayed = true
48
+ self
49
+ end
50
+
51
+ def description
52
+ @instance.description
53
+ end
54
+
55
+ def failure_message_for_should
56
+ @instance.failure_message_for_should
57
+ end
58
+ end
59
+ end
@@ -49,96 +49,97 @@ module ChefSpec
49
49
  end
50
50
 
51
51
  private
52
- #
53
- # Compute the contents of a template using Chef's templating logic.
54
- #
55
- # @param [Chef::RunContext] chef_run
56
- # the run context for the node
57
- # @param [Chef::Provider::Template] template
58
- # the template resource
59
- #
60
- # @return [String]
61
- #
62
- def content_from_template(chef_run, template)
63
- cookbook_name = template.cookbook || template.cookbook_name
64
- template_location = cookbook_collection(chef_run.node)[cookbook_name].preferred_filename_on_disk_location(chef_run.node, :templates, template.source)
65
52
 
66
- if Chef::Mixin::Template.const_defined?(:TemplateContext) # Chef 11+
67
- template_context = Chef::Mixin::Template::TemplateContext.new([])
68
- template_context.update({
69
- :node => chef_run.node,
70
- :template_finder => template_finder(chef_run, cookbook_name),
71
- }.merge(template.variables))
72
- if template.respond_to?(:helper_modules) # Chef 11.4+
73
- template.helper_modules.each do |helper_module|
74
- template_context.extend(helper_module)
75
- end
76
- end
77
- template_context.render_template(template_location)
78
- else
79
- template.provider.new(template, chef_run.run_context).send(:render_with_context, template_location) do |file|
80
- File.read(file.path)
53
+ #
54
+ # Compute the contents of a template using Chef's templating logic.
55
+ #
56
+ # @param [Chef::RunContext] chef_run
57
+ # the run context for the node
58
+ # @param [Chef::Provider::Template] template
59
+ # the template resource
60
+ #
61
+ # @return [String]
62
+ #
63
+ def content_from_template(chef_run, template)
64
+ cookbook_name = template.cookbook || template.cookbook_name
65
+ template_location = cookbook_collection(chef_run.node)[cookbook_name].preferred_filename_on_disk_location(chef_run.node, :templates, template.source)
66
+
67
+ if Chef::Mixin::Template.const_defined?(:TemplateContext) # Chef 11+
68
+ template_context = Chef::Mixin::Template::TemplateContext.new([])
69
+ template_context.update({
70
+ :node => chef_run.node,
71
+ :template_finder => template_finder(chef_run, cookbook_name),
72
+ }.merge(template.variables))
73
+ if template.respond_to?(:helper_modules) # Chef 11.4+
74
+ template.helper_modules.each do |helper_module|
75
+ template_context.extend(helper_module)
81
76
  end
82
77
  end
78
+ template_context.render_template(template_location)
79
+ else
80
+ template.provider.new(template, chef_run.run_context).send(:render_with_context, template_location) do |file|
81
+ File.read(file.path)
82
+ end
83
83
  end
84
+ end
84
85
 
85
- #
86
- # Get the contents of a file resource.
87
- #
88
- # @param [Chef::RunContext] chef_run
89
- # the run context for the node
90
- # @param [Chef::Provider::File] file
91
- # the file resource
92
- #
93
- # @return [String]
94
- #
95
- def content_from_file(chef_run, file)
96
- file.content
97
- end
86
+ #
87
+ # Get the contents of a file resource.
88
+ #
89
+ # @param [Chef::RunContext] chef_run
90
+ # the run context for the node
91
+ # @param [Chef::Provider::File] file
92
+ # the file resource
93
+ #
94
+ # @return [String]
95
+ #
96
+ def content_from_file(chef_run, file)
97
+ file.content
98
+ end
98
99
 
99
- #
100
- # Get the contents of a cookbook file using Chef.
101
- #
102
- # @param [Chef::RunContext] chef_run
103
- # the run context for the node
104
- # @param [Chef::Provider::CookbookFile] cookbook_file
105
- # the file resource
106
- #
107
- def content_from_cookbook_file(chef_run, cookbook_file)
108
- cookbook_name = cookbook_file.cookbook || cookbook_file.cookbook_name
109
- cookbook = cookbook_collection(chef_run.node)[cookbook_name]
110
- File.read(cookbook.preferred_filename_on_disk_location(chef_run.node, :files, cookbook_file.source, cookbook_file.path))
111
- end
100
+ #
101
+ # Get the contents of a cookbook file using Chef.
102
+ #
103
+ # @param [Chef::RunContext] chef_run
104
+ # the run context for the node
105
+ # @param [Chef::Provider::CookbookFile] cookbook_file
106
+ # the file resource
107
+ #
108
+ def content_from_cookbook_file(chef_run, cookbook_file)
109
+ cookbook_name = cookbook_file.cookbook || cookbook_file.cookbook_name
110
+ cookbook = cookbook_collection(chef_run.node)[cookbook_name]
111
+ File.read(cookbook.preferred_filename_on_disk_location(chef_run.node, :files, cookbook_file.source, cookbook_file.path))
112
+ end
112
113
 
113
- # The cookbook collection for the current Chef run context. Handles
114
- # the differing cases between Chef 10 and Chef 11.
115
- #
116
- # @param [Chef::Node] node
117
- # the Chef node to get the cookbook collection from
118
- #
119
- # @return [Array<Chef::Cookbook>]
120
- def cookbook_collection(node)
121
- if node.respond_to?(:run_context)
122
- node.run_context.cookbook_collection # Chef 11+
123
- else
124
- node.cookbook_collection # Chef 10
125
- end
114
+ # The cookbook collection for the current Chef run context. Handles
115
+ # the differing cases between Chef 10 and Chef 11.
116
+ #
117
+ # @param [Chef::Node] node
118
+ # the Chef node to get the cookbook collection from
119
+ #
120
+ # @return [Array<Chef::Cookbook>]
121
+ def cookbook_collection(node)
122
+ if node.respond_to?(:run_context)
123
+ node.run_context.cookbook_collection # Chef 11+
124
+ else
125
+ node.cookbook_collection # Chef 10
126
126
  end
127
+ end
127
128
 
128
- # Return a new instance of the TemplateFinder if we are running on Chef 11.
129
- #
130
- # @param [Chef::RunContext] chef_run
131
- # the run context for the noe
132
- # @param [String] cookbook_name
133
- # the name of the cookbook
134
- #
135
- # @return [Chef::Provider::TemplateFinder, nil]
136
- def template_finder(chef_run, cookbook_name)
137
- if Chef::Provider.const_defined?(:TemplateFinder) # Chef 11+
138
- Chef::Provider::TemplateFinder.new(chef_run.run_context, cookbook_name, chef_run.node)
139
- else
140
- nil
141
- end
129
+ # Return a new instance of the TemplateFinder if we are running on Chef 11.
130
+ #
131
+ # @param [Chef::RunContext] chef_run
132
+ # the run context for the noe
133
+ # @param [String] cookbook_name
134
+ # the name of the cookbook
135
+ #
136
+ # @return [Chef::Provider::TemplateFinder, nil]
137
+ def template_finder(chef_run, cookbook_name)
138
+ if Chef::Provider.const_defined?(:TemplateFinder) # Chef 11+
139
+ Chef::Provider::TemplateFinder.new(chef_run.run_context, cookbook_name, chef_run.node)
140
+ else
141
+ nil
142
142
  end
143
+ end
143
144
  end
144
145
  end
@@ -257,66 +257,81 @@ module ChefSpec
257
257
  end
258
258
 
259
259
  private
260
- #
261
- # The inferred path from the calling spec.
262
- #
263
- # @param [Array<String>] kaller
264
- # the calling trace
265
- #
266
- # @return [String]
267
- #
268
- def calling_cookbook_path(kaller)
269
- calling_spec = kaller.find { |line| line =~ /\/spec/ }
270
- raise Error::CookbookPathNotFound if calling_spec.nil?
271
-
272
- bits = calling_spec.split(':', 2).first.split(File::SEPARATOR)
273
- spec_dir = bits.index('spec') || 0
274
-
275
- File.expand_path(File.join(bits.slice(0, spec_dir), '..'))
276
- end
277
260
 
278
- #
279
- # The inferred path to roles.
280
- #
281
- # @return [String, nil]
282
- #
283
- def default_role_path
284
- Pathname.new(Dir.pwd).ascend do |path|
285
- possible = File.join(path, 'roles')
286
- return possible if File.exists?(possible)
287
- end
261
+ #
262
+ # The inferred path from the calling spec.
263
+ #
264
+ # @param [Array<String>] kaller
265
+ # the calling trace
266
+ #
267
+ # @return [String]
268
+ #
269
+ def calling_cookbook_path(kaller)
270
+ calling_spec = kaller.find { |line| line =~ /\/spec/ }
271
+ raise Error::CookbookPathNotFound if calling_spec.nil?
288
272
 
289
- nil
290
- end
273
+ bits = calling_spec.split(':', 2).first.split(File::SEPARATOR)
274
+ spec_dir = bits.index('spec') || 0
275
+
276
+ File.expand_path(File.join(bits.slice(0, spec_dir), '..'))
277
+ end
291
278
 
292
- #
293
- # The +Chef::Client+ for this runner.
294
- #
295
- # @return [Chef::Runner]
296
- #
297
- def client
298
- return @client if @client
299
-
300
- @client = Chef::Client.new
301
- @client.ohai.data = Mash.from_hash(Fauxhai.mock(options).data)
302
- @client.load_node
303
- @client.build_node
304
- @client.save_updated_node
305
- @client
279
+ #
280
+ # The inferred path to roles.
281
+ #
282
+ # @return [String, nil]
283
+ #
284
+ def default_role_path
285
+ Pathname.new(Dir.pwd).ascend do |path|
286
+ possible = File.join(path, 'roles')
287
+ return possible if File.exists?(possible)
306
288
  end
307
289
 
308
- #
309
- # We really need a way to just expand the run_list, but that's done by
310
- # +Chef::Client#build_node+. However, that same method also resets the
311
- # automatic attributes, making it impossible to mock them. So we are
312
- # stuck +instance_eval+ing against the client and manually expanding
313
- # the mode object.
314
- #
315
- def expand_run_list!
290
+ nil
291
+ end
292
+
293
+ #
294
+ # The +Chef::Client+ for this runner.
295
+ #
296
+ # @return [Chef::Runner]
297
+ #
298
+ def client
299
+ return @client if @client
300
+
301
+ @client = Chef::Client.new
302
+ @client.ohai.data = Mash.from_hash(Fauxhai.mock(options).data)
303
+ @client.load_node
304
+ @client.build_node
305
+ @client.save_updated_node
306
+ @client
307
+ end
308
+
309
+ #
310
+ # We really need a way to just expand the run_list, but that's done by
311
+ # +Chef::Client#build_node+. However, that same method also resets the
312
+ # automatic attributes, making it impossible to mock them. So we are
313
+ # stuck +instance_eval+ing against the client and manually expanding
314
+ # the mode object.
315
+ #
316
+ # @todo Remove in Chef 13
317
+ #
318
+ def expand_run_list!
319
+ # Recent versions of Chef include a method to expand the +run_list+,
320
+ # setting the correct instance variables on the policy builder. We use
321
+ # that, unless the user is running an older version of Chef which
322
+ # doesn't include this method.
323
+ if client.respond_to?(:expanded_run_list)
324
+ client.expanded_run_list
325
+ else
326
+ # Sadly, if we got this far, it means that the current Chef version
327
+ # does not include the +expanded_run_list+ method, so we need to
328
+ # manually expand the +run_list+. The following code has been known
329
+ # to make kittens cry, so please read with extreme caution.
316
330
  client.instance_eval do
317
331
  @run_list_expansion = expand_run_list
318
332
  @expanded_run_list_with_versions = @run_list_expansion.recipes.with_version_constraints_strings
319
333
  end
320
334
  end
335
+ end
321
336
  end
322
337
  end