public Result <Purchase> SellTickets(IConcert concert, TicketsBuyer buyer, TicketQuantity quantity) { var ticketsResult = concert.IssueTickets(quantity); return(ticketsResult .Map(tickets => { buyer.AddPurchase(tickets); return new Purchase(buyer, tickets); })); }
public void AddTicketsToBuyerWhenIssuingTicketsSucceeds() { var tickets = BuildTickets(); var concert = SetUpConcertWhichIssueTickets(tickets); var buyer = new TicketsBuyer("1", "Buyer name"); var wantedQuantity = new TicketQuantity(5); var service = new TicketsService(); service.SellTickets(concert, buyer, wantedQuantity); Assert.NotEmpty(buyer.Purchases); }
public void ReturnFailureWhenIssuingTicketsFails() { var errorMessage = "Some error occured"; var concert = SetUpConcertWhichDoesNotIssueTickets(errorMessage); var buyer = new TicketsBuyer("1", "Buyer name"); var wantedQuantity = new TicketQuantity(5); var service = new TicketsService(); var purchase = service.SellTickets(concert, buyer, wantedQuantity); Assert.True(purchase.IsFailure); Assert.Equal(errorMessage, purchase.Error); }
public void ReturnPurchaseWhenIssuingTicketsSucceeds() { var tickets = BuildTickets(); var concert = SetUpConcertWhichIssueTickets(tickets); var buyer = new TicketsBuyer("1", "Buyer name"); var wantedQuantity = new TicketQuantity(5); var service = new TicketsService(); var purchase = service.SellTickets(concert, buyer, wantedQuantity); Assert.True(purchase.IsSuccess); Assert.Equal(buyer.Id, purchase.Value.Buyer.Id); Assert.Equal(tickets, purchase.Value.Tickets); }