state_flow 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,415 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.join(File.dirname(__FILE__), 'spec_helper')
3
+
4
+ require 'net/http'
5
+
6
+ describe Order do
7
+ before(:each) do
8
+ StateFlow::Log.delete_all
9
+ Order.delete_all
10
+ end
11
+
12
+ describe "from waiting_settling" do
13
+ describe "cach_on_delivery" do
14
+ before do
15
+ @order = Order.new
16
+ @order.product_name = "Beautiful Code"
17
+ @order.payment_type = :cash_on_delivery
18
+ @order.status_key = :waiting_settling
19
+ @order.save!
20
+ Order.count.should == 1
21
+ end
22
+
23
+ it "reserve_stock succeed" do
24
+ @order.should_receive(:reserve_point)
25
+ @order.should_receive(:reserve_stock).once.and_return(:reserve_stock_ok)
26
+ @order.process_status_cd(:save => false)
27
+ @order.status_key.should == :deliver_preparing
28
+ Order.count.should == 1
29
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:waiting_settling)}).should == 1
30
+ end
31
+
32
+ it "reserve_stock fails" do
33
+ @order.should_receive(:reserve_point)
34
+ @order.should_receive(:reserve_stock).once.and_return(nil)
35
+ @order.process_status_cd(:save => false)
36
+ @order.status_key.should == :stock_error
37
+ Order.count.should == 1
38
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:waiting_settling)}).should == 1
39
+ end
40
+
41
+ it "reserve_stock failed by Net::ProtoServerError" do
42
+ @order.should_receive(:reserve_point)
43
+ @order.should_receive(:reserve_stock).once.and_raise(Net::ProtoServerError)
44
+ @order.process_status_cd
45
+ @order.status_key.should == :external_error
46
+ # saveされてます。
47
+ Order.count.should == 1
48
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:waiting_settling)}).should == 0
49
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:external_error)}).should == 1
50
+ StateFlow::Log.count.should == 0
51
+ end
52
+
53
+ it "reserve_stock failed by IOError" do
54
+ @order.should_receive(:reserve_point)
55
+ @order.should_receive(:reserve_stock).once.and_raise(IOError)
56
+ @order.process_status_cd
57
+ @order.status_key.should == :internal_error
58
+ # saveされてます。
59
+ Order.count.should == 1
60
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:waiting_settling)}).should == 0
61
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:internal_error)}).should == 1
62
+ StateFlow::Log.count.should == 0
63
+ end
64
+
65
+ it "cancel_request" do
66
+ @order.should_receive(:send_mail_cancel_requested)
67
+ @order.cancel_request
68
+ @order.status_key.should == :cancel_requested
69
+ # saveされてます。
70
+ Order.count.should == 1
71
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:cancel_requested)}).should == 1
72
+ StateFlow::Log.count.should == 0
73
+ end
74
+
75
+ it "cancel_request but raised error" do
76
+ @order.should_receive(:send_mail_cancel_requested).and_raise(IOError)
77
+ @order.cancel_request
78
+ @order.status_key.should == :internal_error
79
+ # saveされてます。
80
+ Order.count.should == 1
81
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:internal_error)}).should == 1
82
+ StateFlow::Log.count.should == 0
83
+ end
84
+ end
85
+
86
+ describe "credit_card" do
87
+ before do
88
+ @order = Order.new
89
+ @order.product_name = "Beautiful Code"
90
+ @order.payment_type = :credit_card
91
+ @order.status_key = :waiting_settling
92
+ @order.save!
93
+ Order.count.should == 1
94
+ end
95
+
96
+ it "reserve_stock succeed step by step" do
97
+ @order.should_receive(:reserve_point)
98
+ @order.should_receive(:reserve_stock).with(:temporary => true).once.and_return(:reserve_stock_ok)
99
+ @order.process_status_cd(:save => false, :keep_process => false)
100
+ @order.status_key.should == :online_settling
101
+ # saveされてません。
102
+ Order.count.should == 1
103
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:waiting_settling)}).should == 1
104
+ @order.save!
105
+ Order.count.should == 1
106
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:online_settling)}).should == 1
107
+ end
108
+
109
+ it "reserve_stock succeed keep_process" do
110
+ @order.should_receive(:reserve_point)
111
+ @order.should_receive(:reserve_stock).with(:temporary => true).once.and_return(:reserve_stock_ok)
112
+ @order.should_receive(:reserve_stock).once.and_return(:reserve_stock_ok)
113
+ @order.should_receive(:settle).once.and_return(:ok)
114
+ @order.process_status_cd
115
+ @order.status_key.should == :deliver_preparing
116
+ # saveされてます。
117
+ Order.count.should == 1
118
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:deliver_preparing)}).should == 1
119
+ end
120
+
121
+ it "reserve_stock succeed keep_process but failed" do
122
+ @order.should_receive(:reserve_point)
123
+ @order.should_receive(:reserve_stock).with(:temporary => true).once.and_return(:reserve_stock_ok)
124
+ @order.should_receive(:reserve_stock).once.and_raise(IOError)
125
+ @order.should_receive(:settle).once.and_return(:ok)
126
+ @order.process_status_cd
127
+ @order.status_key.should == :settlement_error # 決済時の例外はすべて:settlement_errorにします。
128
+ # saveされてます。
129
+ Order.count.should == 1
130
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:settlement_error)}).should == 1
131
+ end
132
+
133
+ it "reserve_stock fails" do
134
+ @order.should_receive(:reserve_point)
135
+ @order.should_receive(:reserve_stock).with(:temporary => true).once.and_return(nil)
136
+ @order.process_status_cd
137
+ @order.status_key.should == :stock_error
138
+ # saveされてます。
139
+ Order.count.should == 1
140
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:waiting_settling)}).should == 0
141
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:stock_error)}).should == 1
142
+ StateFlow::Log.count.should == 0
143
+ end
144
+
145
+ it "StockShortageError raised" do
146
+ @order.product_name = "Refactoring"
147
+ @order.should_receive(:reserve_point)
148
+ @order.should_receive(:reserve_stock).with(:temporary => true).once.and_raise(Order::StockShortageError)
149
+ Order.transaction do
150
+ @order.process_status_cd
151
+ end
152
+ @order.status_key.should == :stock_error
153
+ Order.count.should == 1
154
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:stock_error)}).should == 1
155
+ # ステータスはちゃんと変わっているけど、他のデータはロールバックされていなければならない
156
+ Order.count(:conditions => {:product_name => "Refactoring"}).should == 0
157
+ Order.count(:conditions => {:product_name => "Beautiful Code"}).should == 1
158
+ # StateFlow::Log.count.should == 1
159
+ end
160
+ end
161
+
162
+ describe "bank_deposit" do
163
+ before do
164
+ @order = Order.new
165
+ @order.product_name = "Beautiful Code"
166
+ @order.payment_type = :bank_deposit
167
+ @order.status_key = :waiting_settling
168
+ @order.save!
169
+ Order.count.should == 1
170
+ end
171
+
172
+ it "reserve_stock succeed" do
173
+ @order.should_receive(:reserve_point)
174
+ @order.should_receive(:reserve_stock).with(:temporary => true).once.and_return(:reserve_stock_ok)
175
+ @order.should_receive(:send_mail_thanks)
176
+ @order.process_status_cd(:save => false)
177
+ @order.status_key.should == :receiving
178
+ Order.count.should == 1
179
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:waiting_settling)}).should == 1
180
+ end
181
+
182
+ it "reserve_stock fails" do
183
+ @order.should_receive(:reserve_point)
184
+ @order.should_receive(:reserve_stock).with(:temporary => true).once.and_return(nil)
185
+ @order.process_status_cd(:save => false)
186
+ @order.status_key.should == :stock_error
187
+ Order.count.should == 1
188
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:waiting_settling)}).should == 1
189
+ end
190
+ end
191
+
192
+ describe "foreign_payment" do
193
+ before do
194
+ @order = Order.new
195
+ @order.product_name = "Beautiful Code"
196
+ @order.payment_type = :foreign_payment
197
+ @order.status_key = :waiting_settling
198
+ @order.save!
199
+ Order.count.should == 1
200
+ end
201
+
202
+ it "reserve_stock succeed" do
203
+ @order.should_receive(:reserve_point)
204
+ @order.should_receive(:reserve_stock).with(:temporary => true).once.and_return(:reserve_stock_ok)
205
+ @order.should_receive(:settle)
206
+ @order.process_status_cd(:save => false)
207
+ @order.status_key.should == :online_settling
208
+ Order.count.should == 1
209
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:waiting_settling)}).should == 1
210
+ end
211
+
212
+ it "reserve_stock fails" do
213
+ @order.should_receive(:reserve_point)
214
+ @order.should_receive(:reserve_stock).with(:temporary => true).once.and_return(nil)
215
+ @order.should_receive(:send_mail_stock_shortage)
216
+ @order.process_status_cd(:save => false)
217
+ @order.status_key.should == :stock_error
218
+ Order.count.should == 1
219
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:waiting_settling)}).should == 1
220
+ end
221
+ end
222
+ end
223
+
224
+ describe "from online_settling" do
225
+ describe "credit_card" do
226
+ before do
227
+ @order = Order.new
228
+ @order.product_name = "Beautiful Code"
229
+ @order.payment_type = :credit_card
230
+ @order.status_key = :online_settling
231
+ @order.save!
232
+ Order.count.should == 1
233
+ end
234
+
235
+ it "settle succeed" do
236
+ @order.should_receive(:settle).and_return(:ok)
237
+ @order.should_receive(:reserve_stock)
238
+ @order.should_receive(:send_mail_thanks)
239
+ @order.process_status_cd
240
+ @order.status_key.should == :deliver_preparing
241
+ Order.count.should == 1
242
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:deliver_preparing)}).should == 1
243
+ end
244
+
245
+ it "settle failed" do
246
+ @order.should_receive(:settle).and_return(nil)
247
+ @order.should_receive(:release_stock)
248
+ @order.should_receive(:delete_point)
249
+ @order.process_status_cd
250
+ @order.status_key.should == :settlement_error
251
+ Order.count.should == 1
252
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:settlement_error)}).should == 1
253
+ end
254
+
255
+ it "settle failed by IOError" do
256
+ @order.should_receive(:settle).and_raise(IOError)
257
+ @order.should_receive(:release_stock)
258
+ @order.should_receive(:delete_point)
259
+ @order.process_status_cd
260
+ @order.status_key.should == :settlement_error
261
+ Order.count.should == 1
262
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:settlement_error)}).should == 1
263
+ end
264
+ end
265
+
266
+ describe "foreign_payment" do
267
+ before do
268
+ @order = Order.new
269
+ @order.product_name = "Beautiful Code"
270
+ @order.payment_type = :foreign_payment
271
+ @order.status_key = :online_settling
272
+ @order.save!
273
+ Order.count.should == 1
274
+ end
275
+
276
+ it "event must be called as a method" do
277
+ @order.should_not_receive(:settle)
278
+ @order.should_not_receive(:reserve_stock)
279
+ @order.should_not_receive(:send_mail_thanks)
280
+ @order.process_status_cd
281
+ @order.status_key.should == :online_settling
282
+ Order.count.should == 1
283
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:online_settling)}).should == 1
284
+ end
285
+
286
+ it "event must be called as a method" do
287
+ @order.should_not_receive(:settle)
288
+ @order.should_not_receive(:reserve_stock)
289
+ @order.should_not_receive(:send_mail_thanks)
290
+ @order.settlement_ok # イベント実行
291
+ @order.status_key.should == :deliver_preparing
292
+ Order.count.should == 1
293
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:deliver_preparing)}).should == 1
294
+ end
295
+
296
+ it "settle failed" do
297
+ @order.should_receive(:release_stock)
298
+ @order.should_receive(:delete_point)
299
+ @order.should_receive(:send_mail_invalid_purchage)
300
+ @order.settlement_ng # イベント実行
301
+ @order.status_key.should == :settlement_error
302
+ Order.count.should == 1
303
+ Order.count(:conditions => {:status_cd => Order.status_id_by_key(:settlement_error)}).should == 1
304
+ end
305
+ end
306
+ end
307
+
308
+ describe "structure" do
309
+ it "states" do
310
+ flow = Order.state_flow_for(:status_cd)
311
+ flow.states.length.should == 2
312
+ end
313
+
314
+ it "all_states" do
315
+ flow = Order.state_flow_for(:status_cd)
316
+ flow.all_states.values.map{|s| s.name.to_s}.sort.should == [
317
+ :valid, :auto_cancelable, :waiting_settling, :online_settling,
318
+ :receiving, :deliver_preparing, :deliver_requested, :delivered,
319
+ :deliver_notified, :canceling, :cancel_requested, :canceled,
320
+ :error, :settlement_error, :stock_error, :internal_error, :external_error
321
+ ].map{|s| s.to_s}.sort
322
+ flow.all_states.length.should == 17
323
+ end
324
+
325
+ it "concrete_states" do
326
+ flow = Order.state_flow_for(:status_cd)
327
+ flow.concrete_states.values.map{|s| s.name.to_s}.sort.should == [
328
+ :waiting_settling, :online_settling,
329
+ :receiving, :deliver_preparing, :deliver_requested, :delivered,
330
+ :deliver_notified, :cancel_requested, :canceled,
331
+ :settlement_error, :stock_error, :internal_error, :external_error
332
+ ].map{|s| s.to_s}.sort
333
+ flow.concrete_states.length.should == 13
334
+ end
335
+
336
+ it "origin" do
337
+ flow = Order.state_flow_for(:status_cd)
338
+ flow.origin.class.should == StateFlow::State
339
+ flow.origin.name == :waiting_settling
340
+ end
341
+
342
+ it "waiting_settling" do
343
+ flow = Order.state_flow_for(:status_cd)
344
+ state = flow.origin
345
+ state.guards.length.should == 2
346
+ state.events.length.should == 1
347
+ state.action.should be_nil
348
+ g0 = state.guards[0]
349
+ g0.name.should == :pay_cash_on_delivery?
350
+ g0.action.method_name.should == :reserve_point
351
+ g0.action.action.method_name.should == :reserve_stock
352
+ g0.action.action.events.length.should == 2
353
+ g0.action.action.events[0].should be_a(StateFlow::ActionEvent)
354
+ g0.action.action.events[1].should be_a(StateFlow::ActionEvent)
355
+ g0.action.action.events[0].destination.should == :deliver_preparing
356
+ g0.action.action.events[1].action.method_name.should == :delete_point
357
+ g0.action.action.events[1].action.destination.should == :stock_error
358
+ g1 = state.guards[1]
359
+ g1.class.should == StateFlow::Guard
360
+ g1.action.method_name.should == :reserve_point
361
+ a1 = g1.action.action
362
+ a1.method_name.should == :reserve_stock
363
+ a1.method_args.should == [:temporary => true]
364
+ a1.events[0].should be_a(StateFlow::ActionEvent)
365
+ a1.events[1].should be_a(StateFlow::ActionEvent)
366
+ a1.events[0].matcher.should == :reserve_stock_ok
367
+ g00 = a1.events[0].guards[0]
368
+ g00.name.should == :bank_deposit?
369
+ g00.action.method_name.should == :send_mail_thanks
370
+ g00.action.destination.should ==:receiving
371
+ g01 = a1.events[0].guards[1]
372
+ g01.name.should == :credit_card?
373
+ g01.destination.should ==:online_settling
374
+ g02 = a1.events[0].guards[2]
375
+ g02.name.should == :foreign_payment?
376
+ g02.action.method_name.should == :settle
377
+ g02.action.destination.should ==:online_settling
378
+ e1 = a1.events[1]
379
+ e1.should be_a(StateFlow::ActionEvent)
380
+ e1.guards[0].action.method_name.should == :delete_point
381
+ e1.guards[0].action.action.method_name.should == :send_mail_stock_shortage
382
+ e1.destination.should == :stock_error
383
+ end
384
+
385
+ it ":online_settling" do
386
+ flow = Order.state_flow_for(:status_cd)
387
+ state = flow.concrete_states[:online_settling]
388
+ g0 = state.guards[0]
389
+ g0.name.should == :credit_card?
390
+ g0.action.method_name.should == :settle
391
+ e0 = g0.action.events[0]
392
+ e0.should be_a(StateFlow::ActionEvent)
393
+ e0.action.method_name.should == :reserve_stock
394
+ e0.action.action.method_name.should == :send_mail_thanks
395
+ e0.action.action.destination.should == :deliver_preparing
396
+ e1 = g0.action.events[1]
397
+ e1.should be_a(StateFlow::ActionEvent)
398
+ e1.action.method_name.should == :release_stock
399
+ e1.action.action.method_name.should == :delete_point
400
+ e1.action.action.destination.should == :settlement_error
401
+ g1 = state.guards[1]
402
+ g1.name.should == :foreign_payment?
403
+ e2 = g1.events[0]
404
+ e2.should be_a(StateFlow::NamedEvent)
405
+ e2.destination.should == :deliver_preparing
406
+ e3 = g1.events[1]
407
+ e3.should be_a(StateFlow::NamedEvent)
408
+ e3.action.method_name.should == :release_stock
409
+ e3.action.action.method_name.should == :delete_point
410
+ e3.action.action.action.method_name.should == :send_mail_invalid_purchage
411
+ e3.action.action.action.destination.should == :settlement_error
412
+ end
413
+ end
414
+
415
+ end
@@ -0,0 +1,171 @@
1
+ # -*- coding: utf-8 -*-
2
+ class Order < ActiveRecord::Base
3
+
4
+ class StockShortageError < StandardError
5
+ end
6
+
7
+ selectable_attr :status_cd do
8
+ entry '00', :waiting_settling , '決済前'
9
+ entry '01', :online_settling , '決済中'
10
+ entry '02', :receiving , '入金待ち'
11
+ entry '03', :deliver_preparing, '配送準備中'
12
+ entry '04', :deliver_requested, '配送指示済'
13
+ entry '05', :delivered , '配送済'
14
+ entry '06', :deliver_notified , '配送案内済'
15
+ entry '07', :cancel_requested , 'キャンセル依頼中'
16
+ entry '08', :canceled , 'キャンセル完了'
17
+ entry '19', :settlement_error , '決済NG'
18
+ entry '10', :stock_error , '在庫不足エラー'
19
+ entry '11', :internal_error , '内部エラー'
20
+ entry '12', :external_error , '外部エラー'
21
+ end
22
+
23
+ state_flow(:status_cd) do
24
+ origin(:waiting_settling)
25
+
26
+ group(:valid) do # 正常系
27
+ # recoverの順番は重要。Exceptionを先に書くと全ての例外は:internal_errorになってしまいます。
28
+ recover(:'Net::HTTPHeaderSyntaxError').to(:external_error)
29
+ recover(:'Net::ProtocolError').to(:external_error)
30
+ recover(:'Exception').to(:internal_error)
31
+
32
+ group(:auto_cancelable) do # 自動キャンセル可
33
+
34
+ from(:waiting_settling) do
35
+ # actionは続けて書くこともできます。
36
+ guard(:pay_cash_on_delivery?).action(:reserve_point).action(:reserve_stock){
37
+ event(:reserve_stock_ok).to(:deliver_preparing)
38
+ event_else.action(:delete_point).to(:stock_error)
39
+ }
40
+ # guard_elseは他のガード(群)に該当しなかった場合のガードです。
41
+ guard_else.action(:reserve_point).action(:reserve_stock, :temporary => true){
42
+ # 一行で書けない処理群はブロックを用いて書くことができます。
43
+ event(:reserve_stock_ok){
44
+ guard(:bank_deposit?).action(:send_mail_thanks).to(:receiving)
45
+ guard(:credit_card?).to(:online_settling)
46
+ guard(:foreign_payment?).action(:settle).to(:online_settling)
47
+ }
48
+ event_else{
49
+ guard(:foreign_payment?).action(:delete_point).action(:send_mail_stock_shortage)
50
+ }.to(:stock_error)
51
+
52
+ # この上の書き方は以下と同じ意味を持ちます。
53
+ # event_else{
54
+ # guard(:foreign_payment?).action(:send_mail_stock_shortage).to(:stock_error)
55
+ # guard_else.to(:stock_error)
56
+ # }
57
+ }
58
+
59
+ # sqlite3ではテスト中にロールバックすると、transactionの中なのに
60
+ # cannot rollback - no transaction is active
61
+ # とか言われちゃうので、rolling_backをfalseにしてます。
62
+ recover(StockShortageError, :rolling_back => (ENV['DB'] || 'sqlite3') != 'sqlite3').to(:stock_error)
63
+ end
64
+
65
+ from(:online_settling) do
66
+ guard(:credit_card?).action(:settle){
67
+ event(:ok).action(:reserve_stock).action(:send_mail_thanks).to(:deliver_preparing)
68
+ event_else.action(:release_stock).action(:delete_point).to(:settlement_error)
69
+ }
70
+ guard(:foreign_payment?){
71
+ event(:settlement_ok).to(:deliver_preparing)
72
+ event(:settlement_ng).action(:release_stock).action(:delete_point).action(:send_mail_invalid_purchage).to(:settlement_error)
73
+ }
74
+ recover(Exception).action(:release_stock).action(:delete_point).to(:settlement_error)
75
+ end
76
+
77
+ from :receiving do
78
+ event(:confirm_receiving) {
79
+ action :reserve_stock
80
+ action :send_mail_payment_complete
81
+ to :deliver_preparing
82
+ }
83
+ end
84
+
85
+ from :deliver_preparing do
86
+ event(:deliver_request).
87
+ action(:reduce_stock).
88
+ action(:send_mail_deliver_request).
89
+ to(:deliver_requested)
90
+ end
91
+
92
+ event(:cancel_request) {
93
+ action(:send_mail_cancel_requested)
94
+ }.to(:cancel_requested)
95
+
96
+ event(:cancel) {
97
+ action(:release_reserve)
98
+ action(:delete_point)
99
+ action(:send_mail_cancel_complete)
100
+ }.to(:canceled)
101
+ end
102
+
103
+ from(:deliver_requested) do
104
+ event(:deliver).action(:send_mail_shipping_for_shop).action(:send_mail_shipping_for_customer).to(:delivered)
105
+ event(:cancel_request).action(:send_mail_cancel_requested).to(:cancel_requested)
106
+ end
107
+
108
+ from(:delivered) do
109
+ event(:deliver_notify).action(:send_mail_deliver_notification).to(:deliver_notified)
110
+ end
111
+
112
+ termination(:deliver_notified) # 終端
113
+
114
+ state_group(:canceling) do # 正常なキャンセル系
115
+ from :cancel_requested do
116
+ event(:accept_cancel) {
117
+ action(:release_reserve)
118
+ action(:delete_point)
119
+ action(:send_mail_cancel_complete)
120
+ }.to(:canceled)
121
+ end
122
+
123
+ termination(:canceled) # 終端
124
+ end
125
+ end
126
+
127
+ group(:error) do # 異常系
128
+ from(:settlement_error) do
129
+ action(:send_mail_settlement_error)
130
+ # to(:settlement_error) # 遷移しない
131
+ end
132
+
133
+ state(:stock_error)
134
+ state(:internal_error)
135
+ state(:external_error)
136
+
137
+ termination # 終端
138
+ end
139
+ end
140
+
141
+ validates_presence_of :product_name
142
+
143
+ attr_accessor :payment_type
144
+ def pay_cash_on_delivery?; payment_type == :cash_on_delivery; end
145
+ def bank_deposit? ; payment_type == :bank_deposit ; end
146
+ def credit_card? ; payment_type == :credit_card ; end
147
+ def foreign_payment? ; payment_type == :foreign_payment ; end
148
+
149
+ attr_accessor :reserve_stock_result
150
+
151
+ def reserve_point; end
152
+ def delete_point; end
153
+
154
+ def reserve_stock(*args); end
155
+ def release_stock; end
156
+ def reduce_stock; end
157
+
158
+ def settle; end
159
+
160
+ def send_mail_thanks; end
161
+ def send_mail_stock_shortage; end
162
+ def send_mail_invalid_purchage; end
163
+ def send_mail_deliver_request; end
164
+ def send_mail_cancel_requested; end
165
+ def send_mail_cancel_complete; end
166
+ def send_mail_shipping_for_shop; end
167
+ def send_mail_shipping_for_customer; end
168
+ def send_mail_deliver_notification; end
169
+ def send_mail_settlement_error; end
170
+
171
+ end
data/spec/schema.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  ActiveRecord::Schema.define(:version => 0) do
2
2
  # Users are created and updated by other Users
3
- create_table :pages, :force => true do |t|
4
- t.column :name, :string
3
+ create_table :orders, :force => true do |t|
4
+ t.column :product_name, :string
5
5
  t.column :status_cd , :string, :limit => 2, :null => false, :default => '00'
6
6
  t.column :created_on, :datetime
7
7
  t.column :updated_at, :datetime
@@ -10,15 +10,10 @@ ActiveRecord::Schema.define(:version => 0) do
10
10
  create_table :state_flow_logs, :force => true do |t|
11
11
  t.string :target_type
12
12
  t.integer :target_id
13
- t.string :origin_state
14
- t.string :origin_state_key
15
- t.string :dest_state
16
- t.string :dest_state_key
17
13
  t.string :level, :limit => 5, :null => false, :default => 'debug'
18
14
  t.text :descriptions
19
15
  t.datetime :created_on
20
16
  t.datetime :updated_at
21
17
  end
22
-
23
18
 
24
19
  end
data/spec/spec_helper.rb CHANGED
@@ -33,9 +33,7 @@ unless defined?(RAILS_ENV)
33
33
  ActiveRecord::Base.logger.formatter = FormatterWithThread.new
34
34
  # ActionController::Base.logger = ActiveRecord::Base.logger
35
35
 
36
- ActiveRecord::Base.establish_connection(
37
- {:pool => 10}.update(config[ENV['DB'] || 'sqlite3'])
38
- )
36
+ ActiveRecord::Base.establish_connection(config[ENV['DB'] || 'sqlite3'])
39
37
 
40
38
  load(File.join(File.dirname(__FILE__), 'schema.rb'))
41
39