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,189 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionCollectionWithDifferentActionsTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new do
6
+ attr_reader :actions
7
+
8
+ def save_state
9
+ (@actions ||= []) << :save_state
10
+ :save_state
11
+ end
12
+
13
+ def save_status
14
+ (@actions ||= []) << :save_status
15
+ :save_status
16
+ end
17
+ end
18
+
19
+ @state = StateMachines::Machine.new(@klass, initial: :parked, action: :save_state)
20
+ @state.state :idling
21
+ @state.event :ignite
22
+
23
+ @status = StateMachines::Machine.new(@klass, :status, initial: :first_gear, action: :save_status)
24
+ @status.state :second_gear
25
+ @status.event :shift_up
26
+
27
+ @object = @klass.new
28
+
29
+ @transitions = StateMachines::TransitionCollection.new([
30
+ @state_transition = StateMachines::Transition.new(@object, @state, :ignite, :parked, :idling),
31
+ @status_transition = StateMachines::Transition.new(@object, @status, :shift_up, :first_gear, :second_gear)
32
+ ])
33
+ end
34
+
35
+ def test_should_succeed
36
+ assert_equal true, @transitions.perform
37
+ end
38
+
39
+ def test_should_persist_states
40
+ @transitions.perform
41
+ assert_equal 'idling', @object.state
42
+ assert_equal 'second_gear', @object.status
43
+ end
44
+
45
+ def test_should_run_actions_in_order
46
+ @transitions.perform
47
+ assert_equal [:save_state, :save_status], @object.actions
48
+ end
49
+
50
+ def test_should_store_results_in_transitions
51
+ @transitions.perform
52
+ assert_equal :save_state, @state_transition.result
53
+ assert_equal :save_status, @status_transition.result
54
+ end
55
+
56
+ def test_should_not_halt_if_action_fails_for_first_transition
57
+ @klass.class_eval do
58
+ remove_method :save_state
59
+
60
+ def save_state
61
+ (@actions ||= []) << :save_state
62
+ false
63
+ end
64
+ end
65
+
66
+ assert_equal false, @transitions.perform
67
+ assert_equal [:save_state, :save_status], @object.actions
68
+ end
69
+
70
+ def test_should_halt_if_action_fails_for_second_transition
71
+ @klass.class_eval do
72
+ remove_method :save_status
73
+
74
+ def save_status
75
+ (@actions ||= []) << :save_status
76
+ false
77
+ end
78
+ end
79
+
80
+ assert_equal false, @transitions.perform
81
+ assert_equal [:save_state, :save_status], @object.actions
82
+ end
83
+
84
+ def test_should_rollback_if_action_errors_for_first_transition
85
+ @klass.class_eval do
86
+ remove_method :save_state
87
+
88
+ def save_state
89
+ fail ArgumentError
90
+ end
91
+ end
92
+
93
+ begin
94
+ ; @transitions.perform
95
+ rescue
96
+ end
97
+ assert_equal 'parked', @object.state
98
+ assert_equal 'first_gear', @object.status
99
+ end
100
+
101
+ def test_should_rollback_if_action_errors_for_second_transition
102
+ @klass.class_eval do
103
+ remove_method :save_status
104
+
105
+ def save_status
106
+ fail ArgumentError
107
+ end
108
+ end
109
+
110
+ begin
111
+ ; @transitions.perform
112
+ rescue
113
+ end
114
+ assert_equal 'parked', @object.state
115
+ assert_equal 'first_gear', @object.status
116
+ end
117
+
118
+ def test_should_not_run_after_callbacks_if_action_fails_for_first_transition
119
+ @klass.class_eval do
120
+ remove_method :save_state
121
+
122
+ def save_state
123
+ false
124
+ end
125
+ end
126
+
127
+ @callbacks = []
128
+ @state.after_transition { @callbacks << :state_after }
129
+ @state.around_transition { |block| block.call; @callbacks << :state_around }
130
+ @status.after_transition { @callbacks << :status_after }
131
+ @status.around_transition { |block| block.call; @callbacks << :status_around }
132
+
133
+ @transitions.perform
134
+ assert_equal [], @callbacks
135
+ end
136
+
137
+ def test_should_not_run_after_callbacks_if_action_fails_for_second_transition
138
+ @klass.class_eval do
139
+ remove_method :save_status
140
+
141
+ def save_status
142
+ false
143
+ end
144
+ end
145
+
146
+ @callbacks = []
147
+ @state.after_transition { @callbacks << :state_after }
148
+ @state.around_transition { |block| block.call; @callbacks << :state_around }
149
+ @status.after_transition { @callbacks << :status_after }
150
+ @status.around_transition { |block| block.call; @callbacks << :status_around }
151
+
152
+ @transitions.perform
153
+ assert_equal [], @callbacks
154
+ end
155
+
156
+ def test_should_run_after_failure_callbacks_if_action_fails_for_first_transition
157
+ @klass.class_eval do
158
+ remove_method :save_state
159
+
160
+ def save_state
161
+ false
162
+ end
163
+ end
164
+
165
+ @callbacks = []
166
+ @state.after_failure { @callbacks << :state_after }
167
+ @status.after_failure { @callbacks << :status_after }
168
+
169
+ @transitions.perform
170
+ assert_equal [:status_after, :state_after], @callbacks
171
+ end
172
+
173
+ def test_should_run_after_failure_callbacks_if_action_fails_for_second_transition
174
+ @klass.class_eval do
175
+ remove_method :save_status
176
+
177
+ def save_status
178
+ false
179
+ end
180
+ end
181
+
182
+ @callbacks = []
183
+ @state.after_failure { @callbacks << :state_after }
184
+ @status.after_failure { @callbacks << :status_after }
185
+
186
+ @transitions.perform
187
+ assert_equal [:status_after, :state_after], @callbacks
188
+ end
189
+ end
@@ -0,0 +1,48 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionCollectionWithDuplicateActionsTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new do
6
+ attr_reader :actions
7
+
8
+ def save
9
+ (@actions ||= []) << :save
10
+ :save
11
+ end
12
+ end
13
+
14
+ @state = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
15
+ @state.state :idling
16
+ @state.event :ignite
17
+
18
+ @status = StateMachines::Machine.new(@klass, :status, initial: :first_gear, action: :save)
19
+ @status.state :second_gear
20
+ @status.event :shift_up
21
+
22
+ @object = @klass.new
23
+
24
+ @transitions = StateMachines::TransitionCollection.new([
25
+ @state_transition = StateMachines::Transition.new(@object, @state, :ignite, :parked, :idling),
26
+ @status_transition = StateMachines::Transition.new(@object, @status, :shift_up, :first_gear, :second_gear)
27
+ ])
28
+ @result = @transitions.perform
29
+ end
30
+
31
+ def test_should_succeed
32
+ assert_equal :save, @result
33
+ end
34
+
35
+ def test_should_persist_states
36
+ assert_equal 'idling', @object.state
37
+ assert_equal 'second_gear', @object.status
38
+ end
39
+
40
+ def test_should_run_action_once
41
+ assert_equal [:save], @object.actions
42
+ end
43
+
44
+ def test_should_store_results_in_transitions
45
+ assert_equal :save, @state_transition.result
46
+ assert_equal :save, @status_transition.result
47
+ end
48
+ end
@@ -0,0 +1,41 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionCollectionWithEmptyActionsTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @state = StateMachines::Machine.new(@klass, initial: :parked)
8
+ @state.state :idling
9
+ @state.event :ignite
10
+
11
+ @status = StateMachines::Machine.new(@klass, :status, initial: :first_gear)
12
+ @status.state :second_gear
13
+ @status.event :shift_up
14
+
15
+ @object = @klass.new
16
+
17
+ @transitions = StateMachines::TransitionCollection.new([
18
+ @state_transition = StateMachines::Transition.new(@object, @state, :ignite, :parked, :idling),
19
+ @status_transition = StateMachines::Transition.new(@object, @status, :shift_up, :first_gear, :second_gear)
20
+ ])
21
+
22
+ @object.state = 'idling'
23
+ @object.status = 'second_gear'
24
+
25
+ @result = @transitions.perform
26
+ end
27
+
28
+ def test_should_succeed
29
+ assert_equal true, @result
30
+ end
31
+
32
+ def test_should_persist_states
33
+ assert_equal 'idling', @object.state
34
+ assert_equal 'second_gear', @object.status
35
+ end
36
+
37
+ def test_should_store_results_in_transitions
38
+ assert_nil @state_transition.result
39
+ assert_nil @status_transition.result
40
+ end
41
+ end
@@ -0,0 +1,41 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionCollectionWithMixedActionsTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new do
6
+ def save
7
+ true
8
+ end
9
+ end
10
+
11
+ @state = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
12
+ @state.state :idling
13
+ @state.event :ignite
14
+
15
+ @status = StateMachines::Machine.new(@klass, :status, initial: :first_gear)
16
+ @status.state :second_gear
17
+ @status.event :shift_up
18
+
19
+ @object = @klass.new
20
+
21
+ @transitions = StateMachines::TransitionCollection.new([
22
+ @state_transition = StateMachines::Transition.new(@object, @state, :ignite, :parked, :idling),
23
+ @status_transition = StateMachines::Transition.new(@object, @status, :shift_up, :first_gear, :second_gear)
24
+ ])
25
+ @result = @transitions.perform
26
+ end
27
+
28
+ def test_should_succeed
29
+ assert_equal true, @result
30
+ end
31
+
32
+ def test_should_persist_states
33
+ assert_equal 'idling', @object.state
34
+ assert_equal 'second_gear', @object.status
35
+ end
36
+
37
+ def test_should_store_results_in_transitions
38
+ assert_equal true, @state_transition.result
39
+ assert_nil @status_transition.result
40
+ end
41
+ end
@@ -0,0 +1,34 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionCollectionWithSkippedActionsAndBlockTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass, initial: :parked, action: :save_state)
8
+ @machine.state :idling
9
+ @machine.event :ignite
10
+
11
+ @object = @klass.new
12
+
13
+ @transitions = StateMachines::TransitionCollection.new([
14
+ @state_transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
15
+ ], actions: false)
16
+ @result = @transitions.perform { @ran_block = true; 1 }
17
+ end
18
+
19
+ def test_should_succeed
20
+ assert_equal 1, @result
21
+ end
22
+
23
+ def test_should_persist_states
24
+ assert_equal 'idling', @object.state
25
+ end
26
+
27
+ def test_should_run_block
28
+ assert @ran_block
29
+ end
30
+
31
+ def test_should_store_results_in_transitions
32
+ assert_equal 1, @state_transition.result
33
+ end
34
+ end
@@ -0,0 +1,69 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionCollectionWithSkippedActionsTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new do
6
+ attr_reader :actions
7
+
8
+ def save_state
9
+ (@actions ||= []) << :save_state
10
+ :save_state
11
+ end
12
+
13
+ def save_status
14
+ (@actions ||= []) << :save_status
15
+ :save_status
16
+ end
17
+ end
18
+
19
+ @callbacks = []
20
+
21
+ @state = StateMachines::Machine.new(@klass, initial: :parked, action: :save_state)
22
+ @state.state :idling
23
+ @state.event :ignite
24
+ @state.before_transition { @callbacks << :state_before }
25
+ @state.after_transition { @callbacks << :state_after }
26
+ @state.around_transition { |block| @callbacks << :state_around_before; block.call; @callbacks << :state_around_after }
27
+
28
+ @status = StateMachines::Machine.new(@klass, :status, initial: :first_gear, action: :save_status)
29
+ @status.state :second_gear
30
+ @status.event :shift_up
31
+ @status.before_transition { @callbacks << :status_before }
32
+ @status.after_transition { @callbacks << :status_after }
33
+ @status.around_transition { |block| @callbacks << :status_around_before; block.call; @callbacks << :status_around_after }
34
+
35
+ @object = @klass.new
36
+
37
+ @transitions = StateMachines::TransitionCollection.new([
38
+ @state_transition = StateMachines::Transition.new(@object, @state, :ignite, :parked, :idling),
39
+ @status_transition = StateMachines::Transition.new(@object, @status, :shift_up, :first_gear, :second_gear)
40
+ ], actions: false)
41
+ @result = @transitions.perform
42
+ end
43
+
44
+ def test_should_skip_actions
45
+ assert_equal true, @transitions.skip_actions
46
+ end
47
+
48
+ def test_should_succeed
49
+ assert_equal true, @result
50
+ end
51
+
52
+ def test_should_persist_states
53
+ assert_equal 'idling', @object.state
54
+ assert_equal 'second_gear', @object.status
55
+ end
56
+
57
+ def test_should_not_run_actions
58
+ assert_nil @object.actions
59
+ end
60
+
61
+ def test_should_store_results_in_transitions
62
+ assert_nil @state_transition.result
63
+ assert_nil @status_transition.result
64
+ end
65
+
66
+ def test_should_run_all_callbacks
67
+ assert_equal [:state_before, :state_around_before, :status_before, :status_around_before, :status_around_after, :status_after, :state_around_after, :state_after], @callbacks
68
+ end
69
+ end
@@ -0,0 +1,53 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionCollectionWithSkippedAfterCallbacksAndAroundCallbacksTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @callbacks = []
8
+
9
+ @machine = StateMachines::Machine.new(@klass, initial: :parked)
10
+ @machine.state :idling
11
+ @machine.event :ignite
12
+ @machine.around_transition { |block| @callbacks << :around_before; block.call; @callbacks << :around_after }
13
+
14
+ @object = @klass.new
15
+
16
+ @transitions = StateMachines::TransitionCollection.new([
17
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
18
+ ], after: false)
19
+ @result = @transitions.perform
20
+ end
21
+
22
+ def test_should_raise_exception
23
+ skip('Not supported') if StateMachines::Transition.pause_supported?
24
+ assert_raises(ArgumentError) { @transitions.perform }
25
+ end
26
+
27
+ def test_should_succeed
28
+ skip unless StateMachines::Transition.pause_supported?
29
+
30
+ assert_equal true, @result
31
+ end
32
+
33
+ def test_should_not_run_around_callbacks_after_yield
34
+ skip unless StateMachines::Transition.pause_supported?
35
+
36
+ refute @callbacks.include?(:around_after)
37
+ end
38
+
39
+ def test_should_run_around_callbacks_after_yield_on_subsequent_perform
40
+ skip unless StateMachines::Transition.pause_supported?
41
+
42
+ StateMachines::TransitionCollection.new([@transition]).perform
43
+ assert @callbacks.include?(:around_after)
44
+ end
45
+
46
+ def test_should_not_rerun_around_callbacks_before_yield_on_subsequent_perform
47
+ skip unless StateMachines::Transition.pause_supported?
48
+
49
+ @callbacks = []
50
+ StateMachines::TransitionCollection.new([@transition]).perform
51
+ refute @callbacks.include?(:around_before)
52
+ end
53
+ end
@@ -0,0 +1,34 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionCollectionWithSkippedAfterCallbacksTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @callbacks = []
8
+
9
+ @machine = StateMachines::Machine.new(@klass, initial: :parked)
10
+ @machine.state :idling
11
+ @machine.event :ignite
12
+ @machine.after_transition { @callbacks << :after }
13
+
14
+ @object = @klass.new
15
+
16
+ @transitions = StateMachines::TransitionCollection.new([
17
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
18
+ ], after: false)
19
+ @result = @transitions.perform
20
+ end
21
+
22
+ def test_should_succeed
23
+ assert_equal true, @result
24
+ end
25
+
26
+ def test_should_not_run_after_callbacks
27
+ refute @callbacks.include?(:after)
28
+ end
29
+
30
+ def test_should_run_after_callbacks_on_subsequent_perform
31
+ StateMachines::TransitionCollection.new([@transition]).perform
32
+ assert @callbacks.include?(:after)
33
+ end
34
+ end
@@ -0,0 +1,65 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionCollectionWithTransactionsTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new do
6
+ attr_accessor :running_transaction, :cancelled_transaction
7
+ end
8
+
9
+ @machine = StateMachines::Machine.new(@klass, initial: :parked)
10
+ @machine.state :idling
11
+ @machine.event :ignite
12
+
13
+ class << @machine
14
+ def within_transaction(object)
15
+ object.running_transaction = true
16
+ object.cancelled_transaction = yield == false
17
+ object.running_transaction = false
18
+ end
19
+ end
20
+
21
+ @object = @klass.new
22
+ @transitions = StateMachines::TransitionCollection.new([
23
+ StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
24
+ ], transaction: true)
25
+ end
26
+
27
+ def test_should_run_before_callbacks_within_transaction
28
+ @machine.before_transition { |object| @in_transaction = object.running_transaction }
29
+ @transitions.perform
30
+
31
+ assert @in_transaction
32
+ end
33
+
34
+ def test_should_run_action_within_transaction
35
+ @transitions.perform { @in_transaction = @object.running_transaction }
36
+
37
+ assert @in_transaction
38
+ end
39
+
40
+ def test_should_run_after_callbacks_within_transaction
41
+ @machine.after_transition { |object| @in_transaction = object.running_transaction }
42
+ @transitions.perform
43
+
44
+ assert @in_transaction
45
+ end
46
+
47
+ def test_should_cancel_the_transaction_on_before_halt
48
+ @machine.before_transition { throw :halt }
49
+
50
+ @transitions.perform
51
+ assert @object.cancelled_transaction
52
+ end
53
+
54
+ def test_should_cancel_the_transaction_on_action_failure
55
+ @transitions.perform { false }
56
+ assert @object.cancelled_transaction
57
+ end
58
+
59
+ def test_should_not_cancel_the_transaction_on_after_halt
60
+ @machine.after_transition { throw :halt }
61
+
62
+ @transitions.perform
63
+ refute @object.cancelled_transaction
64
+ end
65
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionCollectionWithoutTransactionsTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new do
6
+ attr_accessor :ran_transaction
7
+ end
8
+
9
+ @machine = StateMachines::Machine.new(@klass, initial: :parked)
10
+ @machine.state :idling
11
+ @machine.event :ignite
12
+
13
+ class << @machine
14
+ def within_transaction(object)
15
+ object.ran_transaction = true
16
+ end
17
+ end
18
+
19
+ @object = @klass.new
20
+ @transitions = StateMachines::TransitionCollection.new([
21
+ StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
22
+ ], transaction: false)
23
+ @transitions.perform
24
+ end
25
+
26
+ def test_should_not_run_within_transaction
27
+ refute @object.ran_transaction
28
+ end
29
+ end