state_machines 0.0.2 → 0.1.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 (465) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +10 -4
  3. data/Changelog.md +0 -0
  4. data/Gemfile +6 -0
  5. data/LICENSE.txt +1 -1
  6. data/README.md +6 -8
  7. data/Rakefile +9 -6
  8. data/Testing.md +0 -0
  9. data/lib/state_machines/assertions.rb +5 -5
  10. data/lib/state_machines/error.rb +2 -1
  11. data/lib/state_machines/integrations.rb +18 -11
  12. data/lib/state_machines/machine.rb +8 -12
  13. data/lib/state_machines/version.rb +1 -1
  14. data/state_machines.gemspec +6 -8
  15. data/test/files/integrations/event_on_failure_integration.rb +10 -0
  16. data/test/files/integrations/vehicle.rb +7 -0
  17. data/{spec/internal/app → test/files}/models/auto_shop.rb +0 -0
  18. data/{spec/internal/app → test/files}/models/car.rb +2 -0
  19. data/{spec/internal/app → test/files}/models/model_base.rb +0 -0
  20. data/{spec/internal/app → test/files}/models/motorcycle.rb +2 -0
  21. data/{spec/internal/app → test/files}/models/traffic_light.rb +2 -2
  22. data/{spec/internal/app → test/files}/models/vehicle.rb +9 -5
  23. data/test/files/node.rb +5 -0
  24. data/test/files/switch.rb +15 -0
  25. data/test/functional/auto_shop_available_test.rb +20 -0
  26. data/test/functional/auto_shop_busy_test.rb +25 -0
  27. data/test/functional/car_backing_up_test.rb +45 -0
  28. data/test/functional/car_test.rb +49 -0
  29. data/test/functional/motorcycle_test.rb +46 -0
  30. data/test/functional/traffic_light_caution_test.rb +17 -0
  31. data/test/functional/traffic_light_proceed_test.rb +17 -0
  32. data/test/functional/traffic_light_stop_test.rb +26 -0
  33. data/test/functional/vehicle_first_gear_test.rb +42 -0
  34. data/test/functional/vehicle_idling_test.rb +59 -0
  35. data/test/functional/vehicle_locked_test.rb +29 -0
  36. data/test/functional/vehicle_parked_test.rb +53 -0
  37. data/test/functional/vehicle_repaired_test.rb +20 -0
  38. data/test/functional/vehicle_second_gear_test.rb +42 -0
  39. data/test/functional/vehicle_stalled_test.rb +65 -0
  40. data/test/functional/vehicle_test.rb +20 -0
  41. data/test/functional/vehicle_third_gear_test.rb +42 -0
  42. data/test/functional/vehicle_unsaved_test.rb +181 -0
  43. data/test/functional/vehicle_with_event_attributes_test.rb +30 -0
  44. data/test/functional/vehicle_with_parallel_events_test.rb +36 -0
  45. data/test/test_helper.rb +15 -0
  46. data/test/unit/assertions/assert_exclusive_keys_test.rb +22 -0
  47. data/test/unit/assertions/assert_valid_key_test.rb +12 -0
  48. data/test/unit/branch/branch_test.rb +28 -0
  49. data/test/unit/branch/branch_with_conflicting_conditionals_test.rb +27 -0
  50. data/test/unit/branch/branch_with_conflicting_from_requirements_test.rb +8 -0
  51. data/test/unit/branch/branch_with_conflicting_on_requirements_test.rb +8 -0
  52. data/test/unit/branch/branch_with_conflicting_to_requirements_test.rb +8 -0
  53. data/test/unit/branch/branch_with_different_requirements_test.rb +41 -0
  54. data/test/unit/branch/branch_with_except_from_matcher_requirement_test.rb +8 -0
  55. data/test/unit/branch/branch_with_except_from_requirement_test.rb +36 -0
  56. data/test/unit/branch/branch_with_except_on_matcher_requirement_test.rb +8 -0
  57. data/test/unit/branch/branch_with_except_on_requirement_test.rb +36 -0
  58. data/test/unit/branch/branch_with_except_to_matcher_requirement_test.rb +8 -0
  59. data/test/unit/branch/branch_with_except_to_requirement_test.rb +36 -0
  60. data/test/unit/branch/branch_with_from_matcher_requirement_test.rb +20 -0
  61. data/test/unit/branch/branch_with_from_requirement_test.rb +45 -0
  62. data/test/unit/branch/branch_with_if_conditional_test.rb +27 -0
  63. data/test/unit/branch/branch_with_implicit_and_explicit_requirements_test.rb +23 -0
  64. data/test/unit/branch/branch_with_implicit_from_requirement_matcher_test.rb +20 -0
  65. data/test/unit/branch/branch_with_implicit_requirement_test.rb +20 -0
  66. data/test/unit/branch/branch_with_implicit_to_requirement_matcher_test.rb +16 -0
  67. data/test/unit/branch/branch_with_multiple_except_from_requirements_test.rb +20 -0
  68. data/test/unit/branch/branch_with_multiple_except_on_requirements_test.rb +16 -0
  69. data/test/unit/branch/branch_with_multiple_except_to_requirements_test.rb +20 -0
  70. data/test/unit/branch/branch_with_multiple_from_requirements_test.rb +16 -0
  71. data/test/unit/branch/branch_with_multiple_if_conditionals_test.rb +20 -0
  72. data/test/unit/branch/branch_with_multiple_implicit_requirements_test.rb +53 -0
  73. data/test/unit/branch/branch_with_multiple_on_requirements_test.rb +20 -0
  74. data/test/unit/branch/branch_with_multiple_to_requirements_test.rb +20 -0
  75. data/test/unit/branch/branch_with_multiple_unless_conditionals_test.rb +20 -0
  76. data/test/unit/branch/branch_with_nil_requirements_test.rb +28 -0
  77. data/test/unit/branch/branch_with_no_requirements_test.rb +36 -0
  78. data/test/unit/branch/branch_with_on_matcher_requirement_test.rb +16 -0
  79. data/test/unit/branch/branch_with_on_requirement_test.rb +45 -0
  80. data/test/unit/branch/branch_with_to_matcher_requirement_test.rb +20 -0
  81. data/test/unit/branch/branch_with_to_requirement_test.rb +45 -0
  82. data/test/unit/branch/branch_with_unless_conditional_test.rb +27 -0
  83. data/test/unit/branch/branch_without_guards_test.rb +27 -0
  84. data/test/unit/callback/callback_by_default_test.rb +25 -0
  85. data/test/unit/callback/callback_test.rb +53 -0
  86. data/test/unit/callback/callback_with_application_bound_object_test.rb +23 -0
  87. data/test/unit/callback/callback_with_application_terminator_test.rb +24 -0
  88. data/test/unit/callback/callback_with_arguments_test.rb +14 -0
  89. data/test/unit/callback/callback_with_around_type_and_arguments_test.rb +25 -0
  90. data/test/unit/callback/callback_with_around_type_and_block_test.rb +44 -0
  91. data/test/unit/callback/callback_with_around_type_and_bound_method_test.rb +23 -0
  92. data/test/unit/callback/callback_with_around_type_and_multiple_methods_test.rb +93 -0
  93. data/test/unit/callback/callback_with_around_type_and_terminator_test.rb +17 -0
  94. data/test/unit/callback/callback_with_block_test.rb +20 -0
  95. data/test/unit/callback/callback_with_bound_method_and_arguments_test.rb +28 -0
  96. data/test/unit/callback/callback_with_bound_method_test.rb +35 -0
  97. data/test/unit/callback/callback_with_do_method_test.rb +18 -0
  98. data/test/unit/callback/callback_with_explicit_requirements_test.rb +32 -0
  99. data/test/unit/callback/callback_with_if_condition_test.rb +17 -0
  100. data/test/unit/callback/callback_with_implicit_requirements_test.rb +32 -0
  101. data/test/unit/callback/callback_with_method_argument_test.rb +18 -0
  102. data/test/unit/callback/callback_with_mixed_methods_test.rb +31 -0
  103. data/test/unit/callback/callback_with_multiple_bound_methods_test.rb +21 -0
  104. data/test/unit/callback/callback_with_multiple_do_methods_test.rb +29 -0
  105. data/test/unit/callback/callback_with_multiple_method_arguments_test.rb +29 -0
  106. data/test/unit/callback/callback_with_terminator_test.rb +22 -0
  107. data/test/unit/callback/callback_with_unbound_method_test.rb +14 -0
  108. data/test/unit/callback/callback_with_unless_condition_test.rb +17 -0
  109. data/test/unit/callback/callback_without_arguments_test.rb +14 -0
  110. data/test/unit/callback/callback_without_terminator_test.rb +12 -0
  111. data/test/unit/error/error_by_default_test.rb +21 -0
  112. data/test/unit/error/error_with_message_test.rb +23 -0
  113. data/test/unit/eval_helper/eval_helpers_base_test.rb +8 -0
  114. data/test/unit/eval_helper/eval_helpers_proc_block_and_explicit_arguments_test.rb +14 -0
  115. data/test/unit/eval_helper/eval_helpers_proc_block_and_implicit_arguments_test.rb +14 -0
  116. data/test/unit/eval_helper/eval_helpers_proc_test.rb +13 -0
  117. data/test/unit/eval_helper/eval_helpers_proc_with_arguments_test.rb +13 -0
  118. data/test/unit/eval_helper/eval_helpers_proc_with_block_test.rb +13 -0
  119. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_arguments_test.rb +18 -0
  120. data/test/unit/eval_helper/eval_helpers_proc_with_block_without_object_test.rb +14 -0
  121. data/test/unit/eval_helper/eval_helpers_proc_without_arguments_test.rb +19 -0
  122. data/test/unit/eval_helper/eval_helpers_string_test.rb +25 -0
  123. data/test/unit/eval_helper/eval_helpers_string_with_block_test.rb +12 -0
  124. data/test/unit/eval_helper/eval_helpers_symbol_method_missing_test.rb +20 -0
  125. data/test/unit/eval_helper/eval_helpers_symbol_private_test.rb +17 -0
  126. data/test/unit/eval_helper/eval_helpers_symbol_protected_test.rb +17 -0
  127. data/test/unit/eval_helper/eval_helpers_symbol_tainted_method_test.rb +18 -0
  128. data/test/unit/eval_helper/eval_helpers_symbol_test.rb +16 -0
  129. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_and_block_test.rb +16 -0
  130. data/test/unit/eval_helper/eval_helpers_symbol_with_arguments_test.rb +16 -0
  131. data/test/unit/eval_helper/eval_helpers_symbol_with_block_test.rb +16 -0
  132. data/test/unit/eval_helper/eval_helpers_test.rb +13 -0
  133. data/test/unit/event/event_after_being_copied_test.rb +17 -0
  134. data/test/unit/event/event_by_default_test.rb +60 -0
  135. data/test/unit/event/event_context_test.rb +16 -0
  136. data/test/unit/event/event_on_failure_test.rb +44 -0
  137. data/test/unit/event/event_test.rb +34 -0
  138. data/test/unit/event/event_transitions_test.rb +62 -0
  139. data/test/unit/event/event_with_conflicting_helpers_after_definition_test.rb +79 -0
  140. data/test/unit/event/event_with_conflicting_helpers_before_definition_test.rb +58 -0
  141. data/test/unit/event/event_with_conflicting_machine_test.rb +48 -0
  142. data/test/unit/event/event_with_dynamic_human_name_test.rb +26 -0
  143. data/test/unit/event/event_with_human_name_test.rb +13 -0
  144. data/test/unit/event/event_with_invalid_current_state_test.rb +30 -0
  145. data/test/unit/event/event_with_machine_action_test.rb +33 -0
  146. data/test/unit/event/event_with_marshalling_test.rb +47 -0
  147. data/test/unit/event/event_with_matching_disabled_transitions_test.rb +115 -0
  148. data/test/unit/event/event_with_matching_enabled_transitions_test.rb +75 -0
  149. data/test/unit/event/event_with_multiple_transitions_test.rb +61 -0
  150. data/test/unit/event/event_with_namespace_test.rb +34 -0
  151. data/test/unit/event/event_with_transition_with_blacklisted_to_state_test.rb +60 -0
  152. data/test/unit/event/event_with_transition_with_loopback_state_test.rb +36 -0
  153. data/test/unit/event/event_with_transition_with_nil_to_state_test.rb +36 -0
  154. data/test/unit/event/event_with_transition_with_whitelisted_to_state_test.rb +51 -0
  155. data/test/unit/event/event_with_transition_without_to_state_test.rb +36 -0
  156. data/test/unit/event/event_with_transitions_test.rb +32 -0
  157. data/test/unit/event/event_without_matching_transitions_test.rb +41 -0
  158. data/test/unit/event/event_without_transitions_test.rb +28 -0
  159. data/{spec/state_machines/invalid_event_spec.rb → test/unit/event/invalid_event_test.rb} +8 -7
  160. data/test/unit/event_collection/event_collection_attribute_with_machine_action_test.rb +62 -0
  161. data/test/unit/event_collection/event_collection_attribute_with_namespaced_machine_test.rb +36 -0
  162. data/test/unit/event_collection/event_collection_by_default_test.rb +26 -0
  163. data/test/unit/event_collection/event_collection_test.rb +39 -0
  164. data/test/unit/event_collection/event_collection_with_custom_machine_attribute_test.rb +31 -0
  165. data/test/unit/event_collection/event_collection_with_events_with_transitions_test.rb +76 -0
  166. data/test/unit/event_collection/event_collection_with_multiple_events_test.rb +27 -0
  167. data/test/unit/event_collection/event_collection_with_validations_test.rb +75 -0
  168. data/test/unit/event_collection/event_collection_without_machine_action_test.rb +18 -0
  169. data/test/unit/event_collection/event_string_collection_test.rb +31 -0
  170. data/test/unit/helper_module_test.rb +17 -0
  171. data/test/unit/integrations/integration_finder_test.rb +16 -0
  172. data/test/unit/integrations/integration_matcher_test.rb +27 -0
  173. data/test/unit/invalid_transition/invalid_parallel_transition_test.rb +18 -0
  174. data/test/unit/invalid_transition/invalid_transition_test.rb +47 -0
  175. data/test/unit/invalid_transition/invalid_transition_with_integration_test.rb +47 -0
  176. data/test/unit/invalid_transition/invalid_transition_with_namespace_test.rb +32 -0
  177. data/test/unit/machine/machine_after_being_copied_test.rb +62 -0
  178. data/test/unit/machine/machine_after_changing_initial_state.rb +28 -0
  179. data/test/unit/machine/machine_after_changing_owner_class_test.rb +31 -0
  180. data/test/unit/machine/machine_by_default_test.rb +160 -0
  181. data/test/unit/machine/machine_finder_custom_options_test.rb +17 -0
  182. data/test/unit/machine/machine_finder_with_existing_machine_on_superclass_test.rb +86 -0
  183. data/test/unit/machine/machine_finder_with_existing_on_same_class_test.rb +23 -0
  184. data/test/unit/machine/machine_finder_without_existing_machine_test.rb +25 -0
  185. data/test/unit/machine/machine_persistence_test.rb +52 -0
  186. data/test/unit/machine/machine_state_initialization_test.rb +56 -0
  187. data/test/unit/machine/machine_test.rb +30 -0
  188. data/test/unit/machine/machine_with_action_already_overridden_test.rb +23 -0
  189. data/test/unit/machine/machine_with_action_defined_in_class_test.rb +37 -0
  190. data/test/unit/machine/machine_with_action_defined_in_included_module_test.rb +46 -0
  191. data/test/unit/machine/machine_with_action_defined_in_superclass_test.rb +43 -0
  192. data/test/unit/machine/machine_with_action_undefined_test.rb +33 -0
  193. data/test/unit/machine/machine_with_cached_state_test.rb +20 -0
  194. data/test/unit/machine/machine_with_class_helpers_test.rb +179 -0
  195. data/test/unit/machine/machine_with_conflicting_helpers_after_definition_test.rb +243 -0
  196. data/test/unit/machine/machine_with_conflicting_helpers_before_definition_test.rb +175 -0
  197. data/test/unit/machine/machine_with_custom_action_test.rb +11 -0
  198. data/test/unit/machine/machine_with_custom_attribute_test.rb +103 -0
  199. data/test/unit/machine/machine_with_custom_initialize_test.rb +24 -0
  200. data/test/unit/machine/machine_with_custom_integration_test.rb +69 -0
  201. data/test/unit/machine/machine_with_custom_invalidation_test.rb +40 -0
  202. data/test/unit/machine/machine_with_custom_name_test.rb +57 -0
  203. data/test/unit/machine/machine_with_custom_plural_test.rb +53 -0
  204. data/test/unit/machine/machine_with_dynamic_initial_state_test.rb +65 -0
  205. data/test/unit/machine/machine_with_event_matchers_test.rb +41 -0
  206. data/test/unit/machine/machine_with_events_test.rb +52 -0
  207. data/test/unit/machine/machine_with_events_with_custom_human_names_test.rb +18 -0
  208. data/test/unit/machine/machine_with_events_with_transitions_test.rb +37 -0
  209. data/test/unit/machine/machine_with_existing_event_test.rb +17 -0
  210. data/test/unit/machine/machine_with_existing_machines_on_owner_class_test.rb +20 -0
  211. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_class_test.rb +71 -0
  212. data/test/unit/machine/machine_with_existing_machines_with_same_attributes_on_owner_subclass_test.rb +31 -0
  213. data/test/unit/machine/machine_with_existing_state_test.rb +27 -0
  214. data/test/unit/machine/machine_with_failure_callbacks_test.rb +48 -0
  215. data/test/unit/machine/machine_with_helpers_test.rb +14 -0
  216. data/test/unit/machine/machine_with_initial_state_with_value_and_owner_default.rb +25 -0
  217. data/test/unit/machine/machine_with_initialize_and_super_test.rb +17 -0
  218. data/test/unit/machine/machine_with_initialize_arguments_and_block_test.rb +31 -0
  219. data/test/unit/machine/machine_with_initialize_without_super_test.rb +17 -0
  220. data/test/unit/machine/machine_with_instance_helpers_test.rb +179 -0
  221. data/test/unit/machine/machine_with_integration_test.rb +71 -0
  222. data/test/unit/machine/machine_with_multiple_events_test.rb +32 -0
  223. data/test/unit/machine/machine_with_namespace_test.rb +48 -0
  224. data/test/unit/machine/machine_with_nil_action_test.rb +24 -0
  225. data/test/unit/machine/machine_with_other_states.rb +22 -0
  226. data/test/unit/machine/machine_with_owner_subclass_test.rb +18 -0
  227. data/test/unit/machine/machine_with_paths_test.rb +25 -0
  228. data/test/unit/machine/machine_with_private_action_test.rb +43 -0
  229. data/test/unit/machine/machine_with_state_matchers_test.rb +41 -0
  230. data/test/unit/machine/machine_with_state_with_matchers_test.rb +19 -0
  231. data/test/unit/machine/machine_with_states_test.rb +55 -0
  232. data/test/unit/machine/machine_with_states_with_behaviors_test.rb +23 -0
  233. data/test/unit/machine/machine_with_states_with_custom_human_names_test.rb +18 -0
  234. data/test/unit/machine/machine_with_states_with_custom_values_test.rb +21 -0
  235. data/test/unit/machine/machine_with_states_with_runtime_dependencies_test.rb +19 -0
  236. data/test/unit/machine/machine_with_static_initial_state_test.rb +60 -0
  237. data/test/unit/machine/machine_with_superclass_conflicting_helpers_after_definition_test.rb +36 -0
  238. data/test/unit/machine/machine_with_transition_callbacks_test.rb +144 -0
  239. data/test/unit/machine/machine_with_transitions_test.rb +87 -0
  240. data/test/unit/machine/machine_without_initialization_test.rb +31 -0
  241. data/test/unit/machine/machine_without_initialize_test.rb +14 -0
  242. data/test/unit/machine/machine_without_integration_test.rb +31 -0
  243. data/test/unit/machine_collection/machine_collection_by_default_test.rb +11 -0
  244. data/test/unit/machine_collection/machine_collection_fire_attributes_with_validations_test.rb +72 -0
  245. data/test/unit/machine_collection/machine_collection_fire_test.rb +80 -0
  246. data/test/unit/machine_collection/machine_collection_fire_with_transactions_test.rb +54 -0
  247. data/test/unit/machine_collection/machine_collection_fire_with_validations_test.rb +76 -0
  248. data/test/unit/machine_collection/machine_collection_state_initialization_test.rb +101 -0
  249. data/test/unit/machine_collection/machine_collection_transitions_with_blank_events_test.rb +25 -0
  250. data/test/unit/machine_collection/machine_collection_transitions_with_custom_options_test.rb +20 -0
  251. data/test/unit/machine_collection/machine_collection_transitions_with_different_actions_test.rb +26 -0
  252. data/test/unit/machine_collection/machine_collection_transitions_with_exisiting_transitions_test.rb +25 -0
  253. data/test/unit/machine_collection/machine_collection_transitions_with_invalid_events_test.rb +25 -0
  254. data/test/unit/machine_collection/machine_collection_transitions_with_same_actions_test.rb +31 -0
  255. data/test/unit/machine_collection/machine_collection_transitions_with_transition_test.rb +26 -0
  256. data/test/unit/machine_collection/machine_collection_transitions_without_events_test.rb +25 -0
  257. data/test/unit/machine_collection/machine_collection_transitions_without_transition_test.rb +27 -0
  258. data/test/unit/matcher/all_matcher_test.rb +29 -0
  259. data/test/unit/matcher/blacklist_matcher_test.rb +30 -0
  260. data/test/unit/matcher/loopback_matcher_test.rb +27 -0
  261. data/test/unit/matcher/matcher_by_default_test.rb +15 -0
  262. data/test/unit/matcher/matcher_with_multiple_values_test.rb +15 -0
  263. data/test/unit/matcher/matcher_with_value_test.rb +15 -0
  264. data/test/unit/matcher/whitelist_matcher_test.rb +30 -0
  265. data/test/unit/matcher_helpers/matcher_helpers_all_test.rb +14 -0
  266. data/test/unit/matcher_helpers/matcher_helpers_any_test.rb +14 -0
  267. data/test/unit/matcher_helpers/matcher_helpers_same_test.rb +13 -0
  268. data/test/unit/node_collection/node_collection_after_being_copied_test/n.rb +46 -0
  269. data/test/unit/node_collection/node_collection_after_update_test/n.rb +36 -0
  270. data/test/unit/node_collection/node_collection_by_default_test.rb +22 -0
  271. data/test/unit/node_collection/node_collection_test.rb +23 -0
  272. data/test/unit/node_collection/node_collection_with_indices_test/n.rb +42 -0
  273. data/test/unit/node_collection/node_collection_with_matcher_contexts_test.rb +25 -0
  274. data/test/unit/node_collection/node_collection_with_nodes_test/n.rb +46 -0
  275. data/test/unit/node_collection/node_collection_with_numeric_index_test/n.rb +24 -0
  276. data/test/unit/node_collection/node_collection_with_postdefined_contexts_test/n.rb +22 -0
  277. data/test/unit/node_collection/node_collection_with_predefined_contexts_test/n.rb +23 -0
  278. data/test/unit/node_collection/node_collection_with_string_index_test/n.rb +20 -0
  279. data/test/unit/node_collection/node_collection_with_symbol_index_test/n.rb +20 -0
  280. data/test/unit/node_collection/node_collection_without_indices_test/n.rb +30 -0
  281. data/test/unit/path/path_by_default_test.rb +54 -0
  282. data/test/unit/path/path_test.rb +14 -0
  283. data/test/unit/path/path_with_available_transitions_after_reaching_target_test.rb +40 -0
  284. data/test/unit/path/path_with_available_transitions_test.rb +54 -0
  285. data/test/unit/path/path_with_deep_target_reached_test.rb +50 -0
  286. data/test/unit/path/path_with_deep_target_test.rb +40 -0
  287. data/test/unit/path/path_with_duplicates_test.rb +32 -0
  288. data/test/unit/path/path_with_encountered_transitions_test.rb +34 -0
  289. data/test/unit/path/path_with_guarded_transitions_test.rb +42 -0
  290. data/test/unit/path/path_with_reached_target_test.rb +35 -0
  291. data/test/unit/path/path_with_transitions_test.rb +54 -0
  292. data/test/unit/path/path_with_unreached_target_test.rb +31 -0
  293. data/test/unit/path/path_without_transitions_test.rb +24 -0
  294. data/test/unit/path_collection/path_collection_by_default_test.rb +46 -0
  295. data/test/unit/path_collection/path_collection_test.rb +24 -0
  296. data/test/unit/path_collection/path_collection_with_deep_paths_test.rb +43 -0
  297. data/test/unit/path_collection/path_collection_with_duplicate_nodes_test.rb +31 -0
  298. data/test/unit/path_collection/path_collection_with_from_state_test.rb +27 -0
  299. data/test/unit/path_collection/path_collection_with_paths_test.rb +47 -0
  300. data/test/unit/path_collection/path_collection_with_to_state_test.rb +29 -0
  301. data/test/unit/path_collection/path_with_guarded_paths_test.rb +25 -0
  302. data/test/unit/state/state_after_being_copied_test.rb +19 -0
  303. data/test/unit/state/state_by_default_test.rb +41 -0
  304. data/test/unit/state/state_final_test.rb +28 -0
  305. data/test/unit/state/state_initial_test.rb +13 -0
  306. data/test/unit/state/state_not_final_test.rb +32 -0
  307. data/test/unit/state/state_not_initial_test.rb +13 -0
  308. data/test/unit/state/state_test.rb +44 -0
  309. data/test/unit/state/state_with_cached_lambda_value_test.rb +29 -0
  310. data/test/unit/state/state_with_conflicting_helpers_after_definition_test.rb +38 -0
  311. data/test/unit/state/state_with_conflicting_helpers_before_definition_test.rb +29 -0
  312. data/test/unit/state/state_with_conflicting_machine_name_test.rb +20 -0
  313. data/test/unit/state/state_with_conflicting_machine_test.rb +37 -0
  314. data/test/unit/state/state_with_context_test.rb +60 -0
  315. data/test/unit/state/state_with_dynamic_human_name_test.rb +25 -0
  316. data/test/unit/state/state_with_existing_context_method_test.rb +24 -0
  317. data/test/unit/state/state_with_human_name_test.rb +13 -0
  318. data/test/unit/state/state_with_integer_value_test.rb +32 -0
  319. data/test/unit/state/state_with_invalid_method_call_test.rb +21 -0
  320. data/test/unit/state/state_with_lambda_value_test.rb +37 -0
  321. data/test/unit/state/state_with_matcher_test.rb +18 -0
  322. data/test/unit/state/state_with_multiple_contexts_test.rb +57 -0
  323. data/test/unit/state/state_with_name_test.rb +43 -0
  324. data/test/unit/state/state_with_namespace_test.rb +22 -0
  325. data/test/unit/state/state_with_nil_value_test.rb +35 -0
  326. data/test/unit/state/state_with_redefined_context_method_test.rb +45 -0
  327. data/test/unit/state/state_with_symbolic_value_test.rb +32 -0
  328. data/test/unit/state/state_with_valid_inherited_method_call_for_current_state_test.rb +40 -0
  329. data/test/unit/state/state_with_valid_method_call_for_current_state_test.rb +33 -0
  330. data/test/unit/state/state_with_valid_method_call_for_different_state_test.rb +41 -0
  331. data/test/unit/state/state_without_cached_lambda_value_test.rb +25 -0
  332. data/test/unit/state/state_without_name_test.rb +39 -0
  333. data/test/unit/state_collection/state_collection_by_default_test.rb +21 -0
  334. data/test/unit/state_collection/state_collection_string_test.rb +35 -0
  335. data/test/unit/state_collection/state_collection_test.rb +74 -0
  336. data/test/unit/state_collection/state_collection_with_custom_state_values_test.rb +29 -0
  337. data/test/unit/state_collection/state_collection_with_event_transitions_test.rb +39 -0
  338. data/test/unit/state_collection/state_collection_with_initial_state_test.rb +40 -0
  339. data/test/unit/state_collection/state_collection_with_namespace_test.rb +21 -0
  340. data/test/unit/state_collection/state_collection_with_state_behaviors_test.rb +40 -0
  341. data/test/unit/state_collection/state_collection_with_state_matchers_test.rb +29 -0
  342. data/test/unit/state_collection/state_collection_with_transition_callbacks_test.rb +40 -0
  343. data/test/unit/state_context/state_context_proxy_test.rb +26 -0
  344. data/test/unit/state_context/state_context_proxy_with_if_and_unless_conditions_test.rb +42 -0
  345. data/test/unit/state_context/state_context_proxy_with_if_condition_test.rb +64 -0
  346. data/test/unit/state_context/state_context_proxy_with_multiple_if_conditions_test.rb +32 -0
  347. data/test/unit/state_context/state_context_proxy_with_multiple_unless_conditions_test.rb +32 -0
  348. data/test/unit/state_context/state_context_proxy_with_unless_condition_test.rb +64 -0
  349. data/test/unit/state_context/state_context_proxy_without_conditions_test.rb +31 -0
  350. data/test/unit/state_context/state_context_test.rb +28 -0
  351. data/test/unit/state_context/state_context_transition_test.rb +104 -0
  352. data/test/unit/state_context/state_context_with_matching_transition_test.rb +27 -0
  353. data/test/unit/state_machine/state_machine_by_default_test.rb +12 -0
  354. data/test/unit/state_machine/state_machine_test.rb +20 -0
  355. data/test/unit/transition/transition_after_being_performed_test.rb +48 -0
  356. data/test/unit/transition/transition_after_being_persisted_test.rb +46 -0
  357. data/test/unit/transition/transition_after_being_rolled_back_test.rb +35 -0
  358. data/test/unit/transition/transition_equality_test.rb +52 -0
  359. data/test/unit/transition/transition_loopback_test.rb +18 -0
  360. data/test/unit/transition/transition_test.rb +96 -0
  361. data/test/unit/transition/transition_transient_test.rb +20 -0
  362. data/test/unit/transition/transition_with_action_test.rb +27 -0
  363. data/test/unit/transition/transition_with_after_callbacks_skipped_test.rb +127 -0
  364. data/test/unit/transition/transition_with_after_callbacks_test.rb +93 -0
  365. data/test/unit/transition/transition_with_around_callbacks_test.rb +141 -0
  366. data/test/unit/transition/transition_with_before_callbacks_skipped_test.rb +30 -0
  367. data/test/unit/transition/transition_with_before_callbacks_test.rb +104 -0
  368. data/test/unit/transition/transition_with_custom_machine_attribute_test.rb +28 -0
  369. data/test/unit/transition/transition_with_different_states_test.rb +18 -0
  370. data/test/unit/transition/transition_with_dynamic_to_value_test.rb +19 -0
  371. data/test/unit/transition/transition_with_failure_callbacks_test.rb +84 -0
  372. data/test/unit/transition/transition_with_invalid_nodes_test.rb +29 -0
  373. data/test/unit/transition/transition_with_mixed_callbacks_test.rb +105 -0
  374. data/test/unit/transition/transition_with_multiple_after_callbacks_test.rb +40 -0
  375. data/test/unit/transition/transition_with_multiple_around_callbacks_test.rb +114 -0
  376. data/test/unit/transition/transition_with_multiple_before_callbacks_test.rb +40 -0
  377. data/test/unit/transition/transition_with_multiple_failure_callbacks_test.rb +40 -0
  378. data/test/unit/transition/transition_with_namespace_test.rb +47 -0
  379. data/test/unit/transition/transition_with_perform_arguments_test.rb +35 -0
  380. data/test/unit/transition/transition_with_transactions_test.rb +42 -0
  381. data/test/unit/transition/transition_without_callbacks_test.rb +33 -0
  382. data/test/unit/transition/transition_without_reading_state_test.rb +22 -0
  383. data/test/unit/transition/transition_without_running_action_test.rb +47 -0
  384. data/test/unit/transition_collection/attribute_transition_collection_by_default_test.rb +23 -0
  385. data/test/unit/transition_collection/attribute_transition_collection_marshalling_test.rb +64 -0
  386. data/test/unit/transition_collection/attribute_transition_collection_with_action_error_test.rb +44 -0
  387. data/test/unit/transition_collection/attribute_transition_collection_with_action_failed_test.rb +44 -0
  388. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_error_test.rb +32 -0
  389. data/test/unit/transition_collection/attribute_transition_collection_with_after_callback_halt_test.rb +33 -0
  390. data/test/unit/transition_collection/attribute_transition_collection_with_around_after_yield_callback_error_test.rb +32 -0
  391. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_error_test.rb +32 -0
  392. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_after_yield_halt_test.rb +33 -0
  393. data/test/unit/transition_collection/attribute_transition_collection_with_around_callback_before_yield_halt_test.rb +33 -0
  394. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_error_test.rb +32 -0
  395. data/test/unit/transition_collection/attribute_transition_collection_with_before_callback_halt_test.rb +33 -0
  396. data/test/unit/transition_collection/attribute_transition_collection_with_callbacks_test.rb +68 -0
  397. data/test/unit/transition_collection/attribute_transition_collection_with_event_transitions_test.rb +41 -0
  398. data/test/unit/transition_collection/attribute_transition_collection_with_events_test.rb +44 -0
  399. data/test/unit/transition_collection/attribute_transition_collection_with_skipped_after_callbacks_test.rb +42 -0
  400. data/test/unit/transition_collection/transition_collection_by_default_test.rb +23 -0
  401. data/test/unit/transition_collection/transition_collection_empty_with_block_test.rb +23 -0
  402. data/test/unit/transition_collection/transition_collection_empty_without_block_test.rb +12 -0
  403. data/test/unit/transition_collection/transition_collection_invalid_test.rb +21 -0
  404. data/test/unit/transition_collection/transition_collection_partial_invalid_test.rb +69 -0
  405. data/test/unit/transition_collection/transition_collection_test.rb +26 -0
  406. data/test/unit/transition_collection/transition_collection_valid_test.rb +57 -0
  407. data/test/unit/transition_collection/transition_collection_with_action_error_test.rb +66 -0
  408. data/test/unit/transition_collection/transition_collection_with_action_failed_test.rb +60 -0
  409. data/test/unit/transition_collection/transition_collection_with_action_hook_and_block_test.rb +17 -0
  410. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_action_test.rb +17 -0
  411. data/test/unit/transition_collection/transition_collection_with_action_hook_and_skipped_after_callbacks_test.rb +37 -0
  412. data/test/unit/transition_collection/transition_collection_with_action_hook_base_test.rb +34 -0
  413. data/test/unit/transition_collection/transition_collection_with_action_hook_error_test.rb +29 -0
  414. data/test/unit/transition_collection/transition_collection_with_action_hook_invalid_test.rb +17 -0
  415. data/test/unit/transition_collection/transition_collection_with_action_hook_multiple_test.rb +79 -0
  416. data/test/unit/transition_collection/transition_collection_with_action_hook_test.rb +45 -0
  417. data/test/unit/transition_collection/transition_collection_with_action_hook_with_different_actions_test.rb +48 -0
  418. data/test/unit/transition_collection/transition_collection_with_action_hook_with_nil_action_test.rb +42 -0
  419. data/test/unit/transition_collection/transition_collection_with_after_callback_halt_test.rb +51 -0
  420. data/test/unit/transition_collection/transition_collection_with_before_callback_halt_test.rb +47 -0
  421. data/test/unit/transition_collection/transition_collection_with_block_test.rb +46 -0
  422. data/test/unit/transition_collection/transition_collection_with_callbacks_test.rb +135 -0
  423. data/test/unit/transition_collection/transition_collection_with_different_actions_test.rb +189 -0
  424. data/test/unit/transition_collection/transition_collection_with_duplicate_actions_test.rb +48 -0
  425. data/test/unit/transition_collection/transition_collection_with_empty_actions_test.rb +41 -0
  426. data/test/unit/transition_collection/transition_collection_with_mixed_actions_test.rb +41 -0
  427. data/test/unit/transition_collection/transition_collection_with_skipped_actions_and_block_test.rb +34 -0
  428. data/test/unit/transition_collection/transition_collection_with_skipped_actions_test.rb +69 -0
  429. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_and_around_callbacks_test.rb +53 -0
  430. data/test/unit/transition_collection/transition_collection_with_skipped_after_callbacks_test.rb +34 -0
  431. data/test/unit/transition_collection/transition_collection_with_transactions_test.rb +65 -0
  432. data/test/unit/transition_collection/transition_collection_without_transactions_test.rb +29 -0
  433. metadata +888 -101
  434. data/spec/models/auto_shop_spec.rb +0 -41
  435. data/spec/models/car_spec.rb +0 -90
  436. data/spec/models/motorcycle_spec.rb +0 -44
  437. data/spec/models/traffic_light_spec.rb +0 -56
  438. data/spec/models/vehicle_spec.rb +0 -580
  439. data/spec/spec_helper.rb +0 -7
  440. data/spec/state_machines/assertions_spec.rb +0 -31
  441. data/spec/state_machines/branch_spec.rb +0 -827
  442. data/spec/state_machines/callbacks_spec.rb +0 -706
  443. data/spec/state_machines/errors_spec.rb +0 -1
  444. data/spec/state_machines/event_collection_spec.rb +0 -401
  445. data/spec/state_machines/event_spec.rb +0 -1140
  446. data/spec/state_machines/helper_spec.rb +0 -14
  447. data/spec/state_machines/integration_base_spec.rb +0 -12
  448. data/spec/state_machines/integration_spec.rb +0 -132
  449. data/spec/state_machines/invalid_parallel_transition_spec.rb +0 -18
  450. data/spec/state_machines/invalid_transition_spec.rb +0 -114
  451. data/spec/state_machines/machine_collection_spec.rb +0 -606
  452. data/spec/state_machines/machine_spec.rb +0 -3176
  453. data/spec/state_machines/matcher_helpers_spec.rb +0 -39
  454. data/spec/state_machines/matcher_spec.rb +0 -157
  455. data/spec/state_machines/node_collection_spec.rb +0 -371
  456. data/spec/state_machines/path_collection_spec.rb +0 -271
  457. data/spec/state_machines/path_spec.rb +0 -488
  458. data/spec/state_machines/state_collection_spec.rb +0 -352
  459. data/spec/state_machines/state_context_spec.rb +0 -442
  460. data/spec/state_machines/state_machine_spec.rb +0 -29
  461. data/spec/state_machines/state_spec.rb +0 -970
  462. data/spec/state_machines/transition_collection_spec.rb +0 -2199
  463. data/spec/state_machines/transition_spec.rb +0 -1558
  464. data/spec/support/migration_helpers.rb +0 -59
  465. data/spec/support/models.rb +0 -6
@@ -0,0 +1,52 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionEqualityTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass)
8
+ @machine.state :parked, :idling
9
+ @machine.event :ignite
10
+
11
+ @object = @klass.new
12
+ @object.state = 'parked'
13
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
14
+ end
15
+
16
+ def test_should_be_equal_with_same_properties
17
+ transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
18
+ assert_equal transition, @transition
19
+ end
20
+
21
+ def test_should_not_be_equal_with_different_machines
22
+ machine = StateMachines::Machine.new(@klass, :status, namespace: :other)
23
+ machine.state :parked, :idling
24
+ machine.event :ignite
25
+ transition = StateMachines::Transition.new(@object, machine, :ignite, :parked, :idling)
26
+
27
+ refute_equal transition, @transition
28
+ end
29
+
30
+ def test_should_not_be_equal_with_different_objects
31
+ transition = StateMachines::Transition.new(@klass.new, @machine, :ignite, :parked, :idling)
32
+ refute_equal transition, @transition
33
+ end
34
+
35
+ def test_should_not_be_equal_with_different_event_names
36
+ @machine.event :park
37
+ transition = StateMachines::Transition.new(@object, @machine, :park, :parked, :idling)
38
+ refute_equal transition, @transition
39
+ end
40
+
41
+ def test_should_not_be_equal_with_different_from_state_names
42
+ @machine.state :first_gear
43
+ transition = StateMachines::Transition.new(@object, @machine, :ignite, :first_gear, :idling)
44
+ refute_equal transition, @transition
45
+ end
46
+
47
+ def test_should_not_be_equal_with_different_to_state_names
48
+ @machine.state :first_gear
49
+ transition = StateMachines::Transition.new(@object, @machine, :ignite, :idling, :first_gear)
50
+ refute_equal transition, @transition
51
+ end
52
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionLoopbackTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @machine.state :parked
8
+ @machine.event :park
9
+
10
+ @object = @klass.new
11
+ @object.state = 'parked'
12
+ @transition = StateMachines::Transition.new(@object, @machine, :park, :parked, :parked)
13
+ end
14
+
15
+ def test_should_be_loopback
16
+ assert @transition.loopback?
17
+ end
18
+ end
@@ -0,0 +1,96 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ @machine = StateMachines::Machine.new(@klass)
7
+ @machine.state :parked, :idling
8
+ @machine.event :ignite
9
+
10
+ @object = @klass.new
11
+ @object.state = 'parked'
12
+
13
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
14
+ end
15
+
16
+ def test_should_have_an_object
17
+ assert_equal @object, @transition.object
18
+ end
19
+
20
+ def test_should_have_a_machine
21
+ assert_equal @machine, @transition.machine
22
+ end
23
+
24
+ def test_should_have_an_event
25
+ assert_equal :ignite, @transition.event
26
+ end
27
+
28
+ def test_should_have_a_qualified_event
29
+ assert_equal :ignite, @transition.qualified_event
30
+ end
31
+
32
+ def test_should_have_a_human_event
33
+ assert_equal 'ignite', @transition.human_event
34
+ end
35
+
36
+ def test_should_have_a_from_value
37
+ assert_equal 'parked', @transition.from
38
+ end
39
+
40
+ def test_should_have_a_from_name
41
+ assert_equal :parked, @transition.from_name
42
+ end
43
+
44
+ def test_should_have_a_qualified_from_name
45
+ assert_equal :parked, @transition.qualified_from_name
46
+ end
47
+
48
+ def test_should_have_a_human_from_name
49
+ assert_equal 'parked', @transition.human_from_name
50
+ end
51
+
52
+ def test_should_have_a_to_value
53
+ assert_equal 'idling', @transition.to
54
+ end
55
+
56
+ def test_should_have_a_to_name
57
+ assert_equal :idling, @transition.to_name
58
+ end
59
+
60
+ def test_should_have_a_qualified_to_name
61
+ assert_equal :idling, @transition.qualified_to_name
62
+ end
63
+
64
+ def test_should_have_a_human_to_name
65
+ assert_equal 'idling', @transition.human_to_name
66
+ end
67
+
68
+ def test_should_have_an_attribute
69
+ assert_equal :state, @transition.attribute
70
+ end
71
+
72
+ def test_should_not_have_an_action
73
+ assert_nil @transition.action
74
+ end
75
+
76
+ def test_should_not_be_transient
77
+ assert_equal false, @transition.transient?
78
+ end
79
+
80
+ def test_should_generate_attributes
81
+ expected = { object: @object, attribute: :state, event: :ignite, from: 'parked', to: 'idling' }
82
+ assert_equal expected, @transition.attributes
83
+ end
84
+
85
+ def test_should_have_empty_args
86
+ assert_equal [], @transition.args
87
+ end
88
+
89
+ def test_should_not_have_a_result
90
+ assert_nil @transition.result
91
+ end
92
+
93
+ def test_should_use_pretty_inspect
94
+ assert_equal '#<StateMachines::Transition attribute=:state event=:ignite from="parked" from_name=:parked to="idling" to_name=:idling>', @transition.inspect
95
+ end
96
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionTransientTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass)
8
+ @machine.state :parked, :idling
9
+ @machine.event :ignite
10
+
11
+ @object = @klass.new
12
+ @object.state = 'parked'
13
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
14
+ @transition.transient = true
15
+ end
16
+
17
+ def test_should_be_transient
18
+ assert @transition.transient?
19
+ end
20
+ end
@@ -0,0 +1,27 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionWithActionTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new do
6
+ def save
7
+ end
8
+ end
9
+
10
+ @machine = StateMachines::Machine.new(@klass, action: :save)
11
+ @machine.state :parked, :idling
12
+ @machine.event :ignite
13
+
14
+ @object = @klass.new
15
+ @object.state = 'parked'
16
+
17
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
18
+ end
19
+
20
+ def test_should_have_an_action
21
+ assert_equal :save, @transition.action
22
+ end
23
+
24
+ def test_should_not_have_a_result
25
+ assert_nil @transition.result
26
+ end
27
+ end
@@ -0,0 +1,127 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionWithAfterCallbacksSkippedTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass)
8
+ @machine.state :parked, :idling
9
+ @machine.event :ignite
10
+
11
+ @object = @klass.new
12
+ @object.state = 'parked'
13
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
14
+ end
15
+
16
+ def test_should_run_before_callbacks
17
+ @machine.before_transition { @run = true }
18
+
19
+ assert_equal true, @transition.run_callbacks(after: false)
20
+ assert @run
21
+ end
22
+
23
+ def test_should_not_run_after_callbacks
24
+ @run = false
25
+ @machine.after_transition { @run = true }
26
+
27
+ assert_equal true, @transition.run_callbacks(after: false)
28
+ refute @run
29
+ end
30
+
31
+ if StateMachines::Transition.pause_supported?
32
+ def test_should_run_around_callbacks_before_yield
33
+ @machine.around_transition { |block| @run = true; block.call }
34
+
35
+ assert_equal true, @transition.run_callbacks(after: false)
36
+ assert @run
37
+ end
38
+
39
+ def test_should_not_run_around_callbacks_after_yield
40
+ @run = false
41
+ @machine.around_transition { |block| block.call; @run = true }
42
+
43
+ assert_equal true, @transition.run_callbacks(after: false)
44
+ refute @run
45
+ end
46
+
47
+ def test_should_continue_around_transition_execution_on_second_call
48
+ @callbacks = []
49
+ @machine.around_transition { |block| @callbacks << :before_around_1; block.call; @callbacks << :after_around_1 }
50
+ @machine.around_transition { |block| @callbacks << :before_around_2; block.call; @callbacks << :after_around_2 }
51
+ @machine.after_transition { @callbacks << :after }
52
+
53
+ assert_equal true, @transition.run_callbacks(after: false)
54
+ assert_equal [:before_around_1, :before_around_2], @callbacks
55
+
56
+ assert_equal true, @transition.run_callbacks
57
+ assert_equal [:before_around_1, :before_around_2, :after_around_2, :after_around_1, :after], @callbacks
58
+ end
59
+
60
+ def test_should_not_run_further_callbacks_if_halted_during_continue_around_transition
61
+ @callbacks = []
62
+ @machine.around_transition { |block| @callbacks << :before_around_1; block.call; @callbacks << :after_around_1 }
63
+ @machine.around_transition { |block| @callbacks << :before_around_2; block.call; @callbacks << :after_around_2; throw :halt }
64
+ @machine.after_transition { @callbacks << :after }
65
+
66
+ assert_equal true, @transition.run_callbacks(after: false)
67
+ assert_equal [:before_around_1, :before_around_2], @callbacks
68
+
69
+ assert_equal true, @transition.run_callbacks
70
+ assert_equal [:before_around_1, :before_around_2, :after_around_2], @callbacks
71
+ end
72
+
73
+ def test_should_not_be_able_to_continue_twice
74
+ @count = 0
75
+ @machine.around_transition { |block| block.call; @count += 1 }
76
+ @machine.after_transition { @count += 1 }
77
+
78
+ @transition.run_callbacks(after: false)
79
+
80
+ 2.times do
81
+ assert_equal true, @transition.run_callbacks
82
+ assert_equal 2, @count
83
+ end
84
+ end
85
+
86
+ def test_should_not_be_able_to_continue_again_after_halted
87
+ @count = 0
88
+ @machine.around_transition { |block| block.call; @count += 1; throw :halt }
89
+ @machine.after_transition { @count += 1 }
90
+
91
+ @transition.run_callbacks(after: false)
92
+
93
+ 2.times do
94
+ assert_equal true, @transition.run_callbacks
95
+ assert_equal 1, @count
96
+ end
97
+ end
98
+
99
+ def test_should_have_access_to_result_after_continued
100
+ @machine.around_transition { |block| @around_before_result = @transition.result; block.call; @around_after_result = @transition.result }
101
+ @machine.after_transition { @after_result = @transition.result }
102
+
103
+ @transition.run_callbacks(after: false)
104
+ @transition.run_callbacks { { result: 1 } }
105
+
106
+ assert_nil @around_before_result
107
+ assert_equal 1, @around_after_result
108
+ assert_equal 1, @after_result
109
+ end
110
+
111
+ def test_should_raise_exceptions_during_around_callbacks_after_yield_in_second_execution
112
+ @machine.around_transition { |block| block.call; fail ArgumentError }
113
+
114
+ @transition.run_callbacks(after: false)
115
+ assert_raises(ArgumentError) { @transition.run_callbacks }
116
+ end
117
+ else
118
+ def test_should_raise_exception_on_second_call
119
+ @callbacks = []
120
+ @machine.around_transition { |block| @callbacks << :before_around_1; block.call; @callbacks << :after_around_1 }
121
+ @machine.around_transition { |block| @callbacks << :before_around_2; block.call; @callbacks << :after_around_2 }
122
+ @machine.after_transition { @callbacks << :after }
123
+
124
+ assert_raises(ArgumentError) { @transition.run_callbacks(after: false) }
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,93 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionWithAfterCallbacksTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass)
8
+ @machine.state :parked, :idling
9
+ @machine.event :ignite
10
+
11
+ @object = @klass.new
12
+ @object.state = 'parked'
13
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
14
+ end
15
+
16
+ def test_should_run_after_callbacks
17
+ @machine.after_transition { |_object| @run = true }
18
+ result = @transition.run_callbacks
19
+
20
+ assert_equal true, result
21
+ assert_equal true, @run
22
+ end
23
+
24
+ def test_should_only_run_those_that_match_transition_context
25
+ @count = 0
26
+ callback = lambda { @count += 1 }
27
+
28
+ @machine.after_transition from: :parked, to: :idling, on: :park, do: callback
29
+ @machine.after_transition from: :parked, to: :parked, on: :park, do: callback
30
+ @machine.after_transition from: :parked, to: :idling, on: :ignite, do: callback
31
+ @machine.after_transition from: :idling, to: :idling, on: :park, do: callback
32
+ @transition.run_callbacks
33
+
34
+ assert_equal 1, @count
35
+ end
36
+
37
+ def test_should_not_run_if_not_successful
38
+ @run = false
39
+ @machine.after_transition { |_object| @run = true }
40
+ @transition.run_callbacks { { success: false } }
41
+ refute @run
42
+ end
43
+
44
+ def test_should_run_if_successful
45
+ @machine.after_transition { |_object| @run = true }
46
+ @transition.run_callbacks { { success: true } }
47
+ assert @run
48
+ end
49
+
50
+ def test_should_pass_transition_as_argument
51
+ @machine.after_transition { |*args| @args = args }
52
+
53
+ @transition.run_callbacks
54
+ assert_equal [@object, @transition], @args
55
+ end
56
+
57
+ def test_should_catch_halts
58
+ @machine.after_transition { throw :halt }
59
+
60
+ result = @transition.run_callbacks
61
+ assert_equal true, result
62
+ end
63
+
64
+ def test_should_not_catch_exceptions
65
+ @machine.after_transition { fail ArgumentError }
66
+ assert_raises(ArgumentError) { @transition.run_callbacks }
67
+ end
68
+
69
+ def test_should_not_be_able_to_run_twice
70
+ @count = 0
71
+ @machine.after_transition { @count += 1 }
72
+ @transition.run_callbacks
73
+ @transition.run_callbacks
74
+ assert_equal 1, @count
75
+ end
76
+
77
+ def test_should_not_be_able_to_run_twice_if_halted
78
+ @count = 0
79
+ @machine.after_transition { @count += 1; throw :halt }
80
+ @transition.run_callbacks
81
+ @transition.run_callbacks
82
+ assert_equal 1, @count
83
+ end
84
+
85
+ def test_should_be_able_to_run_again_after_resetting
86
+ @count = 0
87
+ @machine.after_transition { @count += 1 }
88
+ @transition.run_callbacks
89
+ @transition.reset
90
+ @transition.run_callbacks
91
+ assert_equal 2, @count
92
+ end
93
+ end
@@ -0,0 +1,141 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionWithAroundCallbacksTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass)
8
+ @machine.state :parked, :idling
9
+ @machine.event :ignite
10
+
11
+ @object = @klass.new
12
+ @object.state = 'parked'
13
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
14
+ end
15
+
16
+ def test_should_run_around_callbacks
17
+ @machine.around_transition { |_object, _transition, block| @run_before = true; block.call; @run_after = true }
18
+ result = @transition.run_callbacks
19
+
20
+ assert_equal true, result
21
+ assert_equal true, @run_before
22
+ assert_equal true, @run_after
23
+ end
24
+
25
+ def test_should_only_run_those_that_match_transition_context
26
+ @count = 0
27
+ callback = lambda { |_object, _transition, block| @count += 1; block.call }
28
+
29
+ @machine.around_transition from: :parked, to: :idling, on: :park, do: callback
30
+ @machine.around_transition from: :parked, to: :parked, on: :park, do: callback
31
+ @machine.around_transition from: :parked, to: :idling, on: :ignite, do: callback
32
+ @machine.around_transition from: :idling, to: :idling, on: :park, do: callback
33
+ @transition.run_callbacks
34
+
35
+ assert_equal 1, @count
36
+ end
37
+
38
+ def test_should_pass_transition_as_argument
39
+ @machine.around_transition { |*args| block = args.pop; @args = args; block.call }
40
+ @transition.run_callbacks
41
+
42
+ assert_equal [@object, @transition], @args
43
+ end
44
+
45
+ def test_should_run_block_between_callback
46
+ @callbacks = []
47
+ @machine.around_transition { |block| @callbacks << :before; block.call; @callbacks << :after }
48
+ @transition.run_callbacks { @callbacks << :within; { success: true } }
49
+
50
+ assert_equal [:before, :within, :after], @callbacks
51
+ end
52
+
53
+ def test_should_have_access_to_result_after_yield
54
+ @machine.around_transition { |block| @before_result = @transition.result; block.call; @after_result = @transition.result }
55
+ @transition.run_callbacks { { result: 1, success: true } }
56
+
57
+ assert_nil @before_result
58
+ assert_equal 1, @after_result
59
+ end
60
+
61
+ def test_should_catch_before_yield_halts
62
+ @machine.around_transition { throw :halt }
63
+
64
+ result = @transition.run_callbacks
65
+ assert_equal false, result
66
+ end
67
+
68
+ def test_should_catch_after_yield_halts
69
+ @machine.around_transition { |block| block.call; throw :halt }
70
+
71
+ result = @transition.run_callbacks
72
+ assert_equal true, result
73
+ end
74
+
75
+ def test_should_not_catch_before_yield
76
+ @machine.around_transition { fail ArgumentError }
77
+ assert_raises(ArgumentError) { @transition.run_callbacks }
78
+ end
79
+
80
+ def test_should_not_catch_after_yield
81
+ @machine.around_transition { |block| block.call; fail ArgumentError }
82
+ assert_raises(ArgumentError) { @transition.run_callbacks }
83
+ end
84
+
85
+ def test_should_fail_if_not_yielded
86
+ @machine.around_transition {}
87
+
88
+ result = @transition.run_callbacks
89
+ assert_equal false, result
90
+ end
91
+
92
+ def test_should_not_be_able_to_run_twice
93
+ @before_count = 0
94
+ @after_count = 0
95
+ @machine.around_transition { |block| @before_count += 1; block.call; @after_count += 1 }
96
+ @transition.run_callbacks
97
+ @transition.run_callbacks
98
+ assert_equal 1, @before_count
99
+ assert_equal 1, @after_count
100
+ end
101
+
102
+ def test_should_be_able_to_run_again_after_resetting
103
+ @before_count = 0
104
+ @after_count = 0
105
+ @machine.around_transition { |block| @before_count += 1; block.call; @after_count += 1 }
106
+ @transition.run_callbacks
107
+ @transition.reset
108
+ @transition.run_callbacks
109
+ assert_equal 2, @before_count
110
+ assert_equal 2, @after_count
111
+ end
112
+
113
+ def test_should_succeed_if_block_result_is_false
114
+ @machine.around_transition { |block| @before_run = true; block.call; @after_run = true }
115
+ assert_equal true, @transition.run_callbacks { { success: true, result: false } }
116
+ assert @before_run
117
+ assert @after_run
118
+ end
119
+
120
+ def test_should_succeed_if_block_result_is_true
121
+ @machine.around_transition { |block| @before_run = true; block.call; @after_run = true }
122
+ assert_equal true, @transition.run_callbacks { { success: true, result: true } }
123
+ assert @before_run
124
+ assert @after_run
125
+ end
126
+
127
+ def test_should_only_run_before_if_block_success_is_false
128
+ @after_run = false
129
+ @machine.around_transition { |block| @before_run = true; block.call; @after_run = true }
130
+ assert_equal true, @transition.run_callbacks { { success: false } }
131
+ assert @before_run
132
+ refute @after_run
133
+ end
134
+
135
+ def test_should_succeed_if_block_success_is_false
136
+ @machine.around_transition { |block| @before_run = true; block.call; @after_run = true }
137
+ assert_equal true, @transition.run_callbacks { { success: true } }
138
+ assert @before_run
139
+ assert @after_run
140
+ end
141
+ end
@@ -0,0 +1,30 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionWithBeforeCallbacksSkippedTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass)
8
+ @machine.state :parked, :idling
9
+ @machine.event :ignite
10
+
11
+ @object = @klass.new
12
+ @object.state = 'parked'
13
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
14
+ end
15
+
16
+ def test_should_not_run_before_callbacks
17
+ @run = false
18
+ @machine.before_transition { @run = true }
19
+
20
+ assert_equal false, @transition.run_callbacks(before: false)
21
+ refute @run
22
+ end
23
+
24
+ def test_should_run_failure_callbacks
25
+ @machine.after_failure { @run = true }
26
+
27
+ assert_equal false, @transition.run_callbacks(before: false)
28
+ assert @run
29
+ end
30
+ end