(::)な方、添削願います!

今回書いた、featureとstepsのうち一部をさらしました。 既にCucumberを使っている方 添削、ご意見をお願いいたします m(__)m

feature

フィーチャ: お客様登録なしの買い物
  Shopでの買い物が正しく行えるようにする
  お客様とShop経営者
  ちゃんと商品が買える

  シナリオ: 商品をカートに入れてショッピングカートを表示
    前提 商品"プリンセスコットン"のページを表示している

    もし "2"番目の注文欄に"2"と入力する
    かつ "買い物かごへ入れる"ボタンをクリックする
    かつ "お買い物内容"リンクをクリックする
    ならば "お買い物内容"と表示されていること
    かつ "¥40,000"と表示されていること

  シナリオ: 注文手続きへを開始し、送り先と支払い方式を入力すると、正しい注文確認画面が表示される
    前提 カートに商品を入れてお買い物内容ページを表示している
    
    もし "ご注文手続きへ"ボタンをクリックする
    かつ ここで、以下のように入力する
      | メールアドレス | yy@ey-office.com |
      | お名前 | 吉田ゆうみ |
      | 〒 | 152-0011 |
      | 住所(都道府県番地) | 東京都目黒区字1−1 |
      | 住所(アパート等) | 目黒荘 |
      | 送り先電話番号 | 03-3345-1122 |
      | 連絡用電話番号 | 090-1154-8801 |
    かつ "次へ (支払い方法選択"ボタンをクリックする
    
    かつ "支払い方法"から"代引き"を選択する
    かつ "配達希望日"から"明後日"を選択する
    かつ "配達希望時間"から"午前中"を選択する
    かつ "ご要望、ご相談等がありましたらお書き下さい。"に"配送は早い時間を希望"と入力する
    かつ "次へ (注文内容確認"ボタンをクリックする
    
    ならば "ご注文内容をご確認下さい"と表示されていること
    かつ "合計"表示欄に"¥40,000"と表示されていること
    かつ 以下のような情報が表示されていること
      | メールアドレス | yy@ey-office.com |
      | お名前 | 吉田ゆうみ |
      | 〒 | 152-0011 |
      | 住所(都道府県番地) | 東京都目黒区字1−1 |
      | 住所(アパート等) | 目黒荘 |
      | 送り先電話番号 | 03-3345-1122 |
      | 連絡用電話番号 | 090-1154-8801 |
      | 支払い方法 | 代引き |
      | 配達希望日 | 明後日 |
      | 配達希望時間 | 午前中 |
      | 通信欄 | 配送は早い時間を希望 |

  シナリオ: 注文手続きへを開始し、送り先と支払い方式を入力するし発注すると、システム内に注文情報が出来、お客様とスタッフにメールが送られる
    前提 システム内に注文情報は無い
    かつ メールボックスが空になっている
    かつ カートに商品を入れてお買い物内容ページを表示している

    もし "ご注文手続きへ"ボタンをクリックする
    かつ ここで、送り先情報を入力する
    かつ "次へ (支払い方法選択"ボタンをクリックする
    かつ ここで、支払い情報を入力する
    かつ "次へ (注文内容確認"ボタンをクリックする
    かつ "決定する"ボタンをクリックする
    
    ならば "お買い上げありがとうございました"と表示されていること
    かつ システム内に注文情報が出来ている
    かつ "yy@ey-office.com" がメールを1通受信していること
    かつ "スタッフメールアドレス" がメールを1通受信していること
    
  シナリオ: 注文手続きへを開始し、送り先入力が正しくない場合にエラーが表示される
    前提 カートに商品を入れてお買い物内容ページを表示している

    もし "ご注文手続きへ"ボタンをクリックする
    かつ ここで、以下のように入力する
      | メールアドレス | yy |
      | お名前 | 吉田ゆうみ |
      | 〒 | 152-00111 |
      | 住所(都道府県番地) | |
      | 送り先電話番号 | 03-3345-1A11 |
    かつ "次へ (支払い方法選択"ボタンをクリックする
  
    ならば "入力に間違いがあります"と表示されていること
    かつ "送り先メールアドレス は不正な値です"と表示されていること
    かつ "送り先住所(都道府県番地) を入力してください"と表示されていること
    かつ "送り先郵便番号 は不正な値です"と表示されていること

  シナリオ: 注文手続きへを開始、し送り先と支払い方式を入力、もう一度商品画面に戻って購入し、注文手続きを行うと送り先と支払い方式が記憶されている
    前提 カートに商品を入れてお買い物内容ページを表示している
    
    もし "ご注文手続きへ"ボタンをクリックする
    かつ ここで、送り先情報を入力する
    かつ "次へ (支払い方法選択"ボタンをクリックする
    かつ ここで、支払い情報を入力する
    かつ "次へ (注文内容確認"ボタンをクリックする

    かつ 商品"プリンセスコットン"のページを表示する
    かつ "2"番目の注文欄に"1"と入力する
    かつ "買い物かごへ入れる"ボタンをクリックする
    かつ "お買い物内容"リンクをクリックする
    かつ "ご注文手続きへ"ボタンをクリックする
    かつ "次へ (支払い方法選択"ボタンをクリックする
    かつ "次へ (注文内容確認"ボタンをクリックする
    
    ならば "合計"表示欄に"¥60,000"と表示されていること
    かつ 以下のような情報が表示されていること
      | メールアドレス | yy@ey-office.com |
      | お名前 | 吉田ゆうみ |
      | 〒 | 152-0011 |
      | 住所(都道府県番地) | 東京都目黒区字1−1 |
      | 住所(アパート等) | 目黒荘 |
      | 送り先電話番号 | 03-3345-1122 |
      | 連絡用電話番号 | 090-1154-8801 |
      | 支払い方法 | 代引き |
      | 配達希望日 | 明後日 |
      | 配達希望時間 | 午前中 |
      | 通信欄 | 配送は早い時間を希望 |
 

steps

#
# shopping専用 steps
#
World(FixtureAccess)

Given /^商品"([^\"]*)"のページを表示している$/ do |name|
  visit product_path(Product.find_by_name(name).id)
end

Given /^カートに商品を入れてお買い物内容ページを表示している/ do
  Given %!商品"プリンセスコットン"のページを表示している!
  When  %!"2"番目の注文欄に"2"と入力する!
  When  %!"買い物かごへ入れる"ボタンをクリックする!
  When  %!"お買い物内容"リンクをクリックする!
end

Given /^システム内に注文情報は無い/ do
  Order.delete_all
end

When /^商品"([^\"]*)"のページを表示する$/ do |name|
  visit product_path(Product.find_by_name(name).id)
end

When /^ここで、以下のように入力する$/ do |fields|
  fields.rows_hash.each do |name, value|
    When %!I fill in "#{name}" with "#{value}"!
  end
end

When /^"([^\"]*)"番目の注文欄に"([^\"]*)"と入力する$/ do |no, value|
  When %!I fill in "quantities_#{no}" with "#{value}"!
end

When /^ここで、送り先情報を入力する/ do
  When "ここで、以下のように入力する", table(%{
    | メールアドレス | yy@ey-office.com |
    | お名前 | 吉田ゆうみ |
    | 〒 | 152-0011 |
    | 住所(都道府県番地) | 東京都目黒区字1−1 |
    | 住所(アパート等) | 目黒荘 |
    | 送り先電話番号 | 03-3345-1122 |
    | 連絡用電話番号 | 090-1154-8801 |
  })
end

When /^ここで、支払い情報を入力する/ do
  When %!"支払い方法"から"代引き"を選択する!
  When %!"配達希望日"から"明後日"を選択する!
  When %!"配達希望時間"から"午前中"を選択する!
  When %!"ご要望、ご相談等がありましたらお書き下さい。"に"配送は早い時間を希望"と入力する!
end

Then /^以下のような情報が表示されていること$/ do |fields|
  fields.rows_hash.all? do |name, value|
    Then "I should see /#{name}[:\\s]*#{value}/"
  end
end

Then /^"([^\"]*)"表示欄に"([^\"]*)"と表示されていること$/ do |name, text|
  When %!I should see "#{text}" within "#{name2selector(name)}"!
end

Then /システム内に注文情報が出来ている/ do
  Order.count("settled") == 1
end


# -------------------------------------------------------------------------

Transform /明後日/ do |step_arg|
  (Time.now.since 2.day).strftime("%m月%d日")
end

Transform /スタッフメールアドレス/ do |step_arg|
  "yuumi3@ey-office.com"
end

Transform /パスワード再設定URL/ do |step_arg|
  url_for(:controller=>'password', :action=>'reset')
end

# -------------------------------------------------------------------------

def name2selector(name)
  case name
  when "合計" then "#total"
  end
end