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,35 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionWithPerformArgumentsTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new do
6
+ attr_reader :saved
7
+
8
+ def save
9
+ @saved = true
10
+ end
11
+ end
12
+
13
+ @machine = StateMachines::Machine.new(@klass, action: :save)
14
+ @machine.state :parked, :idling
15
+ @machine.event :ignite
16
+
17
+ @object = @klass.new
18
+ @object.state = 'parked'
19
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
20
+ end
21
+
22
+ def test_should_have_arguments
23
+ @transition.perform(1, 2)
24
+
25
+ assert_equal [1, 2], @transition.args
26
+ assert @object.saved
27
+ end
28
+
29
+ def test_should_not_include_run_action_in_arguments
30
+ @transition.perform(1, 2, false)
31
+
32
+ assert_equal [1, 2], @transition.args
33
+ refute @object.saved
34
+ end
35
+ end
@@ -0,0 +1,42 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionWithTransactionsTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new do
6
+ class << self
7
+ attr_accessor :running_transaction
8
+ end
9
+
10
+ attr_accessor :result
11
+
12
+ def save
13
+ @result = self.class.running_transaction
14
+ true
15
+ end
16
+ end
17
+
18
+ @machine = StateMachines::Machine.new(@klass, action: :save)
19
+ @machine.state :parked, :idling
20
+ @machine.event :ignite
21
+
22
+ @object = @klass.new
23
+ @object.state = 'parked'
24
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
25
+
26
+ class << @machine
27
+ def within_transaction(object)
28
+ owner_class.running_transaction = object
29
+ yield
30
+ owner_class.running_transaction = false
31
+ end
32
+ end
33
+ end
34
+
35
+ def test_should_run_blocks_within_transaction_for_object
36
+ @transition.within_transaction do
37
+ @result = @klass.running_transaction
38
+ end
39
+
40
+ assert_equal @object, @result
41
+ end
42
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionWithoutCallbacksTest < 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_succeed
17
+ assert_equal true, @transition.run_callbacks
18
+ end
19
+
20
+ def test_should_succeed_if_after_callbacks_skipped
21
+ assert_equal true, @transition.run_callbacks(after: false)
22
+ end
23
+
24
+ def test_should_call_block_if_provided
25
+ @transition.run_callbacks { @ran_block = true; {} }
26
+ assert @ran_block
27
+ end
28
+
29
+ def test_should_track_block_result
30
+ @transition.run_callbacks { { result: 1 } }
31
+ assert_equal 1, @transition.result
32
+ end
33
+ end
@@ -0,0 +1,22 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionWithoutReadingStateTest < 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 = 'idling'
12
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling, false)
13
+ end
14
+
15
+ def test_should_not_read_from_value_from_object
16
+ assert_equal 'parked', @transition.from
17
+ end
18
+
19
+ def test_should_have_to_value
20
+ assert_equal 'idling', @transition.to
21
+ end
22
+ end
@@ -0,0 +1,47 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class TransitionWithoutRunningActionTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new do
6
+ attr_reader :saved
7
+
8
+ def save
9
+ @saved = true
10
+ end
11
+ end
12
+
13
+ @machine = StateMachines::Machine.new(@klass, action: :save)
14
+ @machine.state :parked, :idling
15
+ @machine.event :ignite
16
+ @machine.after_transition { |_object| @run_after = true }
17
+
18
+ @object = @klass.new
19
+ @object.state = 'parked'
20
+ @transition = StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
21
+ @result = @transition.perform(false)
22
+ end
23
+
24
+ def test_should_have_empty_args
25
+ assert_equal [], @transition.args
26
+ end
27
+
28
+ def test_should_not_have_a_result
29
+ assert_nil @transition.result
30
+ end
31
+
32
+ def test_should_be_successful
33
+ assert_equal true, @result
34
+ end
35
+
36
+ def test_should_change_the_current_state
37
+ assert_equal 'idling', @object.state
38
+ end
39
+
40
+ def test_should_not_run_the_action
41
+ refute @object.saved
42
+ end
43
+
44
+ def test_should_run_after_callbacks
45
+ assert @run_after
46
+ end
47
+ end
@@ -0,0 +1,23 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AttributeTransitionCollectionByDefaultTest < StateMachinesTest
4
+ def setup
5
+ @transitions = StateMachines::AttributeTransitionCollection.new
6
+ end
7
+
8
+ def test_should_skip_actions
9
+ assert @transitions.skip_actions
10
+ end
11
+
12
+ def test_should_not_skip_after
13
+ refute @transitions.skip_after
14
+ end
15
+
16
+ def test_should_not_use_transaction
17
+ refute @transitions.use_transaction
18
+ end
19
+
20
+ def test_should_be_empty
21
+ assert @transitions.empty?
22
+ end
23
+ end
@@ -0,0 +1,64 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AttributeTransitionCollectionMarshallingTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+ self.class.const_set('Example', @klass)
7
+
8
+ @machine = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
9
+ @machine.state :idling
10
+ @machine.event :ignite
11
+
12
+ @object = @klass.new
13
+ @object.state_event = 'ignite'
14
+ end
15
+
16
+ def test_should_marshal_during_before_callbacks
17
+ @machine.before_transition { |object, _transition| Marshal.dump(object) }
18
+ transitions(after: false).perform { true }
19
+ transitions.perform { true }
20
+ end
21
+
22
+ def test_should_marshal_during_action
23
+ transitions(after: false).perform do
24
+ Marshal.dump(@object)
25
+ true
26
+ end
27
+
28
+ transitions.perform do
29
+ Marshal.dump(@object)
30
+ true
31
+ end
32
+ end
33
+
34
+ def test_should_marshal_during_after_callbacks
35
+ @machine.after_transition { |object, _transition| Marshal.dump(object) }
36
+ transitions(after: false).perform { true }
37
+ transitions.perform { true }
38
+ end
39
+
40
+ if StateMachines::Transition.pause_supported?
41
+ def test_should_marshal_during_around_callbacks_before_yield
42
+ @machine.around_transition { |object, _transition, block| Marshal.dump(object); block.call }
43
+ transitions(after: false).perform { true }
44
+ transitions.perform { true }
45
+ end
46
+
47
+ def test_should_marshal_during_around_callbacks_after_yield
48
+ @machine.around_transition { |object, _transition, block| block.call; Marshal.dump(object) }
49
+ transitions(after: false).perform { true }
50
+ transitions.perform { true }
51
+ end
52
+ end
53
+
54
+ def teardown
55
+ self.class.send(:remove_const, 'Example')
56
+ end
57
+
58
+ private
59
+ def transitions(options = {})
60
+ StateMachines::AttributeTransitionCollection.new([
61
+ StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
62
+ ], options)
63
+ end
64
+ end
@@ -0,0 +1,44 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AttributeTransitionCollectionWithActionErrorTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @state = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
8
+ @state.state :idling
9
+ @state.event :ignite
10
+
11
+ @status = StateMachines::Machine.new(@klass, :status, initial: :first_gear, action: :save)
12
+ @status.state :second_gear
13
+ @status.event :shift_up
14
+
15
+ @object = @klass.new
16
+ @object.state_event = 'ignite'
17
+ @object.status_event = 'shift_up'
18
+
19
+ @transitions = StateMachines::AttributeTransitionCollection.new([
20
+ @state_transition = StateMachines::Transition.new(@object, @state, :ignite, :parked, :idling),
21
+ @status_transition = StateMachines::Transition.new(@object, @status, :shift_up, :first_gear, :second_gear)
22
+ ])
23
+
24
+ begin
25
+ ; @transitions.perform { fail ArgumentError }
26
+ rescue
27
+ end
28
+ end
29
+
30
+ def test_should_not_persist_states
31
+ assert_equal 'parked', @object.state
32
+ assert_equal 'first_gear', @object.status
33
+ end
34
+
35
+ def test_should_not_clear_events
36
+ assert_equal :ignite, @object.state_event
37
+ assert_equal :shift_up, @object.status_event
38
+ end
39
+
40
+ def test_should_not_write_event_transitions
41
+ assert_nil @object.send(:state_event_transition)
42
+ assert_nil @object.send(:status_event_transition)
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AttributeTransitionCollectionWithActionFailedTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @state = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
8
+ @state.state :idling
9
+ @state.event :ignite
10
+
11
+ @status = StateMachines::Machine.new(@klass, :status, initial: :first_gear, action: :save)
12
+ @status.state :second_gear
13
+ @status.event :shift_up
14
+
15
+ @object = @klass.new
16
+ @object.state_event = 'ignite'
17
+ @object.status_event = 'shift_up'
18
+
19
+ @transitions = StateMachines::AttributeTransitionCollection.new([
20
+ @state_transition = StateMachines::Transition.new(@object, @state, :ignite, :parked, :idling),
21
+ @status_transition = StateMachines::Transition.new(@object, @status, :shift_up, :first_gear, :second_gear)
22
+ ])
23
+ @result = @transitions.perform { false }
24
+ end
25
+
26
+ def test_should_not_succeed
27
+ assert_equal false, @result
28
+ end
29
+
30
+ def test_should_not_persist_states
31
+ assert_equal 'parked', @object.state
32
+ assert_equal 'first_gear', @object.status
33
+ end
34
+
35
+ def test_should_not_clear_events
36
+ assert_equal :ignite, @object.state_event
37
+ assert_equal :shift_up, @object.status_event
38
+ end
39
+
40
+ def test_should_not_write_event_transitions
41
+ assert_nil @object.send(:state_event_transition)
42
+ assert_nil @object.send(:status_event_transition)
43
+ end
44
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AttributeTransitionCollectionWithBeforeCallbackErrorTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
8
+ @machine.state :idling
9
+ @machine.event :ignite
10
+
11
+ @machine.before_transition { fail ArgumentError }
12
+
13
+ @object = @klass.new
14
+ @object.state_event = 'ignite'
15
+
16
+ @transitions = StateMachines::AttributeTransitionCollection.new([
17
+ StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
18
+ ])
19
+ begin
20
+ ; @transitions.perform
21
+ rescue
22
+ end
23
+ end
24
+
25
+ def test_should_not_clear_event
26
+ assert_equal :ignite, @object.state_event
27
+ end
28
+
29
+ def test_should_not_write_event_transition
30
+ assert_nil @object.send(:state_event_transition)
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AttributeTransitionCollectionWithBeforeCallbackHaltTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
8
+ @machine.state :idling
9
+ @machine.event :ignite
10
+
11
+ @machine.before_transition { throw :halt }
12
+
13
+ @object = @klass.new
14
+ @object.state_event = 'ignite'
15
+
16
+ @transitions = StateMachines::AttributeTransitionCollection.new([
17
+ StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
18
+ ])
19
+ @result = @transitions.perform
20
+ end
21
+
22
+ def test_should_not_succeed
23
+ assert_equal false, @result
24
+ end
25
+
26
+ def test_should_not_clear_event
27
+ assert_equal :ignite, @object.state_event
28
+ end
29
+
30
+ def test_should_not_write_event_transition
31
+ assert_nil @object.send(:state_event_transition)
32
+ end
33
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AttributeTransitionCollectionWithAroundAfterYieldCallbackErrorTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
8
+ @machine.state :idling
9
+ @machine.event :ignite
10
+
11
+ @machine.before_transition { fail ArgumentError }
12
+
13
+ @object = @klass.new
14
+ @object.state_event = 'ignite'
15
+
16
+ @transitions = StateMachines::AttributeTransitionCollection.new([
17
+ StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
18
+ ])
19
+ begin
20
+ ; @transitions.perform
21
+ rescue
22
+ end
23
+ end
24
+
25
+ def test_should_not_clear_event
26
+ assert_equal :ignite, @object.state_event
27
+ end
28
+
29
+ def test_should_not_write_event_transition
30
+ assert_nil @object.send(:state_event_transition)
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AttributeTransitionCollectionWithAroundCallbackAfterYieldErrorTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
8
+ @machine.state :idling
9
+ @machine.event :ignite
10
+
11
+ @machine.around_transition { |block| block.call; fail ArgumentError }
12
+
13
+ @object = @klass.new
14
+ @object.state_event = 'ignite'
15
+
16
+ @transitions = StateMachines::AttributeTransitionCollection.new([
17
+ StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
18
+ ])
19
+ begin
20
+ ; @transitions.perform
21
+ rescue
22
+ end
23
+ end
24
+
25
+ def test_should_clear_event
26
+ assert_nil @object.state_event
27
+ end
28
+
29
+ def test_should_not_write_event_transition
30
+ assert_nil @object.send(:state_event_transition)
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AttributeTransitionCollectionWithAroundCallbackAfterYieldHaltTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
8
+ @machine.state :idling
9
+ @machine.event :ignite
10
+
11
+ @machine.around_transition { |block| block.call; throw :halt }
12
+
13
+ @object = @klass.new
14
+ @object.state_event = 'ignite'
15
+
16
+ @transitions = StateMachines::AttributeTransitionCollection.new([
17
+ StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
18
+ ])
19
+ @result = @transitions.perform
20
+ end
21
+
22
+ def test_should_succeed
23
+ assert_equal true, @result
24
+ end
25
+
26
+ def test_should_clear_event
27
+ assert_nil @object.state_event
28
+ end
29
+
30
+ def test_should_not_write_event_transition
31
+ assert_nil @object.send(:state_event_transition)
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AttributeTransitionCollectionWithAroundCallbackBeforeYieldHaltTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
8
+ @machine.state :idling
9
+ @machine.event :ignite
10
+
11
+ @machine.around_transition { throw :halt }
12
+
13
+ @object = @klass.new
14
+ @object.state_event = 'ignite'
15
+
16
+ @transitions = StateMachines::AttributeTransitionCollection.new([
17
+ StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
18
+ ])
19
+ @result = @transitions.perform
20
+ end
21
+
22
+ def test_should_not_succeed
23
+ assert_equal false, @result
24
+ end
25
+
26
+ def test_should_not_clear_event
27
+ assert_equal :ignite, @object.state_event
28
+ end
29
+
30
+ def test_should_not_write_event_transition
31
+ assert_nil @object.send(:state_event_transition)
32
+ end
33
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AttributeTransitionCollectionWithAfterCallbackErrorTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
8
+ @machine.state :idling
9
+ @machine.event :ignite
10
+
11
+ @machine.after_transition { fail ArgumentError }
12
+
13
+ @object = @klass.new
14
+ @object.state_event = 'ignite'
15
+
16
+ @transitions = StateMachines::AttributeTransitionCollection.new([
17
+ StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
18
+ ])
19
+ begin
20
+ ; @transitions.perform
21
+ rescue
22
+ end
23
+ end
24
+
25
+ def test_should_clear_event
26
+ assert_nil @object.state_event
27
+ end
28
+
29
+ def test_should_not_write_event_transition
30
+ assert_nil @object.send(:state_event_transition)
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class AttributeTransitionCollectionWithAfterCallbackHaltTest < StateMachinesTest
4
+ def setup
5
+ @klass = Class.new
6
+
7
+ @machine = StateMachines::Machine.new(@klass, initial: :parked, action: :save)
8
+ @machine.state :idling
9
+ @machine.event :ignite
10
+
11
+ @machine.after_transition { throw :halt }
12
+
13
+ @object = @klass.new
14
+ @object.state_event = 'ignite'
15
+
16
+ @transitions = StateMachines::AttributeTransitionCollection.new([
17
+ StateMachines::Transition.new(@object, @machine, :ignite, :parked, :idling)
18
+ ])
19
+ @result = @transitions.perform
20
+ end
21
+
22
+ def test_should_succeed
23
+ assert_equal true, @result
24
+ end
25
+
26
+ def test_should_clear_event
27
+ assert_nil @object.state_event
28
+ end
29
+
30
+ def test_should_not_write_event_transition
31
+ assert_nil @object.send(:state_event_transition)
32
+ end
33
+ end