public void じ名前ならHashCodeも同じ() { var a = new 販売コード("ayb"); var b = new 販売コード("ayb"); Assert.IsTrue(a.GetHashCode() == b.GetHashCode()); }
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); }
public void 違うオブジェクトでも名前が同じなら等しい() { var a = new 販売コード("ayb"); var b = new 販売コード("ayb"); Assert.IsTrue(a.Equals(b as object)); Assert.IsTrue(a.Equals(b)); }
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); }
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)); }
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.該当商品なし); }
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)); }
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商品(販売コード).数量); }