Hexagonal pattern: move business logic to core
This commit is contained in:
		| @@ -22,12 +22,12 @@ | |||||||
|  */ |  */ | ||||||
| package com.iluwatar.hexagonal.administration; | package com.iluwatar.hexagonal.administration; | ||||||
|  |  | ||||||
| import java.util.Map; |  | ||||||
|  |  | ||||||
| import com.iluwatar.hexagonal.domain.LotteryNumbers; | import com.iluwatar.hexagonal.domain.LotteryNumbers; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicket; | import com.iluwatar.hexagonal.domain.LotteryTicket; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicketId; | import com.iluwatar.hexagonal.domain.LotteryTicketId; | ||||||
|  |  | ||||||
|  | import java.util.Map; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  *  |  *  | ||||||
|  * Administrator interface for lottery service. |  * Administrator interface for lottery service. | ||||||
|   | |||||||
| @@ -22,22 +22,13 @@ | |||||||
|  */ |  */ | ||||||
| package com.iluwatar.hexagonal.administration; | package com.iluwatar.hexagonal.administration; | ||||||
|  |  | ||||||
| import java.util.Map; |  | ||||||
|  |  | ||||||
| import com.iluwatar.hexagonal.banking.WireTransfers; |  | ||||||
| import com.iluwatar.hexagonal.banking.WireTransfersImpl; |  | ||||||
| import com.iluwatar.hexagonal.database.LotteryTicketRepository; |  | ||||||
| import com.iluwatar.hexagonal.database.LotteryTicketInMemoryRepository; |  | ||||||
| import com.iluwatar.hexagonal.domain.LotteryConstants; |  | ||||||
| import com.iluwatar.hexagonal.domain.LotteryNumbers; | import com.iluwatar.hexagonal.domain.LotteryNumbers; | ||||||
|  | import com.iluwatar.hexagonal.domain.LotterySystem; | ||||||
|  | import com.iluwatar.hexagonal.domain.LotterySystemImpl; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicket; | import com.iluwatar.hexagonal.domain.LotteryTicket; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult; |  | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult.CheckResult; |  | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicketId; | import com.iluwatar.hexagonal.domain.LotteryTicketId; | ||||||
| import com.iluwatar.hexagonal.notifications.LotteryNotifications; |  | ||||||
| import com.iluwatar.hexagonal.notifications.LotteryNotificationsImpl; | import java.util.Map; | ||||||
| import com.iluwatar.hexagonal.service.LotteryService; |  | ||||||
| import com.iluwatar.hexagonal.service.LotteryServiceImpl; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  *  |  *  | ||||||
| @@ -46,42 +37,24 @@ import com.iluwatar.hexagonal.service.LotteryServiceImpl; | |||||||
|  */ |  */ | ||||||
| public class LotteryAdministrationImpl implements LotteryAdministration { | public class LotteryAdministrationImpl implements LotteryAdministration { | ||||||
|  |  | ||||||
|   private final LotteryTicketRepository repository; |   private final LotterySystem lotterySystem; | ||||||
|   private final LotteryService service = new LotteryServiceImpl(); |  | ||||||
|   private final LotteryNotifications notifications = new LotteryNotificationsImpl(); |  | ||||||
|   private final WireTransfers bank = new WireTransfersImpl(); |  | ||||||
|   public LotteryAdministrationImpl() { |   public LotteryAdministrationImpl() { | ||||||
|     repository = new LotteryTicketInMemoryRepository(); |     lotterySystem = new LotterySystemImpl(); | ||||||
|   } |   } | ||||||
|    |    | ||||||
|   @Override |   @Override | ||||||
|   public Map<LotteryTicketId, LotteryTicket> getAllSubmittedTickets() { |   public Map<LotteryTicketId, LotteryTicket> getAllSubmittedTickets() { | ||||||
|     return repository.findAll(); |     return lotterySystem.getAllSubmittedTickets(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @Override |   @Override | ||||||
|   public LotteryNumbers performLottery() { |   public LotteryNumbers performLottery() { | ||||||
|     LotteryNumbers numbers = LotteryNumbers.createRandom(); |     return lotterySystem.performLottery(); | ||||||
|     Map<LotteryTicketId, LotteryTicket> tickets = getAllSubmittedTickets(); |  | ||||||
|     for (LotteryTicketId id: tickets.keySet()) { |  | ||||||
|       LotteryTicketCheckResult result = service.checkTicketForPrize(id, numbers); |  | ||||||
|       if (result.getResult().equals(CheckResult.WIN_PRIZE)) { |  | ||||||
|         boolean transferred = bank.transferFunds(LotteryConstants.PRIZE_AMOUNT, LotteryConstants.SERVICE_BANK_ACCOUNT,  |  | ||||||
|             tickets.get(id).getPlayerDetails().getBankAccount()); |  | ||||||
|         if (transferred) { |  | ||||||
|           notifications.notifyPrize(tickets.get(id).getPlayerDetails(), LotteryConstants.PRIZE_AMOUNT); |  | ||||||
|         } else { |  | ||||||
|           notifications.notifyPrizeError(tickets.get(id).getPlayerDetails(), LotteryConstants.PRIZE_AMOUNT); |  | ||||||
|         } |  | ||||||
|       } else if (result.getResult().equals(CheckResult.NO_PRIZE)) { |  | ||||||
|         notifications.notifyNoWin(tickets.get(id).getPlayerDetails()); |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     return numbers; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @Override |   @Override | ||||||
|   public void resetLottery() { |   public void resetLottery() { | ||||||
|     repository.deleteAll(); |     lotterySystem.resetLottery(); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -0,0 +1,58 @@ | |||||||
|  | /** | ||||||
|  |  * The MIT License | ||||||
|  |  * Copyright (c) 2014 Ilkka Seppälä | ||||||
|  |  * | ||||||
|  |  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
|  |  * of this software and associated documentation files (the "Software"), to deal | ||||||
|  |  * in the Software without restriction, including without limitation the rights | ||||||
|  |  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||||
|  |  * copies of the Software, and to permit persons to whom the Software is | ||||||
|  |  * furnished to do so, subject to the following conditions: | ||||||
|  |  * | ||||||
|  |  * The above copyright notice and this permission notice shall be included in | ||||||
|  |  * all copies or substantial portions of the Software. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
|  |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||||
|  |  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||||
|  |  * THE SOFTWARE. | ||||||
|  |  */ | ||||||
|  | package com.iluwatar.hexagonal.domain; | ||||||
|  |  | ||||||
|  | import java.util.Map; | ||||||
|  | import java.util.Optional; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Lottery system interface | ||||||
|  |  */ | ||||||
|  | public interface LotterySystem { | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * Get all the lottery tickets submitted for lottery | ||||||
|  |    */ | ||||||
|  |   Map<LotteryTicketId, LotteryTicket> getAllSubmittedTickets(); | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * Draw lottery numbers | ||||||
|  |    */ | ||||||
|  |   LotteryNumbers performLottery(); | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * Begin new lottery round | ||||||
|  |    */ | ||||||
|  |   void resetLottery(); | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * Submit lottery ticket to participate in the lottery | ||||||
|  |    */ | ||||||
|  |   Optional<LotteryTicketId> submitTicket(LotteryTicket ticket); | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * Check if lottery ticket has won | ||||||
|  |    */ | ||||||
|  |   LotteryTicketCheckResult checkTicketForPrize(LotteryTicketId id, LotteryNumbers winningNumbers); | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -0,0 +1,107 @@ | |||||||
|  | /** | ||||||
|  |  * The MIT License | ||||||
|  |  * Copyright (c) 2014 Ilkka Seppälä | ||||||
|  |  * | ||||||
|  |  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
|  |  * of this software and associated documentation files (the "Software"), to deal | ||||||
|  |  * in the Software without restriction, including without limitation the rights | ||||||
|  |  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||||
|  |  * copies of the Software, and to permit persons to whom the Software is | ||||||
|  |  * furnished to do so, subject to the following conditions: | ||||||
|  |  * | ||||||
|  |  * The above copyright notice and this permission notice shall be included in | ||||||
|  |  * all copies or substantial portions of the Software. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
|  |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||||
|  |  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||||
|  |  * THE SOFTWARE. | ||||||
|  |  */ | ||||||
|  | package com.iluwatar.hexagonal.domain; | ||||||
|  |  | ||||||
|  | import com.iluwatar.hexagonal.banking.WireTransfers; | ||||||
|  | import com.iluwatar.hexagonal.banking.WireTransfersImpl; | ||||||
|  | import com.iluwatar.hexagonal.database.LotteryTicketInMemoryRepository; | ||||||
|  | import com.iluwatar.hexagonal.database.LotteryTicketRepository; | ||||||
|  | import com.iluwatar.hexagonal.notifications.LotteryNotifications; | ||||||
|  | import com.iluwatar.hexagonal.notifications.LotteryNotificationsImpl; | ||||||
|  |  | ||||||
|  | import java.util.Map; | ||||||
|  | import java.util.Optional; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Lottery system implementation | ||||||
|  |  */ | ||||||
|  | public class LotterySystemImpl implements LotterySystem { | ||||||
|  |  | ||||||
|  |   private final LotteryTicketRepository repository; | ||||||
|  |   private final LotteryNotifications notifications = new LotteryNotificationsImpl(); | ||||||
|  |   private final WireTransfers bank = new WireTransfersImpl(); | ||||||
|  |  | ||||||
|  |   public LotterySystemImpl() { | ||||||
|  |     repository = new LotteryTicketInMemoryRepository(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public Map<LotteryTicketId, LotteryTicket> getAllSubmittedTickets() { | ||||||
|  |     return repository.findAll(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public LotteryNumbers performLottery() { | ||||||
|  |     LotteryNumbers numbers = LotteryNumbers.createRandom(); | ||||||
|  |     Map<LotteryTicketId, LotteryTicket> tickets = getAllSubmittedTickets(); | ||||||
|  |     for (LotteryTicketId id : tickets.keySet()) { | ||||||
|  |       LotteryTicketCheckResult result = checkTicketForPrize(id, numbers); | ||||||
|  |       if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.WIN_PRIZE)) { | ||||||
|  |         boolean transferred = bank.transferFunds(LotteryConstants.PRIZE_AMOUNT, LotteryConstants.SERVICE_BANK_ACCOUNT, | ||||||
|  |             tickets.get(id).getPlayerDetails().getBankAccount()); | ||||||
|  |         if (transferred) { | ||||||
|  |           notifications.notifyPrize(tickets.get(id).getPlayerDetails(), LotteryConstants.PRIZE_AMOUNT); | ||||||
|  |         } else { | ||||||
|  |           notifications.notifyPrizeError(tickets.get(id).getPlayerDetails(), LotteryConstants.PRIZE_AMOUNT); | ||||||
|  |         } | ||||||
|  |       } else if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.NO_PRIZE)) { | ||||||
|  |         notifications.notifyNoWin(tickets.get(id).getPlayerDetails()); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     return numbers; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public void resetLottery() { | ||||||
|  |     repository.deleteAll(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public Optional<LotteryTicketId> submitTicket(LotteryTicket ticket) { | ||||||
|  |     boolean result = bank.transferFunds(LotteryConstants.TICKET_PRIZE, ticket.getPlayerDetails().getBankAccount(), | ||||||
|  |         LotteryConstants.SERVICE_BANK_ACCOUNT); | ||||||
|  |     if (result == false) { | ||||||
|  |       notifications.notifyTicketSubmitError(ticket.getPlayerDetails()); | ||||||
|  |       return Optional.empty(); | ||||||
|  |     } | ||||||
|  |     Optional<LotteryTicketId> optional = repository.save(ticket); | ||||||
|  |     if (optional.isPresent()) { | ||||||
|  |       notifications.notifyTicketSubmitted(ticket.getPlayerDetails()); | ||||||
|  |     } | ||||||
|  |     return optional; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public LotteryTicketCheckResult checkTicketForPrize(LotteryTicketId id, LotteryNumbers winningNumbers) { | ||||||
|  |     Optional<LotteryTicket> optional = repository.findById(id); | ||||||
|  |     if (optional.isPresent()) { | ||||||
|  |       if (optional.get().getNumbers().equals(winningNumbers)) { | ||||||
|  |         return new LotteryTicketCheckResult(LotteryTicketCheckResult.CheckResult.WIN_PRIZE, 1000); | ||||||
|  |       } else { | ||||||
|  |         return new LotteryTicketCheckResult(LotteryTicketCheckResult.CheckResult.NO_PRIZE); | ||||||
|  |       } | ||||||
|  |     } else { | ||||||
|  |       return new LotteryTicketCheckResult(LotteryTicketCheckResult.CheckResult.TICKET_NOT_SUBMITTED); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -22,13 +22,13 @@ | |||||||
|  */ |  */ | ||||||
| package com.iluwatar.hexagonal.service; | package com.iluwatar.hexagonal.service; | ||||||
|  |  | ||||||
| import java.util.Optional; |  | ||||||
|  |  | ||||||
| import com.iluwatar.hexagonal.domain.LotteryNumbers; | import com.iluwatar.hexagonal.domain.LotteryNumbers; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicket; | import com.iluwatar.hexagonal.domain.LotteryTicket; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult; | import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicketId; | import com.iluwatar.hexagonal.domain.LotteryTicketId; | ||||||
|  |  | ||||||
|  | import java.util.Optional; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  *  |  *  | ||||||
|  * Interface for submitting and checking lottery tickets. |  * Interface for submitting and checking lottery tickets. | ||||||
|   | |||||||
| @@ -22,20 +22,14 @@ | |||||||
|  */ |  */ | ||||||
| package com.iluwatar.hexagonal.service; | package com.iluwatar.hexagonal.service; | ||||||
|  |  | ||||||
| import java.util.Optional; |  | ||||||
|  |  | ||||||
| import com.iluwatar.hexagonal.banking.WireTransfers; |  | ||||||
| import com.iluwatar.hexagonal.banking.WireTransfersImpl; |  | ||||||
| import com.iluwatar.hexagonal.database.LotteryTicketRepository; |  | ||||||
| import com.iluwatar.hexagonal.database.LotteryTicketInMemoryRepository; |  | ||||||
| import com.iluwatar.hexagonal.domain.LotteryConstants; |  | ||||||
| import com.iluwatar.hexagonal.domain.LotteryNumbers; | import com.iluwatar.hexagonal.domain.LotteryNumbers; | ||||||
|  | import com.iluwatar.hexagonal.domain.LotterySystem; | ||||||
|  | import com.iluwatar.hexagonal.domain.LotterySystemImpl; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicket; | import com.iluwatar.hexagonal.domain.LotteryTicket; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult; | import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicketId; | import com.iluwatar.hexagonal.domain.LotteryTicketId; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult.CheckResult; |  | ||||||
| import com.iluwatar.hexagonal.notifications.LotteryNotifications; | import java.util.Optional; | ||||||
| import com.iluwatar.hexagonal.notifications.LotteryNotificationsImpl; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  *  |  *  | ||||||
| @@ -44,45 +38,22 @@ import com.iluwatar.hexagonal.notifications.LotteryNotificationsImpl; | |||||||
|  */ |  */ | ||||||
| public class LotteryServiceImpl implements LotteryService { | public class LotteryServiceImpl implements LotteryService { | ||||||
|  |  | ||||||
|   private final LotteryTicketRepository repository; |   private final LotterySystem lotterySystem; | ||||||
|  |  | ||||||
|   private final WireTransfers bank = new WireTransfersImpl(); |  | ||||||
|  |  | ||||||
|   private final LotteryNotifications notifications = new LotteryNotificationsImpl(); |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * Constructor |    * Constructor | ||||||
|    */ |    */ | ||||||
|   public LotteryServiceImpl() { |   public LotteryServiceImpl() { | ||||||
|     repository = new LotteryTicketInMemoryRepository(); |     lotterySystem = new LotterySystemImpl(); | ||||||
|   } |   } | ||||||
|    |    | ||||||
|   @Override |   @Override | ||||||
|   public Optional<LotteryTicketId> submitTicket(LotteryTicket ticket) { |   public Optional<LotteryTicketId> submitTicket(LotteryTicket ticket) { | ||||||
|     boolean result = bank.transferFunds(LotteryConstants.TICKET_PRIZE, ticket.getPlayerDetails().getBankAccount(), |     return lotterySystem.submitTicket(ticket); | ||||||
|         LotteryConstants.SERVICE_BANK_ACCOUNT); |  | ||||||
|     if (result == false) { |  | ||||||
|       notifications.notifyTicketSubmitError(ticket.getPlayerDetails()); |  | ||||||
|       return Optional.empty(); |  | ||||||
|     } |  | ||||||
|     Optional<LotteryTicketId> optional = repository.save(ticket); |  | ||||||
|     if (optional.isPresent()) { |  | ||||||
|       notifications.notifyTicketSubmitted(ticket.getPlayerDetails()); |  | ||||||
|     } |  | ||||||
|     return optional; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @Override |   @Override | ||||||
|   public LotteryTicketCheckResult checkTicketForPrize(LotteryTicketId id, LotteryNumbers winningNumbers) { |   public LotteryTicketCheckResult checkTicketForPrize(LotteryTicketId id, LotteryNumbers winningNumbers) { | ||||||
|     Optional<LotteryTicket> optional = repository.findById(id); |     return lotterySystem.checkTicketForPrize(id, winningNumbers); | ||||||
|     if (optional.isPresent()) { |  | ||||||
|       if (optional.get().getNumbers().equals(winningNumbers)) { |  | ||||||
|         return new LotteryTicketCheckResult(CheckResult.WIN_PRIZE, 1000); |  | ||||||
|       } else { |  | ||||||
|         return new LotteryTicketCheckResult(CheckResult.NO_PRIZE); |  | ||||||
|       } |  | ||||||
|     } else { |  | ||||||
|       return new LotteryTicketCheckResult(CheckResult.TICKET_NOT_SUBMITTED); |  | ||||||
|     } |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ | |||||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||||
|  * THE SOFTWARE. |  * THE SOFTWARE. | ||||||
|  */ |  */ | ||||||
| package com.iluwatar.hexagonal.lottery; | package com.iluwatar.hexagonal.domain; | ||||||
| 
 | 
 | ||||||
| import static org.junit.Assert.assertEquals; | import static org.junit.Assert.assertEquals; | ||||||
| import static org.junit.Assert.assertTrue; | import static org.junit.Assert.assertTrue; | ||||||
| @@ -30,22 +30,15 @@ import java.util.HashSet; | |||||||
| import java.util.Map; | import java.util.Map; | ||||||
| import java.util.Optional; | import java.util.Optional; | ||||||
| 
 | 
 | ||||||
|  | import com.iluwatar.hexagonal.domain.*; | ||||||
| import org.junit.Before; | import org.junit.Before; | ||||||
| import org.junit.Test; | import org.junit.Test; | ||||||
| 
 | 
 | ||||||
| import com.iluwatar.hexagonal.administration.LotteryAdministration; |  | ||||||
| import com.iluwatar.hexagonal.administration.LotteryAdministrationImpl; |  | ||||||
| import com.iluwatar.hexagonal.banking.WireTransfers; | import com.iluwatar.hexagonal.banking.WireTransfers; | ||||||
| import com.iluwatar.hexagonal.banking.WireTransfersImpl; | import com.iluwatar.hexagonal.banking.WireTransfersImpl; | ||||||
| import com.iluwatar.hexagonal.database.LotteryTicketRepository; | import com.iluwatar.hexagonal.database.LotteryTicketRepository; | ||||||
| import com.iluwatar.hexagonal.database.LotteryTicketInMemoryRepository; | import com.iluwatar.hexagonal.database.LotteryTicketInMemoryRepository; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryNumbers; |  | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicket; |  | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult; |  | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult.CheckResult; | import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult.CheckResult; | ||||||
| import com.iluwatar.hexagonal.domain.LotteryTicketId; |  | ||||||
| import com.iluwatar.hexagonal.service.LotteryService; |  | ||||||
| import com.iluwatar.hexagonal.service.LotteryServiceImpl; |  | ||||||
| import com.iluwatar.hexagonal.test.LotteryTestUtils; | import com.iluwatar.hexagonal.test.LotteryTestUtils; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
| @@ -55,8 +48,7 @@ import com.iluwatar.hexagonal.test.LotteryTestUtils; | |||||||
|  */ |  */ | ||||||
| public class LotteryTest { | public class LotteryTest { | ||||||
| 
 | 
 | ||||||
|   private final LotteryAdministration admin = new LotteryAdministrationImpl(); |   private final LotterySystem lotterySystem = new LotterySystemImpl(); | ||||||
|   private final LotteryService service = new LotteryServiceImpl(); |  | ||||||
|   private final LotteryTicketRepository repository = new LotteryTicketInMemoryRepository(); |   private final LotteryTicketRepository repository = new LotteryTicketInMemoryRepository(); | ||||||
|   private final WireTransfers wireTransfers = new WireTransfersImpl(); |   private final WireTransfers wireTransfers = new WireTransfersImpl(); | ||||||
|    |    | ||||||
| @@ -72,34 +64,34 @@ public class LotteryTest { | |||||||
|     wireTransfers.setFunds("123-12312", 100); |     wireTransfers.setFunds("123-12312", 100); | ||||||
|      |      | ||||||
|     // admin resets the lottery |     // admin resets the lottery | ||||||
|     admin.resetLottery(); |     lotterySystem.resetLottery(); | ||||||
|     assertEquals(admin.getAllSubmittedTickets().size(), 0); |     assertEquals(lotterySystem.getAllSubmittedTickets().size(), 0); | ||||||
|      |      | ||||||
|     // players submit the lottery tickets |     // players submit the lottery tickets | ||||||
|     Optional<LotteryTicketId> ticket1 = service.submitTicket(LotteryTestUtils.createLotteryTicket("cvt@bbb.com", |     Optional<LotteryTicketId> ticket1 = lotterySystem.submitTicket(LotteryTestUtils.createLotteryTicket("cvt@bbb.com", | ||||||
|         "123-12312", "+32425255", new HashSet<>(Arrays.asList(1, 2, 3, 4)))); |         "123-12312", "+32425255", new HashSet<>(Arrays.asList(1, 2, 3, 4)))); | ||||||
|     assertTrue(ticket1.isPresent()); |     assertTrue(ticket1.isPresent()); | ||||||
|     Optional<LotteryTicketId> ticket2 = service.submitTicket(LotteryTestUtils.createLotteryTicket("ant@bac.com", |     Optional<LotteryTicketId> ticket2 = lotterySystem.submitTicket(LotteryTestUtils.createLotteryTicket("ant@bac.com", | ||||||
|         "123-12312", "+32423455", new HashSet<>(Arrays.asList(11, 12, 13, 14)))); |         "123-12312", "+32423455", new HashSet<>(Arrays.asList(11, 12, 13, 14)))); | ||||||
|     assertTrue(ticket2.isPresent()); |     assertTrue(ticket2.isPresent()); | ||||||
|     Optional<LotteryTicketId> ticket3 = service.submitTicket(LotteryTestUtils.createLotteryTicket("arg@boo.com", |     Optional<LotteryTicketId> ticket3 = lotterySystem.submitTicket(LotteryTestUtils.createLotteryTicket("arg@boo.com", | ||||||
|         "123-12312", "+32421255", new HashSet<>(Arrays.asList(6, 8, 13, 19)))); |         "123-12312", "+32421255", new HashSet<>(Arrays.asList(6, 8, 13, 19)))); | ||||||
|     assertTrue(ticket3.isPresent()); |     assertTrue(ticket3.isPresent()); | ||||||
|     assertEquals(admin.getAllSubmittedTickets().size(), 3); |     assertEquals(lotterySystem.getAllSubmittedTickets().size(), 3); | ||||||
|      |      | ||||||
|     // perform lottery |     // perform lottery | ||||||
|     LotteryNumbers winningNumbers = admin.performLottery(); |     LotteryNumbers winningNumbers = lotterySystem.performLottery(); | ||||||
| 
 | 
 | ||||||
|     // cheat a bit for testing sake, use winning numbers to submit another ticket |     // cheat a bit for testing sake, use winning numbers to submit another ticket | ||||||
|     Optional<LotteryTicketId> ticket4 = service.submitTicket(LotteryTestUtils.createLotteryTicket("lucky@orb.com", |     Optional<LotteryTicketId> ticket4 = lotterySystem.submitTicket(LotteryTestUtils.createLotteryTicket("lucky@orb.com", | ||||||
|         "123-12312", "+12421255", winningNumbers.getNumbers())); |         "123-12312", "+12421255", winningNumbers.getNumbers())); | ||||||
|     assertTrue(ticket4.isPresent()); |     assertTrue(ticket4.isPresent()); | ||||||
|     assertEquals(admin.getAllSubmittedTickets().size(), 4); |     assertEquals(lotterySystem.getAllSubmittedTickets().size(), 4); | ||||||
|      |      | ||||||
|     // check winners |     // check winners | ||||||
|     Map<LotteryTicketId, LotteryTicket> tickets = admin.getAllSubmittedTickets(); |     Map<LotteryTicketId, LotteryTicket> tickets = lotterySystem.getAllSubmittedTickets(); | ||||||
|     for (LotteryTicketId id: tickets.keySet()) { |     for (LotteryTicketId id: tickets.keySet()) { | ||||||
|       LotteryTicketCheckResult checkResult = service.checkTicketForPrize(id, winningNumbers); |       LotteryTicketCheckResult checkResult = lotterySystem.checkTicketForPrize(id, winningNumbers); | ||||||
|       assertTrue(checkResult.getResult() != CheckResult.TICKET_NOT_SUBMITTED); |       assertTrue(checkResult.getResult() != CheckResult.TICKET_NOT_SUBMITTED); | ||||||
|       if (checkResult.getResult().equals(CheckResult.WIN_PRIZE)) { |       if (checkResult.getResult().equals(CheckResult.WIN_PRIZE)) { | ||||||
|         assertTrue(checkResult.getPrizeAmount() > 0); |         assertTrue(checkResult.getPrizeAmount() > 0); | ||||||
| @@ -109,7 +101,7 @@ public class LotteryTest { | |||||||
|     } |     } | ||||||
|      |      | ||||||
|     // check another ticket that has not been submitted |     // check another ticket that has not been submitted | ||||||
|     LotteryTicketCheckResult checkResult = service.checkTicketForPrize(new LotteryTicketId(), winningNumbers); |     LotteryTicketCheckResult checkResult = lotterySystem.checkTicketForPrize(new LotteryTicketId(), winningNumbers); | ||||||
|     assertTrue(checkResult.getResult() == CheckResult.TICKET_NOT_SUBMITTED); |     assertTrue(checkResult.getResult() == CheckResult.TICKET_NOT_SUBMITTED); | ||||||
|     assertEquals(checkResult.getPrizeAmount(), 0); |     assertEquals(checkResult.getPrizeAmount(), 0); | ||||||
|   } |   } | ||||||
		Reference in New Issue
	
	Block a user