[from now] 2012/09/01 15:40:11

diff --git a/src/main/groovy/tddbc/VendingMachine.groovy b/src/main/groovy/tddbc/VendingMachine.groovy
index 355cd07..c9b335f 100644
--- a/src/main/groovy/tddbc/VendingMachine.groovy
+++ b/src/main/groovy/tddbc/VendingMachine.groovy
@@ -1,10 +1,24 @@
 package tddbc

+/**
+ * 自動販売機です。
+ */
 class VendingMachine {

-    Integer total = 0
+    /** 許可するお金 */
     static final List ALLOW_MONEYS = [10, 50, 100, 500, 1000]

+    /** 合計金額 */
+    Integer total = 0
+
+    /**
+     * お金を投入します。
+     * <p>
+     * 許可されないお金が投入された場合はそのまま釣り銭として返します。
+     *
+     * @param coin お金
+     * @return 釣り銭
+     */
     def insert(Integer coin) {
         if (ALLOW_MONEYS.contains(coin)) {
             total += coin
@@ -13,6 +27,13 @@ class VendingMachine {
         coin
     }

+    /**
+     * 払い戻しをします。
+     * <p>
+     * 現在投入されている金額を返し、合計金額を0にします。
+     *
+     * @return 釣り銭
+     */
     def refund() {
         def refund = total
         total = 0
[from now] 2012/09/01 16:52:03

diff --git a/src/main/groovy/tddbc/UnusableMoneyUsedException.groovy b/src/main/groovy/tddbc/UnusableMoneyUsedException.groovy
new file mode 100644
index 0000000..e06bd95
--- /dev/null
+++ b/src/main/groovy/tddbc/UnusableMoneyUsedException.groovy
@@ -0,0 +1,7 @@
+package tddbc
+
+class UnusableMoneyUsedException extends RuntimeException {
+
+    Integer insertedMoney
+
+}
diff --git a/src/main/groovy/tddbc/VendingMachine.groovy b/src/main/groovy/tddbc/VendingMachine.groovy
index c9b335f..9ed7035 100644
--- a/src/main/groovy/tddbc/VendingMachine.groovy
+++ b/src/main/groovy/tddbc/VendingMachine.groovy
@@ -11,20 +11,24 @@ class VendingMachine {
     /** 合計金額 */
     Integer total = 0

+    /** 投入されたお金 */
+    List insertedMoney = []
+
     /**
      * お金を投入します。
      * <p>
      * 許可されないお金が投入された場合はそのまま釣り銭として返します。
      *
-     * @param coin お金
+     * @param money お金
      * @return 釣り銭
      */
-    def insert(Integer coin) {
-        if (ALLOW_MONEYS.contains(coin)) {
-            total += coin
-            return 0
+    void insert(Integer money) {
+        if (ALLOW_MONEYS.contains(money)) {
+            total += money
+            insertedMoney << money
+            return
         }
-        coin
+        throw new UnusableMoneyUsedException(insertedMoney: money)
     }

     /**
@@ -37,7 +41,7 @@ class VendingMachine {
     def refund() {
         def refund = total
         total = 0
-        refund
+        insertedMoney
     }

 }
diff --git a/src/test/groovy/tddbc/VendingMachineSpec.groovy b/src/test/groovy/tddbc/VendingMachineSpec.groovy
index 9bd768d..b92e94e 100644
--- a/src/test/groovy/tddbc/VendingMachineSpec.groovy
+++ b/src/test/groovy/tddbc/VendingMachineSpec.groovy
@@ -17,34 +17,34 @@ class VendingMachineSpec extends Specification {
     }

     @Unroll
-    def "#coin円を入れて総計を取得すると#total円を取得できる"() {
+    def "#money円を入れて総計を取得すると#total円を取得できる"() {
         when:
-        assert vendingMachine.insert(coin) == 0
+        vendingMachine.insert(money)

         then:
         vendingMachine.total == total

         where:
-        coin | total
-        10   | 10
-        50   | 50
-        100  | 100
-        500  | 500
-        1000 | 1000
+        money | total
+        10    | 10
+        50    | 50
+        100   | 100
+        500   | 500
+        1000  | 1000
     }

     @Unroll
-    def "硬貨#coinsを入れて総計を取得すると#total円となる"() {
+    def "硬貨#moneyListを入れて総計を取得すると#total円となる"() {
         when:
-        coins.each { coin ->
-            vendingMachine.insert(coin)
+        moneyList.each { money ->
+            vendingMachine.insert(money)
         }

         then:
         vendingMachine.total == total

         where:
-        coins                    | total
+        moneyList                | total
         [10, 10]                 | 20
         [10, 50, 100]            | 160
         [10, 50, 100, 500]       | 660
@@ -52,44 +52,45 @@ class VendingMachineSpec extends Specification {
     }

-    def "何もしないで払い戻しすると0円を取得できる"() {
+    def "何もしないで払い戻しすると空の集合が取得できる"() {
         expect:
-        vendingMachine.refund() == 0
+        vendingMachine.refund() == []
     }

     @Unroll
-    def "#coin円を入れて払い戻しをすると#change円を取得できる"() {
+    def "#money円を入れて払い戻しをすると#changeを取得できる"() {
         when:
-        vendingMachine.insert(coin)
+        vendingMachine.insert(money)

         then:
         vendingMachine.refund() == change

         where:
-        coin | change
-        10   | 10
-        50   | 50
-        100  | 100
-        500  | 500
-        1000 | 1000
+        money | change
+        10    | [10]
+        50    | [50]
+        100   | [100]
+        500   | [500]
+        1000  | [1000]
     }

     @Unroll
-    def "硬貨#coinsを入れて払い戻しすると#change円を取得できる"() {
+    def "#moneyListを入れて払い戻しすると#changeを取得できる"() {
         when:
-        coins.each { coin ->
-            vendingMachine.insert(coin)
+        moneyList.each { money ->
+            vendingMachine.insert(money)
         }

         then:
         vendingMachine.refund() == change

         where:
-        coins                    | change
-        [10, 10]                 | 20
-        [10, 50, 100]            | 160
-        [10, 50, 100, 500]       | 660
-        [10, 50, 100, 500, 1000] | 1660
+        moneyList                | change
+        [10, 10]                 | [10, 10]
+        [50, 50]                 | [50, 50] // TODO 100円?
+        [10, 50, 100]            | [10, 50, 100]
+        [10, 50, 100, 500]       | [10, 50, 100, 500]
+        [10, 50, 100, 500, 1000] | [10, 50, 100, 500, 1000]
     }

     def "10円を入れて払い戻しした後は総計が0円になる"() {
@@ -103,14 +104,17 @@ class VendingMachineSpec extends Specification {
         vendingMachine.total == 0
     }

-
     @Unroll
-    def "#coin円を入れると釣り銭としてそのまま返す"() {
-        expect:
-        vendingMachine.insert(coin)
+    def "#money円を入れると釣り銭としてそのまま返す"() {
+        when:
+        vendingMachine.insert(money)
+
+        then:
+        def e = thrown(UnusableMoneyUsedException)
+        e.insertedMoney == money

         where:
-        coin << [1, 5, 2000, 5000, 10000]
+        money << [1, 5, 2000, 5000, 10000]
     }

 }
[from now] 2012/09/01 16:56:51

diff --git a/src/main/groovy/tddbc/VendingMachine.groovy b/src/main/groovy/tddbc/VendingMachine.groovy
index 9ed7035..62e15a7 100644
--- a/src/main/groovy/tddbc/VendingMachine.groovy
+++ b/src/main/groovy/tddbc/VendingMachine.groovy
@@ -6,13 +6,14 @@ package tddbc
 class VendingMachine {

     /** 許可するお金 */
-    static final List ALLOW_MONEYS = [10, 50, 100, 500, 1000]
-
-    /** 合計金額 */
-    Integer total = 0
+    static final List ALLOW_MONEY_LIST = [10, 50, 100, 500, 1000]

     /** 投入されたお金 */
-    List insertedMoney = []
+    List insertedMoneyList = []
+
+    Integer getTotal() {
+        insertedMoneyList.sum() ?: 0
+    }

     /**
      * お金を投入します。
@@ -23,9 +24,8 @@ class VendingMachine {
      * @return 釣り銭
      */
     void insert(Integer money) {
-        if (ALLOW_MONEYS.contains(money)) {
-            total += money
-            insertedMoney << money
+        if (ALLOW_MONEY_LIST.contains(money)) {
+            insertedMoneyList << money
             return
         }
         throw new UnusableMoneyUsedException(insertedMoney: money)
@@ -39,9 +39,9 @@ class VendingMachine {
      * @return 釣り銭
      */
     def refund() {
-        def refund = total
-        total = 0
-        insertedMoney
+        def refundMoneyList = insertedMoneyList
+        insertedMoneyList = []
+        refundMoneyList
     }

 }
[from now] 2012/09/01 16:58:07

diff --git a/src/main/groovy/tddbc/VendingMachine.groovy b/src/main/groovy/tddbc/VendingMachine.groovy
index 62e15a7..bef8d59 100644
--- a/src/main/groovy/tddbc/VendingMachine.groovy
+++ b/src/main/groovy/tddbc/VendingMachine.groovy
@@ -24,11 +24,10 @@ class VendingMachine {
      * @return 釣り銭
      */
     void insert(Integer money) {
-        if (ALLOW_MONEY_LIST.contains(money)) {
-            insertedMoneyList << money
-            return
+        if (!ALLOW_MONEY_LIST.contains(money)) {
+            throw new UnusableMoneyUsedException(insertedMoney: money)
         }
-        throw new UnusableMoneyUsedException(insertedMoney: money)
+        insertedMoneyList << money
     }

     /**
[from now] 2012/09/01 17:18:35

diff --git a/src/main/groovy/tddbc/UnsupportedMoneyInsertedException.groovy b/src/main/groovy/tddbc/UnsupportedMoneyInsertedException.groovy
new file mode 100644
index 0000000..f55921e
--- /dev/null
+++ b/src/main/groovy/tddbc/UnsupportedMoneyInsertedException.groovy
@@ -0,0 +1,11 @@
+package tddbc
+
+/**
+ * 想定外のお金が投入された時に発生する例外です。
+ * */
+class UnsupportedMoneyInsertedException extends RuntimeException {
+
+    /** 投入されたお金 */
+    Integer insertedMoney
+
+}
diff --git a/src/main/groovy/tddbc/UnusableMoneyUsedException.groovy b/src/main/groovy/tddbc/UnusableMoneyUsedException.groovy
deleted file mode 100644
index e06bd95..0000000
--- a/src/main/groovy/tddbc/UnusableMoneyUsedException.groovy
+++ /dev/null
@@ -1,7 +0,0 @@
-package tddbc
-
-class UnusableMoneyUsedException extends RuntimeException {
-
-    Integer insertedMoney
-
-}
diff --git a/src/main/groovy/tddbc/VendingMachine.groovy b/src/main/groovy/tddbc/VendingMachine.groovy
index bef8d59..6349b41 100644
--- a/src/main/groovy/tddbc/VendingMachine.groovy
+++ b/src/main/groovy/tddbc/VendingMachine.groovy
@@ -8,9 +8,21 @@ class VendingMachine {
     /** 許可するお金 */
     static final List ALLOW_MONEY_LIST = [10, 50, 100, 500, 1000]

+    /** ジュースの初期状態 */
+    static final Juice DEFAULT = new Juice(name: 'コーラ', price: 120, stock: 5)
+
     /** 投入されたお金 */
     List insertedMoneyList = []

+    /** 格納されているジュース */
+    Juice storedJuice = DEFAULT
+
+
+    /**
+     * 投入金額の総計を取得します。
+     *
+     * @return 総計
+     */
     Integer getTotal() {
         insertedMoneyList.sum() ?: 0
     }
@@ -25,7 +37,7 @@ class VendingMachine {
      */
     void insert(Integer money) {
         if (!ALLOW_MONEY_LIST.contains(money)) {
-            throw new UnusableMoneyUsedException(insertedMoney: money)
+            throw new UnsupportedMoneyInsertedException(insertedMoney: money)
         }
         insertedMoneyList << money
     }
diff --git a/src/test/groovy/tddbc/VendingMachineSpec.groovy b/src/test/groovy/tddbc/VendingMachineSpec.groovy
index b92e94e..a0f1467 100644
--- a/src/test/groovy/tddbc/VendingMachineSpec.groovy
+++ b/src/test/groovy/tddbc/VendingMachineSpec.groovy
@@ -110,11 +110,20 @@ class VendingMachineSpec extends Specification {
         vendingMachine.insert(money)

         then:
-        def e = thrown(UnusableMoneyUsedException)
+        def e = thrown(UnsupportedMoneyInsertedException)
         e.insertedMoney == money

         where:
         money << [1, 5, 2000, 5000, 10000]
     }

+    def "ジュースの情報を取得すると120円のコーラ5本だ"() {
+        when:
+        def actual = vendingMachine.storedJuice
+        then:
+        actual.name == 'コーラ'
+        actual.price == 120
+        actual.stock == 5
+    }
+
 }
[from now] 2012/09/01 17:23:45

diff --git a/src/test/groovy/tddbc/VendingMachineSpec.groovy b/src/test/groovy/tddbc/VendingMachineSpec.groovy
index a0f1467..b3d94b8 100644
--- a/src/test/groovy/tddbc/VendingMachineSpec.groovy
+++ b/src/test/groovy/tddbc/VendingMachineSpec.groovy
@@ -117,9 +117,10 @@ class VendingMachineSpec extends Specification {
         money << [1, 5, 2000, 5000, 10000]
     }

-    def "ジュースの情報を取得すると120円のコーラ5本だ"() {
+    def "初期状態でジュースの情報を取得すると120円のコーラ5本だ！"() {
         when:
         def actual = vendingMachine.storedJuice
+
         then:
         actual.name == 'コーラ'
         actual.price == 120
[from now] 2012/09/01 17:23:53

diff --git a/src/main/groovy/tddbc/Juice.groovy b/src/main/groovy/tddbc/Juice.groovy
new file mode 100644
index 0000000..93dc091
--- /dev/null
+++ b/src/main/groovy/tddbc/Juice.groovy
@@ -0,0 +1,17 @@
+package tddbc
+
+/**
+ * ジュースです。
+ */
+class Juice {
+
+    /** 名前 */
+    String name
+
+    /** 値段 */
+    Integer price
+
+    /** 在庫数 */
+    Integer stock
+
+}
[from now] 2012/09/01 17:35:43

diff --git a/src/main/groovy/tddbc/VendingMachine.groovy b/src/main/groovy/tddbc/VendingMachine.groovy
index 6349b41..64a8f31 100644
--- a/src/main/groovy/tddbc/VendingMachine.groovy
+++ b/src/main/groovy/tddbc/VendingMachine.groovy
@@ -23,7 +23,7 @@ class VendingMachine {
      *
      * @return 総計
      */
-    Integer getTotal() {
+    def getTotal() {
         insertedMoneyList.sum() ?: 0
     }
[from now] 2012/09/01 17:57:39

diff --git a/.gitignore b/.gitignore
index 427eb00..db6a985 100755
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@

 .settings/
 .gradle/
+.gradletasknamecache

 # build directory #
 out/