public void Auction_GetsNewerButHigherBid_PriceIsAffected() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow, DateTime.UtcNow.AddHours(1)); AddInitialBidToAuction(repo, auction); auctioneer.DoAllWork(); var bidder2 = new Member() { DisplayName = "Bidder2", UniqueId = Guid.NewGuid().ToString() }; repo.Add(bidder2); repo.Add(new Bid() { ReceivedOnUtc = DateTime.UtcNow, Bidder = bidder2, Amount = 70, Auction = auction }); auctioneer.DoAllWork(); Assert.AreEqual(2, auction.Bids.Count); Assert.AreEqual(70, auction.CurrentPrice); }
public void Auction_BidIsBelowStartPrice_HasNoImpact() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow, DateTime.UtcNow.AddHours(1)); auctioneer.DoAllWork(); var bidder = new Member() { DisplayName = "Bidder1", UniqueId = Guid.NewGuid().ToString() }; repo.Add(bidder); repo.Add(new Bid() { ReceivedOnUtc = DateTime.UtcNow, Auction = auction, Amount = auction.StartPrice - 10, Bidder = bidder }); auctioneer.DoAllWork(); Assert.AreEqual(1, auction.Bids.Count); Assert.IsNull(auction.ActiveBid); }
public void Bid_WhenDeclined_EventIsRaised() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow.AddHours(-1), DateTime.UtcNow.AddHours(1)); AddInitialBidToAuction(repo, auction); auctioneer.DoAllWork(); ProcessedBidEventArgs raisedArgs = null; auctioneer.BidDeclined += (sender, args) => raisedArgs = args; var bidder2 = new Member() { DisplayName = "Bidder2", UniqueId = Guid.NewGuid().ToString() }; repo.Add(bidder2); repo.Add(new Bid() { ReceivedOnUtc = DateTime.UtcNow, Bidder = bidder2, Amount = 51, Auction = auction }); auctioneer.DoAllWork(); Assert.NotNull(raisedArgs); Assert.NotNull(raisedArgs.Auction); Assert.NotNull(raisedArgs.Bid); }
public void Auction_GetsOlderButHigherBid_FailsWithException() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow.AddHours(-1), DateTime.UtcNow.AddHours(1)); AddInitialBidToAuction(repo, auction); auctioneer.DoAllWork(); var bidder2 = new Member() { DisplayName = "Bidder2", UniqueId = Guid.NewGuid().ToString() }; repo.Add(bidder2); repo.Add(new Bid() { ReceivedOnUtc = DateTime.UtcNow.AddMinutes(-10), Bidder = bidder2, Amount = 70, Auction = auction }); Assert.Throws <AuctionStateException>(() => auctioneer.DoAllWork()); }
public void Auction_HasOneBidAndEnds_TheBidderShouldBeTheWinner() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow.AddHours(-1), DateTime.UtcNow.AddHours(1)); auctioneer.DoAllWork(); var bidder2 = new Member() { DisplayName = "Bidder2", UniqueId = Guid.NewGuid().ToString() }; repo.Add(bidder2); repo.Add(new Bid() { ReceivedOnUtc = DateTime.UtcNow, Bidder = bidder2, Amount = 70, Auction = auction }); // Turn back the time auction.EndDateTimeUtc = DateTime.UtcNow; auctioneer.DoAllWork(); Assert.AreEqual(auction.Winner, bidder2); }
public void GettingCurrentMemberTwice_IsSame() { var repo = new InMemoryMainRepository(); var service = new SimpleMemberService(repo); var currentMember1 = service.GetCurrentMember(); var currentMember2 = service.GetCurrentMember(); Assert.AreEqual(currentMember1, currentMember2); }
public void WhenMemberIsNotInRepo_GetCurrentUser_AlwaysGetAMember() { var repo = new InMemoryMainRepository(); var service = new SimpleMemberService(repo); var currentMember = service.GetCurrentMember(); Assert.NotNull(currentMember); Assert.IsNotNullOrEmpty(currentMember.DisplayName); Assert.IsNotNullOrEmpty(currentMember.EMail); }
public void WhenAddingAnAuction_WithUnknownMember_RaisesException() { var auction = CreateGeneratedAuction(); var repo = new InMemoryMainRepository(); var memberService = new SimpleMemberService(repo); var service = new AuctionService(repo, memberService); service.Save(auction); }
public void WhenAddingAnAuction_WithUnknownMember_RaisesException() { var auction = CreateGeneratedAuction(); var repo = new InMemoryMainRepository(); var service = new AuctionService(repo, new SimpleMemberService(repo)); var memberService = new SimpleMemberService(repo); service.Save(auction); }
public void AuctionHasStartTimeInPast_AuctioneerRuns_AuctionIsRunning() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow.AddHours(-1), DateTime.UtcNow.AddHours(1)); auctioneer.DoAllWork(); Assert.IsFalse(auction.IsClosed); Assert.IsTrue(auction.IsRunning); }
private static void AddInitialBidToAuction(InMemoryMainRepository repo, Auction auction) { var bidder = new Member() { DisplayName = "Bidder1", UniqueId = Guid.NewGuid().ToString() }; repo.Add(bidder); repo.Add(new Bid() { ReceivedOnUtc = DateTime.UtcNow, Auction = auction, Amount = auction.StartPrice + 10, Bidder = bidder }); }
public void PlacingABid_AuctionHasNotYetStarted_RaisesExecption() { var repo = new InMemoryMainRepository(); var simpleMemberService = new SimpleMemberService(repo); var auction = CreateGeneratedAuction(); auction.Seller = simpleMemberService.GetCurrentMember(); var service = new AuctionService(repo, simpleMemberService); auction.StartDateTimeUtc = DateTime.UtcNow.AddDays(1); service.Save(auction); service.PlaceBid(auction, 100); }
public void PlacingABid_AuctionHasNotYetStarted_RaisesException() { var repo = new InMemoryMainRepository(); var simpleMemberService = new SimpleMemberService(repo); var auction = CreateGeneratedAuction(); auction.Seller = simpleMemberService.GetCurrentMember(); var service = new AuctionService(repo, simpleMemberService); auction.StartDateTimeUtc = DateTime.UtcNow.AddDays(1); service.Save(auction); service.PlaceBid(auction, 100); }
public void GivenAProperService_SavesAValidAuction_ShouldReturnSameFromAuctionList() { var repo = new InMemoryMainRepository(); var userService = new SimpleMemberService(repo); var service = new AuctionService(repo, userService); var auction = CreateGeneratedAuction(); auction.Seller = userService.Add("Seller", "*****@*****.**"); service.Save(auction); var auctionFromService = service.GetAll().First(); Assert.AreEqual(auctionFromService, auction); }
public void PlacingABid_AuctionHasExpired_RaisesException() { var repo = new InMemoryMainRepository(); var simpleMemberService = new SimpleMemberService(repo); var auction = CreateGeneratedAuction(); auction.Seller = simpleMemberService.GetCurrentMember(); var service = new AuctionService(repo, simpleMemberService); auction.StartDateTimeUtc = DateTime.UtcNow.AddDays(-2); auction.EndDateTimeUtc = DateTime.UtcNow.AddDays(-2); repo.Add(auction); Assert.Throws <AuctionStateException>(() => service.PlaceBid(auction, 100)); }
public void Auction_WhenStarted_EventIsRaised() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow.AddHours(-1), DateTime.UtcNow.AddHours(1)); AuctionEventArgs raisedArgs = null; auctioneer.AuctionStarted += (sender, args) => raisedArgs = args; auctioneer.DoAllWork(); Assert.NotNull(raisedArgs); Assert.NotNull(raisedArgs.Auction); Assert.AreEqual(auction, raisedArgs.Auction); }
public void AuctionStartedAndEndedInThePast_AuctioneerRuns_DoNotGetsStarted() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); AuctionEventArgs raisedArgs = null; auctioneer.AuctionStarted += (sender, args) => raisedArgs = args; var auction = CreateAndStoreAuction(repo, DateTime.UtcNow.AddHours(-2), DateTime.UtcNow.AddHours(-1)); auction.IsRunning = false; auction.IsClosed = true; auctioneer.DoAllWork(); Assert.IsNull(raisedArgs); Assert.IsTrue(auction.IsClosed); Assert.IsFalse(auction.IsRunning); }
private static Auction CreateAndStoreAuction(InMemoryMainRepository repo, DateTime startDateTimeUtc, DateTime endDateTimeUtc) { var seller = new Member() { DisplayName = "Seller", UniqueId = Guid.NewGuid().ToString() }; var auction = new Auction() { Title = "TestAuction", Seller = seller, StartPrice = 50, StartDateTimeUtc = startDateTimeUtc, EndDateTimeUtc = endDateTimeUtc }; repo.Add(seller); repo.Add(auction); Assert.AreEqual(1, repo.GetAuctions().Count()); Assert.AreEqual(1, repo.GetMembers().Count()); return(auction); }
public void Auction_EndTimeHasArrived_AuctionGetsClosed() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow.AddHours(-1), DateTime.UtcNow.AddHours(1)); auctioneer.DoAllWork(); Assert.IsFalse(auction.IsClosed); // Turn back the time auction.EndDateTimeUtc = DateTime.UtcNow; auctioneer.DoAllWork(); Assert.IsTrue(auction.IsClosed); Assert.IsFalse(auction.IsRunning); }
public void Bid_WhenAccepted_EventIsRaised() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow.AddHours(-1), DateTime.UtcNow.AddHours(1)); ProcessedBidEventArgs raisedArgs = null; auctioneer.BidAccepted += (sender, args) => raisedArgs = args; AddInitialBidToAuction(repo, auction); auctioneer.DoAllWork(); Assert.NotNull(raisedArgs); Assert.NotNull(raisedArgs.Auction); Assert.NotNull(raisedArgs.Bid); }
public void Auction_WhenEnded_EventIsRaised() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow.AddHours(-1), DateTime.UtcNow.AddHours(1)); AuctionEventArgs raisedArgs = null; auctioneer.AuctionEnded += (sender, args) => raisedArgs = args; // Turn back the time auction.EndDateTimeUtc = DateTime.UtcNow; auctioneer.DoAllWork(); Assert.NotNull(raisedArgs); Assert.NotNull(raisedArgs.Auction); Assert.NotNull(raisedArgs.IsSuccessful); }
public void AuctionStartedAndEndedInThePast_AuctioneerRuns_DontGetsStarted() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); AuctionEventArgs raisedArgs = null; auctioneer.AuctionStarted += (sender, args) => raisedArgs = args; var auction = CreateAndStoreAuction(repo, DateTime.UtcNow.AddHours(-2), DateTime.UtcNow.AddHours(-1)); auction.IsRunning = false; auction.IsClosed = true; auctioneer.DoAllWork(); Assert.IsNull(raisedArgs); Assert.IsTrue(auction.IsClosed); Assert.IsFalse(auction.IsRunning); }
public void WithExistingAuction_AfterPlacingABid_TheBidShouldBeAssignedToAuctionAndUser() { var repo = new InMemoryMainRepository(); var userService = new MockedMemberService(repo); var service = new AuctionService(repo, userService); var auction = CreateGeneratedAuction(); auction.Seller = userService.Add("Seller", "*****@*****.**"); service.Save(auction); // Litte hack: Manual change of start time auction.StartDateTimeUtc = DateTime.UtcNow.AddDays(-1); var bidder = userService.Add("Michael", "*****@*****.**"); userService.SetCurrentMember(bidder); service.PlaceBid(auction, 51); Assert.AreEqual(1, auction.Bids.Count); Assert.AreEqual(1, bidder.Bids.Count); }
public void Auction_GetsOlderButHigherBid_FailsWithException() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow.AddHours(-1), DateTime.UtcNow.AddHours(1)); AddInitialBidToAuction(repo, auction); auctioneer.DoAllWork(); var bidder2 = new Member() { DisplayName = "Bidder2", UniqueId = Guid.NewGuid().ToString() }; repo.Add(bidder2); repo.Add(new Bid() { ReceivedOnUtc = DateTime.UtcNow.AddMinutes(-10), Bidder = bidder2, Amount = 70, Auction = auction }); auctioneer.DoAllWork(); }
private static Auction CreateAndStoreAuction(InMemoryMainRepository repo, DateTime startDateTimeUtc, DateTime endDateTimeUtc) { var seller = new Member() { DisplayName = "Seller", UniqueId = Guid.NewGuid().ToString() }; var auction = new Auction() { Title = "TestAuction", Seller = seller, StartPrice = 50, StartDateTimeUtc = startDateTimeUtc, EndDateTimeUtc = endDateTimeUtc }; repo.Add(seller); repo.Add(auction); Assert.AreEqual(1, repo.GetAuctions().Count()); Assert.AreEqual(1, repo.GetMembers().Count()); return auction; }
public void Auction_StartTimeHasArrived_AuctionGetsRunning() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow.AddHours(-1), DateTime.UtcNow.AddHours(1)); Assert.IsFalse(auction.IsRunning); auctioneer.DoAllWork(); Assert.IsTrue(auction.IsRunning); // Turn back the time auction.EndDateTimeUtc = DateTime.UtcNow; auctioneer.DoAllWork(); Assert.IsTrue(auction.IsClosed); Assert.IsFalse(auction.IsRunning); }
public void Auction_HasNewerButLowerBid_HasNoImpact() { var repo = new InMemoryMainRepository(); var auctioneer = new Auctioneer(repo); var auction = CreateAndStoreAuction(repo, DateTime.UtcNow, DateTime.UtcNow.AddHours(1)); AddInitialBidToAuction(repo, auction); auctioneer.DoAllWork(); var bidder2 = new Member() { DisplayName = "Bidder2", UniqueId = Guid.NewGuid().ToString() }; repo.Add(bidder2); repo.Add(new Bid() { ReceivedOnUtc = DateTime.UtcNow, Bidder = bidder2, Amount = 51, Auction = auction }); auctioneer.DoAllWork(); Assert.AreEqual(2, auction.Bids.Count); Assert.AreEqual(60, auction.CurrentPrice); }
public MockedMemberService(InMemoryMainRepository repo) { this.repo = repo; this.userService = new SimpleMemberService(this.repo); this.currentMember = this.userService.GetCurrentMember(); }