private void ValidateNextOrder(WalkDogOrder lastOrder, WalkDogOrder nextOrder) { if (nextOrder.StartTime <= lastOrder.StartTime) { throw new TransactionDeclinedException("Wrong order StartTime."); } }
public void Write_To_Stream() { //arrange var stream = new StringStream(); var order = new WalkDogOrder(new Dog("Santa's Little Helper", true, false), "Springfield", new DateTime(2017, 03, 17), 17.89); var writer = new WalkDogOrderStreamWriter(); //act writer.Write(stream, order); //assert var content = stream.GetContent(); content.Should().Be("Santa's Little Helper (small) in Springfield at 2017-03-17T00:00:00.0000000 for 17.89$"); }
public void Publish_Order_And_Assign() { //init var server = _test.StartServer("server"); var dogLover1 = _test.CreateClient("dogLover1"); var walker1 = _test.CreateClient("walker1"); //dogLover1 make a WalkDogOrder var walkDog1Order = new WalkDogOrder(new Dog("dog1"), "nyk", DateTime.Now, 17.9); dogLover1.NewOrder(walkDog1Order); //server make and publish block #1 server.WaitForBlock(1); //walker1 can see a new order var unassignedOrders = walker1.GetUnassignedOrders(); unassignedOrders.Count.Should().Be(1); var unassignedOrder = unassignedOrders.Values.Single(); unassignedOrder.Transaction.User.Should().BeSameAs(dogLover1.User); unassignedOrder.Order.Should().BeSameAs(walkDog1Order); //walker1 make assigned order walker1.AssignOrdersToMe(0.1, unassignedOrder); server.WaitForBlock(2); //dogLover1 can see his order was assigned var myOrder = dogLover1.GetMyInfo().MyOrders.Single(); myOrder.IsAssigned.Should().BeTrue(); myOrder.Order.Should().BeSameAs(walkDog1Order); //dogLover1 can see executor ((IAssignedUserOrder)myOrder).AssigningUserOrder.Transaction.User.Should().BeSameAs(walker1.User); //walker1 can see hist assigment orders var myAssigningOrders = walker1.GetMyInfo().AssigningOrders.Single(); myAssigningOrders.Transaction.User.Should().BeSameAs(walker1.User); myAssigningOrders.Orders.Single().Should().Be(myOrder); }
public void Publish_2_Orders_And_Select_Best_Fee() { //init var server = _test.StartServer("server"); var dogLover1 = _test.CreateClient("dogLover1"); var dogLover2 = _test.CreateClient("dogLover2"); var walker1 = _test.CreateClient("walker1"); var walker2 = _test.CreateClient("walker2"); //each dog lover make a WalkDogOrder var walkDog1Order = new WalkDogOrder(new Dog("dog1"), "nyk", DateTime.Now, 14.0); dogLover1.NewOrder(walkDog1Order); var walkDog2Order = new WalkDogOrder(new Dog("dog2"), "nyk", DateTime.Now, 20.0); dogLover2.NewOrder(walkDog2Order); server.WaitForBlock(1); //walker1 says he want to execute only walkDog1OrderSecond var unassignedOrderForWalker1 = walker1.GetUnassignedOrders().Values.Single(o => o.Order == walkDog1Order); walker1.AssignOrdersToMe(0.2, unassignedOrderForWalker1); //walker2 want to execute both orders walker2.AssignOrdersToMe(0.1, walker2.GetUnassignedOrders().Values.ToArray()); //server will choose walker2 proposal server.WaitForBlock(2); var myAssigningOrder = walker2.GetMyInfo().AssigningOrders.Single(); myAssigningOrder.Orders.Count.Should().Be(2); //walker1 was excluded from execution walker1.GetMyInfo().Should().BeNull(); }