branston 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (188) hide show
  1. data/README.rdoc +1 -1
  2. data/lib/branston/Gemfile +25 -0
  3. data/lib/branston/Gemfile.lock +76 -0
  4. data/lib/branston/app/controllers/application_controller.rb +1 -1
  5. data/lib/branston/app/controllers/outcomes_controller.rb +2 -0
  6. data/lib/branston/app/controllers/stories_controller.rb +82 -86
  7. data/lib/branston/app/controllers/users_controller.rb +69 -11
  8. data/lib/branston/app/helpers/iterations_helper.rb +13 -13
  9. data/lib/branston/app/models/iteration.rb +3 -1
  10. data/lib/branston/app/models/release.rb +0 -1
  11. data/lib/branston/app/models/story.rb +30 -28
  12. data/lib/branston/app/models/user.rb +46 -1
  13. data/lib/branston/app/views/layouts/_header.html.erb +8 -3
  14. data/lib/branston/app/views/layouts/user_roles.html.erb +5 -5
  15. data/lib/branston/app/views/sessions/new.html.erb +8 -14
  16. data/lib/branston/app/views/users/_admin_controls.html.erb +14 -0
  17. data/lib/branston/app/views/users/_form.html.erb +27 -0
  18. data/lib/branston/app/views/users/edit.html.erb +9 -0
  19. data/lib/branston/app/views/users/index.html.erb +14 -0
  20. data/lib/branston/app/views/users/new.html.erb +3 -22
  21. data/lib/branston/config/boot.rb +20 -0
  22. data/lib/branston/config/environment.rb +2 -7
  23. data/lib/branston/config/environments/test.rb +0 -8
  24. data/lib/branston/config/preinitializer.rb +21 -0
  25. data/lib/branston/config/routes.rb +15 -10
  26. data/lib/branston/db/development.sqlite3 +0 -0
  27. data/lib/branston/db/development_structure.sql +21 -8
  28. data/lib/branston/db/migrate/20100723161424_add_state_to_user.rb +12 -0
  29. data/lib/branston/db/migrate/20100726150322_add_activation_fields_to_user.rb +12 -0
  30. data/lib/branston/db/migrate/20100729125551_set_default_user_state_to_pending.rb +10 -0
  31. data/lib/branston/db/migrate/20100812133837_add_is_admin_property_to_user.rb +10 -0
  32. data/lib/branston/db/migrate/20100812140532_set_default_user_state_to_active.rb +10 -0
  33. data/lib/branston/db/migrate/20100812143455_add_default_admin_user.rb +17 -0
  34. data/lib/branston/db/migrate/20110408162438_remove_is_admin_property_and_add_role_instead.rb +12 -0
  35. data/lib/branston/db/pristine.sqlite3 +0 -0
  36. data/lib/branston/db/schema.rb +6 -8
  37. data/lib/branston/db/test.sqlite3 +0 -0
  38. data/lib/branston/log/development.log +1181 -433
  39. data/lib/branston/log/test.log +145306 -52026
  40. data/lib/branston/test/blueprints.rb +22 -28
  41. data/lib/branston/test/functional/iterations_controller_test.rb +149 -113
  42. data/lib/branston/test/functional/outcomes_controller_test.rb +94 -60
  43. data/lib/branston/test/functional/preconditions_controller_test.rb +101 -67
  44. data/lib/branston/test/functional/releases_controller_test.rb +85 -49
  45. data/lib/branston/test/functional/scenarios_controller_test.rb +104 -70
  46. data/lib/branston/test/functional/stories_controller_test.rb +41 -12
  47. data/lib/branston/test/functional/users_controller_test.rb +364 -43
  48. data/lib/branston/test/unit/iteration_test.rb +37 -6
  49. data/lib/branston/test/unit/outcome_test.rb +2 -2
  50. data/lib/branston/test/unit/participation_test.rb +2 -2
  51. data/lib/branston/test/unit/precondition_test.rb +3 -3
  52. data/lib/branston/test/unit/release_test.rb +4 -0
  53. data/lib/branston/test/unit/scenario_test.rb +4 -4
  54. data/lib/branston/test/unit/story_test.rb +62 -40
  55. data/lib/branston/test/unit/user_test.rb +195 -5
  56. metadata +136 -156
  57. data/lib/branston/app/controllers/user_roles_controller.rb +0 -105
  58. data/lib/branston/app/helpers/user_roles_helper.rb +0 -2
  59. data/lib/branston/app/models/user_role.rb +0 -21
  60. data/lib/branston/app/views/layouts/outcomes.html.erb +0 -17
  61. data/lib/branston/app/views/layouts/preconditions.html.erb +0 -17
  62. data/lib/branston/app/views/layouts/releases.html.erb +0 -17
  63. data/lib/branston/app/views/user_roles/edit.html.erb +0 -16
  64. data/lib/branston/app/views/user_roles/index.html.erb +0 -20
  65. data/lib/branston/app/views/user_roles/new.html.erb +0 -15
  66. data/lib/branston/app/views/user_roles/show.html.erb +0 -8
  67. data/lib/branston/coverage/app-controllers-application_controller_rb.html +0 -231
  68. data/lib/branston/coverage/app-controllers-iterations_controller_rb.html +0 -801
  69. data/lib/branston/coverage/app-controllers-outcomes_controller_rb.html +0 -759
  70. data/lib/branston/coverage/app-controllers-preconditions_controller_rb.html +0 -783
  71. data/lib/branston/coverage/app-controllers-releases_controller_rb.html +0 -705
  72. data/lib/branston/coverage/app-controllers-scenarios_controller_rb.html +0 -777
  73. data/lib/branston/coverage/app-controllers-sessions_controller_rb.html +0 -411
  74. data/lib/branston/coverage/app-controllers-stories_controller_rb.html +0 -1071
  75. data/lib/branston/coverage/app-controllers-user_roles_controller_rb.html +0 -693
  76. data/lib/branston/coverage/app-controllers-users_controller_rb.html +0 -315
  77. data/lib/branston/coverage/app-helpers-application_helper_rb.html +0 -327
  78. data/lib/branston/coverage/app-helpers-iterations_helper_rb.html +0 -363
  79. data/lib/branston/coverage/app-helpers-outcomes_helper_rb.html +0 -75
  80. data/lib/branston/coverage/app-helpers-preconditions_helper_rb.html +0 -75
  81. data/lib/branston/coverage/app-helpers-releases_helper_rb.html +0 -75
  82. data/lib/branston/coverage/app-helpers-sessions_helper_rb.html +0 -75
  83. data/lib/branston/coverage/app-helpers-stories_helper_rb.html +0 -75
  84. data/lib/branston/coverage/app-helpers-user_roles_helper_rb.html +0 -75
  85. data/lib/branston/coverage/app-models-iteration_rb.html +0 -321
  86. data/lib/branston/coverage/app-models-outcome_rb.html +0 -243
  87. data/lib/branston/coverage/app-models-participation_rb.html +0 -189
  88. data/lib/branston/coverage/app-models-precondition_rb.html +0 -243
  89. data/lib/branston/coverage/app-models-release_rb.html +0 -195
  90. data/lib/branston/coverage/app-models-scenario_rb.html +0 -231
  91. data/lib/branston/coverage/app-models-story_rb.html +0 -621
  92. data/lib/branston/coverage/app-models-user_rb.html +0 -513
  93. data/lib/branston/coverage/app-models-user_role_rb.html +0 -189
  94. data/lib/branston/coverage/index.html +0 -570
  95. data/lib/branston/coverage/jquery-1.3.2.min.js +0 -19
  96. data/lib/branston/coverage/jquery.tablesorter.min.js +0 -15
  97. data/lib/branston/coverage/lib-client_rb.html +0 -537
  98. data/lib/branston/coverage/lib-faker_extras_rb.html +0 -207
  99. data/lib/branston/coverage/lib-story_generator_rb.html +0 -873
  100. data/lib/branston/coverage/print.css +0 -12
  101. data/lib/branston/coverage/rcov.js +0 -42
  102. data/lib/branston/coverage/screen.css +0 -270
  103. data/lib/branston/db/migrate/20091127131037_create_user_roles.rb +0 -13
  104. data/lib/branston/db/migrate/20091127172950_add_story_id_to_user_role.rb +0 -10
  105. data/lib/branston/test/functional/user_roles_controller_test.rb +0 -71
  106. data/lib/branston/test/unit/helpers/user_roles_helper_test.rb +0 -4
  107. data/lib/branston/test/unit/user_role_test.rb +0 -9
  108. data/lib/branston/tmp/performance/BrowsingTest#test_homepage_process_time_flat.txt +0 -8
  109. data/lib/branston/tmp/performance/BrowsingTest#test_homepage_process_time_graph.html +0 -6718
  110. data/lib/branston/tmp/performance/BrowsingTest#test_homepage_process_time_tree.txt +0 -9942
  111. data/lib/branston/vendor/plugins/state_machine/CHANGELOG.rdoc +0 -298
  112. data/lib/branston/vendor/plugins/state_machine/LICENSE +0 -20
  113. data/lib/branston/vendor/plugins/state_machine/README.rdoc +0 -466
  114. data/lib/branston/vendor/plugins/state_machine/Rakefile +0 -98
  115. data/lib/branston/vendor/plugins/state_machine/examples/AutoShop_state.png +0 -0
  116. data/lib/branston/vendor/plugins/state_machine/examples/Car_state.png +0 -0
  117. data/lib/branston/vendor/plugins/state_machine/examples/TrafficLight_state.png +0 -0
  118. data/lib/branston/vendor/plugins/state_machine/examples/Vehicle_state.png +0 -0
  119. data/lib/branston/vendor/plugins/state_machine/examples/auto_shop.rb +0 -11
  120. data/lib/branston/vendor/plugins/state_machine/examples/car.rb +0 -19
  121. data/lib/branston/vendor/plugins/state_machine/examples/merb-rest/controller.rb +0 -51
  122. data/lib/branston/vendor/plugins/state_machine/examples/merb-rest/model.rb +0 -28
  123. data/lib/branston/vendor/plugins/state_machine/examples/merb-rest/view_edit.html.erb +0 -24
  124. data/lib/branston/vendor/plugins/state_machine/examples/merb-rest/view_index.html.erb +0 -23
  125. data/lib/branston/vendor/plugins/state_machine/examples/merb-rest/view_new.html.erb +0 -13
  126. data/lib/branston/vendor/plugins/state_machine/examples/merb-rest/view_show.html.erb +0 -17
  127. data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/controller.rb +0 -43
  128. data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/migration.rb +0 -11
  129. data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/model.rb +0 -23
  130. data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/view_edit.html.erb +0 -25
  131. data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/view_index.html.erb +0 -23
  132. data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/view_new.html.erb +0 -14
  133. data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/view_show.html.erb +0 -17
  134. data/lib/branston/vendor/plugins/state_machine/examples/traffic_light.rb +0 -7
  135. data/lib/branston/vendor/plugins/state_machine/examples/vehicle.rb +0 -31
  136. data/lib/branston/vendor/plugins/state_machine/init.rb +0 -1
  137. data/lib/branston/vendor/plugins/state_machine/lib/state_machine.rb +0 -388
  138. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/assertions.rb +0 -36
  139. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/callback.rb +0 -189
  140. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/condition_proxy.rb +0 -94
  141. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/eval_helpers.rb +0 -67
  142. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/event.rb +0 -252
  143. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/event_collection.rb +0 -122
  144. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/extensions.rb +0 -149
  145. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/guard.rb +0 -230
  146. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations.rb +0 -68
  147. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations/active_record.rb +0 -492
  148. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations/active_record/locale.rb +0 -11
  149. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations/active_record/observer.rb +0 -41
  150. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations/data_mapper.rb +0 -351
  151. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations/data_mapper/observer.rb +0 -139
  152. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations/sequel.rb +0 -322
  153. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/machine.rb +0 -1467
  154. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/machine_collection.rb +0 -155
  155. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/matcher.rb +0 -123
  156. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/matcher_helpers.rb +0 -54
  157. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/node_collection.rb +0 -152
  158. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/state.rb +0 -249
  159. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/state_collection.rb +0 -112
  160. data/lib/branston/vendor/plugins/state_machine/lib/state_machine/transition.rb +0 -394
  161. data/lib/branston/vendor/plugins/state_machine/state_machine.gemspec +0 -30
  162. data/lib/branston/vendor/plugins/state_machine/tasks/state_machine.rake +0 -1
  163. data/lib/branston/vendor/plugins/state_machine/tasks/state_machine.rb +0 -30
  164. data/lib/branston/vendor/plugins/state_machine/test/classes/switch.rb +0 -11
  165. data/lib/branston/vendor/plugins/state_machine/test/functional/state_machine_test.rb +0 -941
  166. data/lib/branston/vendor/plugins/state_machine/test/test_helper.rb +0 -4
  167. data/lib/branston/vendor/plugins/state_machine/test/unit/assertions_test.rb +0 -40
  168. data/lib/branston/vendor/plugins/state_machine/test/unit/callback_test.rb +0 -455
  169. data/lib/branston/vendor/plugins/state_machine/test/unit/condition_proxy_test.rb +0 -328
  170. data/lib/branston/vendor/plugins/state_machine/test/unit/eval_helpers_test.rb +0 -120
  171. data/lib/branston/vendor/plugins/state_machine/test/unit/event_collection_test.rb +0 -326
  172. data/lib/branston/vendor/plugins/state_machine/test/unit/event_test.rb +0 -743
  173. data/lib/branston/vendor/plugins/state_machine/test/unit/guard_test.rb +0 -908
  174. data/lib/branston/vendor/plugins/state_machine/test/unit/integrations/active_record_test.rb +0 -1367
  175. data/lib/branston/vendor/plugins/state_machine/test/unit/integrations/data_mapper_test.rb +0 -962
  176. data/lib/branston/vendor/plugins/state_machine/test/unit/integrations/sequel_test.rb +0 -859
  177. data/lib/branston/vendor/plugins/state_machine/test/unit/integrations_test.rb +0 -42
  178. data/lib/branston/vendor/plugins/state_machine/test/unit/invalid_event_test.rb +0 -7
  179. data/lib/branston/vendor/plugins/state_machine/test/unit/invalid_transition_test.rb +0 -7
  180. data/lib/branston/vendor/plugins/state_machine/test/unit/machine_collection_test.rb +0 -938
  181. data/lib/branston/vendor/plugins/state_machine/test/unit/machine_test.rb +0 -2004
  182. data/lib/branston/vendor/plugins/state_machine/test/unit/matcher_helpers_test.rb +0 -37
  183. data/lib/branston/vendor/plugins/state_machine/test/unit/matcher_test.rb +0 -155
  184. data/lib/branston/vendor/plugins/state_machine/test/unit/node_collection_test.rb +0 -207
  185. data/lib/branston/vendor/plugins/state_machine/test/unit/state_collection_test.rb +0 -280
  186. data/lib/branston/vendor/plugins/state_machine/test/unit/state_machine_test.rb +0 -31
  187. data/lib/branston/vendor/plugins/state_machine/test/unit/state_test.rb +0 -795
  188. data/lib/branston/vendor/plugins/state_machine/test/unit/transition_test.rb +0 -1212
@@ -1,908 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
-
3
- class GuardTest < Test::Unit::TestCase
4
- def setup
5
- @guard = StateMachine::Guard.new(:from => :parked, :to => :idling)
6
- end
7
-
8
- def test_should_not_raise_exception_if_implicit_option_specified
9
- assert_nothing_raised { StateMachine::Guard.new(:invalid => :valid) }
10
- end
11
-
12
- def test_should_not_have_an_if_condition
13
- assert_nil @guard.if_condition
14
- end
15
-
16
- def test_should_not_have_an_unless_condition
17
- assert_nil @guard.unless_condition
18
- end
19
-
20
- def test_should_have_a_state_requirement
21
- assert_equal 1, @guard.state_requirements.length
22
- end
23
- end
24
-
25
- class GuardWithNoRequirementsTest < Test::Unit::TestCase
26
- def setup
27
- @object = Object.new
28
- @guard = StateMachine::Guard.new
29
- end
30
-
31
- def test_should_use_all_matcher_for_event_requirement
32
- assert_equal StateMachine::AllMatcher.instance, @guard.event_requirement
33
- end
34
-
35
- def test_should_use_all_matcher_for_from_state_requirement
36
- assert_equal StateMachine::AllMatcher.instance, @guard.state_requirements.first[:from]
37
- end
38
-
39
- def test_should_use_all_matcher_for_to_state_requirement
40
- assert_equal StateMachine::AllMatcher.instance, @guard.state_requirements.first[:to]
41
- end
42
-
43
- def test_should_match_nil_query
44
- assert @guard.matches?(@object, nil)
45
- end
46
-
47
- def test_should_match_empty_query
48
- assert @guard.matches?(@object, {})
49
- end
50
-
51
- def test_should_match_non_empty_query
52
- assert @guard.matches?(@object, :to => :idling, :from => :parked, :on => :ignite)
53
- end
54
-
55
- def test_should_include_all_requirements_in_match
56
- match = @guard.match(@object, nil)
57
-
58
- assert_equal @guard.state_requirements.first[:from], match[:from]
59
- assert_equal @guard.state_requirements.first[:to], match[:to]
60
- assert_equal @guard.event_requirement, match[:on]
61
- end
62
- end
63
-
64
- class GuardWithFromRequirementTest < Test::Unit::TestCase
65
- def setup
66
- @object = Object.new
67
- @guard = StateMachine::Guard.new(:from => :parked)
68
- end
69
-
70
- def test_should_use_a_whitelist_matcher
71
- assert_instance_of StateMachine::WhitelistMatcher, @guard.state_requirements.first[:from]
72
- end
73
-
74
- def test_should_match_if_not_specified
75
- assert @guard.matches?(@object, :to => :idling)
76
- end
77
-
78
- def test_should_match_if_included
79
- assert @guard.matches?(@object, :from => :parked)
80
- end
81
-
82
- def test_should_not_match_if_not_included
83
- assert !@guard.matches?(@object, :from => :idling)
84
- end
85
-
86
- def test_should_not_match_if_nil
87
- assert !@guard.matches?(@object, :from => nil)
88
- end
89
-
90
- def test_should_ignore_to
91
- assert @guard.matches?(@object, :from => :parked, :to => :idling)
92
- end
93
-
94
- def test_should_ignore_on
95
- assert @guard.matches?(@object, :from => :parked, :on => :ignite)
96
- end
97
-
98
- def test_should_be_included_in_known_states
99
- assert_equal [:parked], @guard.known_states
100
- end
101
-
102
- def test_should_include_requirement_in_match
103
- match = @guard.match(@object, :from => :parked)
104
- assert_equal @guard.state_requirements.first[:from], match[:from]
105
- end
106
- end
107
-
108
- class GuardWithMultipleFromRequirementsTest < Test::Unit::TestCase
109
- def setup
110
- @object = Object.new
111
- @guard = StateMachine::Guard.new(:from => [:idling, :parked])
112
- end
113
-
114
- def test_should_match_if_included
115
- assert @guard.matches?(@object, :from => :idling)
116
- end
117
-
118
- def test_should_not_match_if_not_included
119
- assert !@guard.matches?(@object, :from => :first_gear)
120
- end
121
-
122
- def test_should_be_included_in_known_states
123
- assert_equal [:idling, :parked], @guard.known_states
124
- end
125
- end
126
-
127
- class GuardWithToRequirementTest < Test::Unit::TestCase
128
- def setup
129
- @object = Object.new
130
- @guard = StateMachine::Guard.new(:to => :idling)
131
- end
132
-
133
- def test_should_use_a_whitelist_matcher
134
- assert_instance_of StateMachine::WhitelistMatcher, @guard.state_requirements.first[:to]
135
- end
136
-
137
- def test_should_match_if_not_specified
138
- assert @guard.matches?(@object, :from => :parked)
139
- end
140
-
141
- def test_should_match_if_included
142
- assert @guard.matches?(@object, :to => :idling)
143
- end
144
-
145
- def test_should_not_match_if_not_included
146
- assert !@guard.matches?(@object, :to => :parked)
147
- end
148
-
149
- def test_should_not_match_if_nil
150
- assert !@guard.matches?(@object, :to => nil)
151
- end
152
-
153
- def test_should_ignore_from
154
- assert @guard.matches?(@object, :to => :idling, :from => :parked)
155
- end
156
-
157
- def test_should_ignore_on
158
- assert @guard.matches?(@object, :to => :idling, :on => :ignite)
159
- end
160
-
161
- def test_should_be_included_in_known_states
162
- assert_equal [:idling], @guard.known_states
163
- end
164
-
165
- def test_should_include_requirement_in_match
166
- match = @guard.match(@object, :to => :idling)
167
- assert_equal @guard.state_requirements.first[:to], match[:to]
168
- end
169
- end
170
-
171
- class GuardWithMultipleToRequirementsTest < Test::Unit::TestCase
172
- def setup
173
- @object = Object.new
174
- @guard = StateMachine::Guard.new(:to => [:idling, :parked])
175
- end
176
-
177
- def test_should_match_if_included
178
- assert @guard.matches?(@object, :to => :idling)
179
- end
180
-
181
- def test_should_not_match_if_not_included
182
- assert !@guard.matches?(@object, :to => :first_gear)
183
- end
184
-
185
- def test_should_be_included_in_known_states
186
- assert_equal [:idling, :parked], @guard.known_states
187
- end
188
- end
189
-
190
- class GuardWithOnRequirementTest < Test::Unit::TestCase
191
- def setup
192
- @object = Object.new
193
- @guard = StateMachine::Guard.new(:on => :ignite)
194
- end
195
-
196
- def test_should_use_a_whitelist_matcher
197
- assert_instance_of StateMachine::WhitelistMatcher, @guard.event_requirement
198
- end
199
-
200
- def test_should_match_if_not_specified
201
- assert @guard.matches?(@object, :from => :parked)
202
- end
203
-
204
- def test_should_match_if_included
205
- assert @guard.matches?(@object, :on => :ignite)
206
- end
207
-
208
- def test_should_not_match_if_not_included
209
- assert !@guard.matches?(@object, :on => :park)
210
- end
211
-
212
- def test_should_not_match_if_nil
213
- assert !@guard.matches?(@object, :on => nil)
214
- end
215
-
216
- def test_should_ignore_to
217
- assert @guard.matches?(@object, :on => :ignite, :to => :parked)
218
- end
219
-
220
- def test_should_ignore_from
221
- assert @guard.matches?(@object, :on => :ignite, :from => :parked)
222
- end
223
-
224
- def test_should_not_be_included_in_known_states
225
- assert_equal [], @guard.known_states
226
- end
227
-
228
- def test_should_include_requirement_in_match
229
- match = @guard.match(@object, :on => :ignite)
230
- assert_equal @guard.event_requirement, match[:on]
231
- end
232
- end
233
-
234
- class GuardWithMultipleOnRequirementsTest < Test::Unit::TestCase
235
- def setup
236
- @object = Object.new
237
- @guard = StateMachine::Guard.new(:on => [:ignite, :park])
238
- end
239
-
240
- def test_should_match_if_included
241
- assert @guard.matches?(@object, :on => :ignite)
242
- end
243
-
244
- def test_should_not_match_if_not_included
245
- assert !@guard.matches?(@object, :on => :shift_up)
246
- end
247
- end
248
-
249
- class GuardWithExceptFromRequirementTest < Test::Unit::TestCase
250
- def setup
251
- @object = Object.new
252
- @guard = StateMachine::Guard.new(:except_from => :parked)
253
- end
254
-
255
- def test_should_use_a_blacklist_matcher
256
- assert_instance_of StateMachine::BlacklistMatcher, @guard.state_requirements.first[:from]
257
- end
258
-
259
- def test_should_match_if_not_included
260
- assert @guard.matches?(@object, :from => :idling)
261
- end
262
-
263
- def test_should_not_match_if_included
264
- assert !@guard.matches?(@object, :from => :parked)
265
- end
266
-
267
- def test_should_match_if_nil
268
- assert @guard.matches?(@object, :from => nil)
269
- end
270
-
271
- def test_should_ignore_to
272
- assert @guard.matches?(@object, :from => :idling, :to => :parked)
273
- end
274
-
275
- def test_should_ignore_on
276
- assert @guard.matches?(@object, :from => :idling, :on => :ignite)
277
- end
278
-
279
- def test_should_be_included_in_known_states
280
- assert_equal [:parked], @guard.known_states
281
- end
282
- end
283
-
284
- class GuardWithMultipleExceptFromRequirementsTest < Test::Unit::TestCase
285
- def setup
286
- @object = Object.new
287
- @guard = StateMachine::Guard.new(:except_from => [:idling, :parked])
288
- end
289
-
290
- def test_should_match_if_not_included
291
- assert @guard.matches?(@object, :from => :first_gear)
292
- end
293
-
294
- def test_should_not_match_if_included
295
- assert !@guard.matches?(@object, :from => :idling)
296
- end
297
-
298
- def test_should_be_included_in_known_states
299
- assert_equal [:idling, :parked], @guard.known_states
300
- end
301
- end
302
-
303
- class GuardWithExceptToRequirementTest < Test::Unit::TestCase
304
- def setup
305
- @object = Object.new
306
- @guard = StateMachine::Guard.new(:except_to => :idling)
307
- end
308
-
309
- def test_should_use_a_blacklist_matcher
310
- assert_instance_of StateMachine::BlacklistMatcher, @guard.state_requirements.first[:to]
311
- end
312
-
313
- def test_should_match_if_not_included
314
- assert @guard.matches?(@object, :to => :parked)
315
- end
316
-
317
- def test_should_not_match_if_included
318
- assert !@guard.matches?(@object, :to => :idling)
319
- end
320
-
321
- def test_should_match_if_nil
322
- assert @guard.matches?(@object, :to => nil)
323
- end
324
-
325
- def test_should_ignore_from
326
- assert @guard.matches?(@object, :to => :parked, :from => :idling)
327
- end
328
-
329
- def test_should_ignore_on
330
- assert @guard.matches?(@object, :to => :parked, :on => :ignite)
331
- end
332
-
333
- def test_should_be_included_in_known_states
334
- assert_equal [:idling], @guard.known_states
335
- end
336
- end
337
-
338
- class GuardWithMultipleExceptToRequirementsTest < Test::Unit::TestCase
339
- def setup
340
- @object = Object.new
341
- @guard = StateMachine::Guard.new(:except_to => [:idling, :parked])
342
- end
343
-
344
- def test_should_match_if_not_included
345
- assert @guard.matches?(@object, :to => :first_gear)
346
- end
347
-
348
- def test_should_not_match_if_included
349
- assert !@guard.matches?(@object, :to => :idling)
350
- end
351
-
352
- def test_should_be_included_in_known_states
353
- assert_equal [:idling, :parked], @guard.known_states
354
- end
355
- end
356
-
357
- class GuardWithExceptOnRequirementTest < Test::Unit::TestCase
358
- def setup
359
- @object = Object.new
360
- @guard = StateMachine::Guard.new(:except_on => :ignite)
361
- end
362
-
363
- def test_should_use_a_blacklist_matcher
364
- assert_instance_of StateMachine::BlacklistMatcher, @guard.event_requirement
365
- end
366
-
367
- def test_should_match_if_not_included
368
- assert @guard.matches?(@object, :on => :park)
369
- end
370
-
371
- def test_should_not_match_if_included
372
- assert !@guard.matches?(@object, :on => :ignite)
373
- end
374
-
375
- def test_should_match_if_nil
376
- assert @guard.matches?(@object, :on => nil)
377
- end
378
-
379
- def test_should_ignore_to
380
- assert @guard.matches?(@object, :on => :park, :to => :idling)
381
- end
382
-
383
- def test_should_ignore_from
384
- assert @guard.matches?(@object, :on => :park, :from => :parked)
385
- end
386
-
387
- def test_should_not_be_included_in_known_states
388
- assert_equal [], @guard.known_states
389
- end
390
- end
391
-
392
- class GuardWithMultipleExceptOnRequirementsTest < Test::Unit::TestCase
393
- def setup
394
- @object = Object.new
395
- @guard = StateMachine::Guard.new(:except_on => [:ignite, :park])
396
- end
397
-
398
- def test_should_match_if_not_included
399
- assert @guard.matches?(@object, :on => :shift_up)
400
- end
401
-
402
- def test_should_not_match_if_included
403
- assert !@guard.matches?(@object, :on => :ignite)
404
- end
405
- end
406
-
407
- class GuardWithFailuresExcludedTest < Test::Unit::TestCase
408
- def setup
409
- @object = Object.new
410
- @guard = StateMachine::Guard.new(:include_failures => false)
411
- end
412
-
413
- def test_should_use_a_blacklist_matcher
414
- assert_instance_of StateMachine::WhitelistMatcher, @guard.success_requirement
415
- end
416
-
417
- def test_should_match_if_not_specified
418
- assert @guard.matches?(@object)
419
- end
420
-
421
- def test_should_match_if_true
422
- assert @guard.matches?(@object, :success => true)
423
- end
424
-
425
- def test_should_not_match_if_false
426
- assert !@guard.matches?(@object, :success => false)
427
- end
428
- end
429
-
430
- class GuardWithFailuresIncludedTest < Test::Unit::TestCase
431
- def setup
432
- @object = Object.new
433
- @guard = StateMachine::Guard.new(:include_failures => true)
434
- end
435
-
436
- def test_should_use_all_matcher
437
- assert_equal StateMachine::AllMatcher.instance, @guard.success_requirement
438
- end
439
-
440
- def test_should_match_if_not_specified
441
- assert @guard.matches?(@object)
442
- end
443
-
444
- def test_should_match_if_true
445
- assert @guard.matches?(@object, :success => true)
446
- end
447
-
448
- def test_should_match_if_false
449
- assert @guard.matches?(@object, :success => false)
450
- end
451
- end
452
-
453
- class GuardWithConflictingFromRequirementsTest < Test::Unit::TestCase
454
- def test_should_raise_an_exception
455
- exception = assert_raise(ArgumentError) { StateMachine::Guard.new(:from => :parked, :except_from => :parked) }
456
- assert_equal 'Conflicting keys: from, except_from', exception.message
457
- end
458
- end
459
-
460
- class GuardWithConflictingToRequirementsTest < Test::Unit::TestCase
461
- def test_should_raise_an_exception
462
- exception = assert_raise(ArgumentError) { StateMachine::Guard.new(:to => :idling, :except_to => :idling) }
463
- assert_equal 'Conflicting keys: to, except_to', exception.message
464
- end
465
- end
466
-
467
- class GuardWithConflictingOnRequirementsTest < Test::Unit::TestCase
468
- def test_should_raise_an_exception
469
- exception = assert_raise(ArgumentError) { StateMachine::Guard.new(:on => :ignite, :except_on => :ignite) }
470
- assert_equal 'Conflicting keys: on, except_on', exception.message
471
- end
472
- end
473
-
474
- class GuardWithDifferentRequirementsTest < Test::Unit::TestCase
475
- def setup
476
- @object = Object.new
477
- @guard = StateMachine::Guard.new(:from => :parked, :to => :idling, :on => :ignite)
478
- end
479
-
480
- def test_should_match_empty_query
481
- assert @guard.matches?(@object)
482
- end
483
-
484
- def test_should_match_if_all_requirements_match
485
- assert @guard.matches?(@object, :from => :parked, :to => :idling, :on => :ignite)
486
- end
487
-
488
- def test_should_not_match_if_from_not_included
489
- assert !@guard.matches?(@object, :from => :idling)
490
- end
491
-
492
- def test_should_not_match_if_to_not_included
493
- assert !@guard.matches?(@object, :to => :parked)
494
- end
495
-
496
- def test_should_not_match_if_on_not_included
497
- assert !@guard.matches?(@object, :on => :park)
498
- end
499
-
500
- def test_should_be_nil_if_unmatched
501
- assert_nil @guard.match(@object, :from => :parked, :to => :idling, :on => :park)
502
- end
503
-
504
- def test_should_include_all_known_states
505
- assert_equal [:parked, :idling], @guard.known_states
506
- end
507
-
508
- def test_should_not_duplicate_known_statse
509
- guard = StateMachine::Guard.new(:except_from => :idling, :to => :idling, :on => :ignite)
510
- assert_equal [:idling], guard.known_states
511
- end
512
- end
513
-
514
- class GuardWithNilRequirementsTest < Test::Unit::TestCase
515
- def setup
516
- @object = Object.new
517
- @guard = StateMachine::Guard.new(:from => nil, :to => nil)
518
- end
519
-
520
- def test_should_match_empty_query
521
- assert @guard.matches?(@object)
522
- end
523
-
524
- def test_should_match_if_all_requirements_match
525
- assert @guard.matches?(@object, :from => nil, :to => nil)
526
- end
527
-
528
- def test_should_not_match_if_from_not_included
529
- assert !@guard.matches?(@object, :from => :parked)
530
- end
531
-
532
- def test_should_not_match_if_to_not_included
533
- assert !@guard.matches?(@object, :to => :idling)
534
- end
535
-
536
- def test_should_include_all_known_states
537
- assert_equal [nil], @guard.known_states
538
- end
539
- end
540
-
541
- class GuardWithImplicitRequirementTest < Test::Unit::TestCase
542
- def setup
543
- @guard = StateMachine::Guard.new(:parked => :idling, :on => :ignite)
544
- end
545
-
546
- def test_should_create_an_event_requirement
547
- assert_instance_of StateMachine::WhitelistMatcher, @guard.event_requirement
548
- assert_equal [:ignite], @guard.event_requirement.values
549
- end
550
-
551
- def test_should_use_a_whitelist_from_matcher
552
- assert_instance_of StateMachine::WhitelistMatcher, @guard.state_requirements.first[:from]
553
- end
554
-
555
- def test_should_use_a_whitelist_to_matcher
556
- assert_instance_of StateMachine::WhitelistMatcher, @guard.state_requirements.first[:to]
557
- end
558
- end
559
-
560
- class GuardWithMultipleImplicitRequirementsTest < Test::Unit::TestCase
561
- def setup
562
- @object = Object.new
563
- @guard = StateMachine::Guard.new(:parked => :idling, :idling => :first_gear, :on => :ignite)
564
- end
565
-
566
- def test_should_create_multiple_state_requirements
567
- assert_equal 2, @guard.state_requirements.length
568
- end
569
-
570
- def test_should_not_match_event_as_state_requirement
571
- assert !@guard.matches?(@object, :from => :on, :to => :ignite)
572
- end
573
-
574
- def test_should_match_if_from_included_in_any
575
- assert @guard.matches?(@object, :from => :parked)
576
- assert @guard.matches?(@object, :from => :idling)
577
- end
578
-
579
- def test_should_not_match_if_from_not_included_in_any
580
- assert !@guard.matches?(@object, :from => :first_gear)
581
- end
582
-
583
- def test_should_match_if_to_included_in_any
584
- assert @guard.matches?(@object, :to => :idling)
585
- assert @guard.matches?(@object, :to => :first_gear)
586
- end
587
-
588
- def test_should_not_match_if_to_not_included_in_any
589
- assert !@guard.matches?(@object, :to => :parked)
590
- end
591
-
592
- def test_should_match_if_all_options_match
593
- assert @guard.matches?(@object, :from => :parked, :to => :idling, :on => :ignite)
594
- assert @guard.matches?(@object, :from => :idling, :to => :first_gear, :on => :ignite)
595
- end
596
-
597
- def test_should_not_match_if_any_options_do_not_match
598
- assert !@guard.matches?(@object, :from => :parked, :to => :idling, :on => :park)
599
- assert !@guard.matches?(@object, :from => :parked, :to => :first_gear, :on => :park)
600
- end
601
-
602
- def test_should_include_all_known_states
603
- assert_equal [:first_gear, :idling, :parked], @guard.known_states.sort_by {|state| state.to_s}
604
- end
605
-
606
- def test_should_not_duplicate_known_statse
607
- guard = StateMachine::Guard.new(:parked => :idling, :first_gear => :idling)
608
- assert_equal [:first_gear, :idling, :parked], guard.known_states.sort_by {|state| state.to_s}
609
- end
610
- end
611
-
612
- class GuardWithImplicitFromRequirementMatcherTest < Test::Unit::TestCase
613
- def setup
614
- @matcher = StateMachine::BlacklistMatcher.new(:parked)
615
- @guard = StateMachine::Guard.new(@matcher => :idling)
616
- end
617
-
618
- def test_should_not_convert_from_to_whitelist_matcher
619
- assert_equal @matcher, @guard.state_requirements.first[:from]
620
- end
621
-
622
- def test_should_convert_to_to_whitelist_matcher
623
- assert_instance_of StateMachine::WhitelistMatcher, @guard.state_requirements.first[:to]
624
- end
625
- end
626
-
627
- class GuardWithImplicitToRequirementMatcherTest < Test::Unit::TestCase
628
- def setup
629
- @matcher = StateMachine::BlacklistMatcher.new(:idling)
630
- @guard = StateMachine::Guard.new(:parked => @matcher)
631
- end
632
-
633
- def test_should_convert_from_to_whitelist_matcher
634
- assert_instance_of StateMachine::WhitelistMatcher, @guard.state_requirements.first[:from]
635
- end
636
-
637
- def test_should_not_convert_to_to_whitelist_matcher
638
- assert_equal @matcher, @guard.state_requirements.first[:to]
639
- end
640
- end
641
-
642
- class GuardWithImplicitAndExplicitRequirementsTest < Test::Unit::TestCase
643
- def setup
644
- @guard = StateMachine::Guard.new(:parked => :idling, :from => :parked)
645
- end
646
-
647
- def test_should_create_multiple_requirements
648
- assert_equal 2, @guard.state_requirements.length
649
- end
650
-
651
- def test_should_create_implicit_requirements_for_implicit_options
652
- assert(@guard.state_requirements.any? do |state_requirement|
653
- state_requirement[:from].values == [:parked] && state_requirement[:to].values == [:idling]
654
- end)
655
- end
656
-
657
- def test_should_create_implicit_requirements_for_explicit_options
658
- assert(@guard.state_requirements.any? do |state_requirement|
659
- state_requirement[:from].values == [:from] && state_requirement[:to].values == [:parked]
660
- end)
661
- end
662
- end
663
-
664
- class GuardWithIfConditionalTest < Test::Unit::TestCase
665
- def setup
666
- @object = Object.new
667
- end
668
-
669
- def test_should_have_an_if_condition
670
- guard = StateMachine::Guard.new(:if => lambda {true})
671
- assert_not_nil guard.if_condition
672
- end
673
-
674
- def test_should_match_if_true
675
- guard = StateMachine::Guard.new(:if => lambda {true})
676
- assert guard.matches?(@object)
677
- end
678
-
679
- def test_should_not_match_if_false
680
- guard = StateMachine::Guard.new(:if => lambda {false})
681
- assert !guard.matches?(@object)
682
- end
683
-
684
- def test_should_be_nil_if_unmatched
685
- guard = StateMachine::Guard.new(:if => lambda {false})
686
- assert_nil guard.match(@object)
687
- end
688
- end
689
-
690
- class GuardWithMultipleIfConditionalsTest < Test::Unit::TestCase
691
- def setup
692
- @object = Object.new
693
- end
694
-
695
- def test_should_match_if_all_are_true
696
- guard = StateMachine::Guard.new(:if => [lambda {true}, lambda {true}])
697
- assert guard.match(@object)
698
- end
699
-
700
- def test_should_not_match_if_any_are_false
701
- guard = StateMachine::Guard.new(:if => [lambda {true}, lambda {false}])
702
- assert !guard.match(@object)
703
-
704
- guard = StateMachine::Guard.new(:if => [lambda {false}, lambda {true}])
705
- assert !guard.match(@object)
706
- end
707
- end
708
-
709
- class GuardWithUnlessConditionalTest < Test::Unit::TestCase
710
- def setup
711
- @object = Object.new
712
- end
713
-
714
- def test_should_have_an_unless_condition
715
- guard = StateMachine::Guard.new(:unless => lambda {true})
716
- assert_not_nil guard.unless_condition
717
- end
718
-
719
- def test_should_match_if_false
720
- guard = StateMachine::Guard.new(:unless => lambda {false})
721
- assert guard.matches?(@object)
722
- end
723
-
724
- def test_should_not_match_if_true
725
- guard = StateMachine::Guard.new(:unless => lambda {true})
726
- assert !guard.matches?(@object)
727
- end
728
-
729
- def test_should_be_nil_if_unmatched
730
- guard = StateMachine::Guard.new(:unless => lambda {true})
731
- assert_nil guard.match(@object)
732
- end
733
- end
734
-
735
- class GuardWithMultipleUnlessConditionalsTest < Test::Unit::TestCase
736
- def setup
737
- @object = Object.new
738
- end
739
-
740
- def test_should_match_if_all_are_false
741
- guard = StateMachine::Guard.new(:unless => [lambda {false}, lambda {false}])
742
- assert guard.match(@object)
743
- end
744
-
745
- def test_should_not_match_if_any_are_true
746
- guard = StateMachine::Guard.new(:unless => [lambda {true}, lambda {false}])
747
- assert !guard.match(@object)
748
-
749
- guard = StateMachine::Guard.new(:unless => [lambda {false}, lambda {true}])
750
- assert !guard.match(@object)
751
- end
752
- end
753
-
754
- class GuardWithConflictingConditionalsTest < Test::Unit::TestCase
755
- def test_should_match_if_if_is_true_and_unless_is_false
756
- guard = StateMachine::Guard.new(:if => lambda {true}, :unless => lambda {false})
757
- assert guard.match(@object)
758
- end
759
-
760
- def test_should_not_match_if_if_is_false_and_unless_is_true
761
- guard = StateMachine::Guard.new(:if => lambda {false}, :unless => lambda {true})
762
- assert !guard.match(@object)
763
- end
764
-
765
- def test_should_not_match_if_if_is_false_and_unless_is_false
766
- guard = StateMachine::Guard.new(:if => lambda {false}, :unless => lambda {false})
767
- assert !guard.match(@object)
768
- end
769
-
770
- def test_should_not_match_if_if_is_true_and_unless_is_true
771
- guard = StateMachine::Guard.new(:if => lambda {true}, :unless => lambda {true})
772
- assert !guard.match(@object)
773
- end
774
- end
775
-
776
- begin
777
- # Load library
778
- require 'rubygems'
779
- require 'graphviz'
780
-
781
- class GuardDrawingTest < Test::Unit::TestCase
782
- def setup
783
- @machine = StateMachine::Machine.new(Class.new)
784
- states = [:parked, :idling]
785
-
786
- graph = GraphViz.new('G')
787
- states.each {|state| graph.add_node(state.to_s)}
788
-
789
- @guard = StateMachine::Guard.new(:from => :idling, :to => :parked)
790
- @edges = @guard.draw(graph, :park, states)
791
- end
792
-
793
- def test_should_create_edges
794
- assert_equal 1, @edges.size
795
- end
796
-
797
- def test_should_use_from_state_from_start_node
798
- assert_equal 'idling', @edges.first.instance_variable_get('@xNodeOne')
799
- end
800
-
801
- def test_should_use_to_state_for_end_node
802
- assert_equal 'parked', @edges.first.instance_variable_get('@xNodeTwo')
803
- end
804
-
805
- def test_should_use_event_name_as_label
806
- assert_equal 'park', @edges.first['label']
807
- end
808
- end
809
-
810
- class GuardDrawingWithFromRequirementTest < Test::Unit::TestCase
811
- def setup
812
- @machine = StateMachine::Machine.new(Class.new)
813
- states = [:parked, :idling, :first_gear]
814
-
815
- graph = GraphViz.new('G')
816
- states.each {|state| graph.add_node(state.to_s)}
817
-
818
- @guard = StateMachine::Guard.new(:from => [:idling, :first_gear], :to => :parked)
819
- @edges = @guard.draw(graph, :park, states)
820
- end
821
-
822
- def test_should_generate_edges_for_each_valid_from_state
823
- [:idling, :first_gear].each_with_index do |from_state, index|
824
- edge = @edges[index]
825
- assert_equal from_state.to_s, edge.instance_variable_get('@xNodeOne')
826
- assert_equal 'parked', edge.instance_variable_get('@xNodeTwo')
827
- end
828
- end
829
- end
830
-
831
- class GuardDrawingWithExceptFromRequirementTest < Test::Unit::TestCase
832
- def setup
833
- @machine = StateMachine::Machine.new(Class.new)
834
- states = [:parked, :idling, :first_gear]
835
-
836
- graph = GraphViz.new('G')
837
- states.each {|state| graph.add_node(state.to_s)}
838
-
839
- @guard = StateMachine::Guard.new(:except_from => :parked, :to => :parked)
840
- @edges = @guard.draw(graph, :park, states)
841
- end
842
-
843
- def test_should_generate_edges_for_each_valid_from_state
844
- %w(idling first_gear).each_with_index do |from_state, index|
845
- edge = @edges[index]
846
- assert_equal from_state, edge.instance_variable_get('@xNodeOne')
847
- assert_equal 'parked', edge.instance_variable_get('@xNodeTwo')
848
- end
849
- end
850
- end
851
-
852
- class GuardDrawingWithoutFromRequirementTest < Test::Unit::TestCase
853
- def setup
854
- @machine = StateMachine::Machine.new(Class.new)
855
- states = [:parked, :idling, :first_gear]
856
-
857
- graph = GraphViz.new('G')
858
- states.each {|state| graph.add_node(state.to_s)}
859
-
860
- @guard = StateMachine::Guard.new(:to => :parked)
861
- @edges = @guard.draw(graph, :park, states)
862
- end
863
-
864
- def test_should_generate_edges_for_each_valid_from_state
865
- %w(parked idling first_gear).each_with_index do |from_state, index|
866
- edge = @edges[index]
867
- assert_equal from_state, edge.instance_variable_get('@xNodeOne')
868
- assert_equal 'parked', edge.instance_variable_get('@xNodeTwo')
869
- end
870
- end
871
- end
872
-
873
- class GuardDrawingWithoutToRequirementTest < Test::Unit::TestCase
874
- def setup
875
- @machine = StateMachine::Machine.new(Class.new)
876
-
877
- graph = GraphViz.new('G')
878
- graph.add_node('parked')
879
-
880
- @guard = StateMachine::Guard.new(:from => :parked)
881
- @edges = @guard.draw(graph, :park, [:parked])
882
- end
883
-
884
- def test_should_create_loopback_edge
885
- assert_equal 'parked', @edges.first.instance_variable_get('@xNodeOne')
886
- assert_equal 'parked', @edges.first.instance_variable_get('@xNodeTwo')
887
- end
888
- end
889
-
890
- class GuardDrawingWithNilStateTest < Test::Unit::TestCase
891
- def setup
892
- @machine = StateMachine::Machine.new(Class.new)
893
-
894
- graph = GraphViz.new('G')
895
- graph.add_node('parked')
896
-
897
- @guard = StateMachine::Guard.new(:from => :idling, :to => nil)
898
- @edges = @guard.draw(graph, :park, [nil, :idling])
899
- end
900
-
901
- def test_should_generate_edges_for_each_valid_from_state
902
- assert_equal 'idling', @edges.first.instance_variable_get('@xNodeOne')
903
- assert_equal 'nil', @edges.first.instance_variable_get('@xNodeTwo')
904
- end
905
- end
906
- rescue LoadError
907
- $stderr.puts 'Skipping GraphViz StateMachine::Guard tests. `gem install ruby-graphviz` and try again.'
908
- end