Esempio n. 1
0
        public void  じ名前ならHashCodeも同じ()
        {
            var a = new 販売コード("ayb");
            var b = new 販売コード("ayb");

            Assert.IsTrue(a.GetHashCode() == b.GetHashCode());
        }
Esempio n. 2
0
        public void Thisとは等しい()
        {
            var x = new 販売コード("ayb");

            Assert.IsTrue(x.Equals(x as object));
            Assert.IsTrue(x.Equals(x));
        }
 public 販売商品在庫 Find商品(販売コード 販売コード)
 {
     if (this.販売商品.ContainsKey(販売コード))
     {
         return(this.販売商品[販売コード]);
     }
     return(null);
 }
Esempio n. 4
0
        public void 違うオブジェクトでも名前が同じなら等しい()
        {
            var a = new 販売コード("ayb");
            var b = new 販売コード("ayb");

            Assert.IsTrue(a.Equals(b as object));
            Assert.IsTrue(a.Equals(b));
        }
Esempio n. 5
0
        public void 存在しない商品コードを取得するとNull()
        {
            var c = new 販売コード("CO-1234");
            var r = new Memory商品在庫Repository();
            var x = new 硬貨自動販売機(r, new 硬貨支払機());
            var y = x.Find商品(c);

            Assert.IsTrue(y == null);
        }
        public void 在庫があって十分な金額であれば成功する()
        {
            var c = new 販売コード("COLA-001");
            var r = new Memory商品在庫Repository();
            var x = new 硬貨自動販売機(r, new 硬貨支払機());
            var u = new 硬貨自動販売機ユーザUseCase(x);

            r.Register商品(c, new 販売商品(new 商品名("コーラ"), new 通貨(120)));
            r.Add数量(c, 1);
            u.Insert貨幣(new 自動販売機Insert貨幣Command(500));
            var y = u.決済(new 自動販売機決済Command(c));

            Assert.IsTrue(y is 自動販売機決済SuccessCommandResult);
        }
Esempio n. 7
0
        public void 商品コードから商品を取得する()
        {
            var c = new 販売コード("CO-1234");
            var r = new Memory商品在庫Repository();
            var x = new 硬貨自動販売機(r, new 硬貨支払機());

            r.Register商品(c, new 販売商品(new 商品名("コーラ"), new 通貨(100)));
            r.Add数量(c, 100);
            var y = x.Find商品(c);

            Assert.IsTrue(y.商品名.Equals(new 商品名("コーラ")));
            Assert.IsTrue(y.価格.Equals(new 通貨(100)));
            Assert.IsTrue(y.数量.Equals(100));
        }
Esempio n. 8
0
        public void 在庫切れの商品では決済できない()
        {
            var c = new 販売コード("COLA-001");
            var r = new Memory商品在庫Repository();
            var x = new 硬貨自動販売機(r, new 硬貨支払機());

            r.Register商品(c, new 販売商品(new 商品名("コーラ"), new 通貨(100)));
            try {
                x.決済(c);
            }
            catch (自動販売機在庫切れException) {
                return;
            }
            Assert.Fail();
        }
        public void 該当商品なしだと失敗する()
        {
            var c = new 販売コード("COLA-001");
            var r = new Memory商品在庫Repository();
            var x = new 硬貨自動販売機(r, new 硬貨支払機());
            var u = new 硬貨自動販売機ユーザUseCase(x);

            r.Register商品(c, new 販売商品(new 商品名("コーラ"), new 通貨(120)));
            u.Insert貨幣(new 自動販売機Insert貨幣Command(500));
            var y = u.決済(new 自動販売機決済Command(new 販売コード("WATR-002")));

            Assert.IsTrue(y is 自動販売機決済FailureCommandResult);
            var z = y as 自動販売機決済FailureCommandResult;

            Assert.IsTrue(z.Reason == 自動販売機決済FailureReason.該当商品なし);
        }
Esempio n. 10
0
        public void 投入金額不足では決済できない()
        {
            var c = new 販売コード("COLA-001");
            var r = new Memory商品在庫Repository();
            var x = new 硬貨自動販売機(r, new 硬貨支払機());

            r.Register商品(c, new 販売商品(new 商品名("コーラ"), new 通貨(110)));
            r.Add数量(c, 1);
            x.Insert貨幣(new 硬貨(100));
            try {
                x.決済(c);
            }
            catch (自動販売機金額不足Exception) {
                return;
            }
            Assert.Fail();
        }
        public 決済結果 決済(販売コード 販売コード)
        {
            var item = this.Find商品(販売コード) ?? throw new 自動販売機該当商品なしException();

            if (item.数量 <= 0)
            {
                throw new 自動販売機在庫切れException();
            }
            if (this.支払機.投入金額合計() < item.価格)
            {
                throw new 自動販売機金額不足Exception();
            }
            var change = this.支払機.決済(item.価格);

            item.Add数量(-1);
            return(new 決済結果(item, change));
        }
Esempio n. 12
0
        public void 投入金額が十分であれば決済できる()
        {
            var c = new 販売コード("COLA-001");
            var r = new Memory商品在庫Repository();
            var x = new 硬貨自動販売機(r, new 硬貨支払機());

            r.Register商品(c, new 販売商品(new 商品名("コーラ"), new 通貨(140)));
            r.Add数量(c, 1);
            x.Insert貨幣(new 硬貨(500));
            var y = x.決済(c);

            Assert.IsTrue(y.商品.商品名.Equals(new 商品名("コーラ")));
            var t = y.釣銭.OrderBy(x => x.Value).ToList();

            Assert.IsTrue(t[0] == new 硬貨(10));
            Assert.IsTrue(t[1] == new 硬貨(50));
            Assert.IsTrue(t[2] == new 硬貨(100));
            Assert.IsTrue(t[3] == new 硬貨(100));
            Assert.IsTrue(t[4] == new 硬貨(100));
        }
 public 販売商品在庫 Find商品(販売コード 販売コード)
 {
     return(this.商品在庫Repository.Find商品(販売コード));
 }
 public 自動販売機決済Command(販売コード 販売コード)
 {
     this.販売コード = 販売コード ?? throw new ArgumentNullException(nameof(販売コード) + " cannot be null");
 }
 public void Add数量(販売コード 販売コード, int 数量)
 {
     this.Find商品(販売コード).Add数量(数量);
 }
 public void Register商品(販売コード 販売コード, 販売商品 販売商品)
 {
     this.販売商品[販売コード] = new 販売商品在庫(販売商品.商品名, 販売商品.価格, 0);
 }
 public int Count数量(販売コード 販売コード)
 {
     return(this.Find商品(販売コード).数量);
 }