@Test
  public void testRewardForDining() {
    // create a new dining of 100.00 charged to credit card '1234123412341234' by merchant
    // '123457890' as test input
    Dining dining = Dining.createDining("100.00", "1234123412341234", "1234567890");

    // TODO: replace 'null' below with a call to the 'rewardNetwork' to test its
    // rewardAccountFor(Dining) method
    RewardConfirmation confirmation = rewardNetwork.rewardAccountFor(dining);

    // assert the expected reward confirmation results
    assertNotNull(confirmation);
    assertNotNull(confirmation.getConfirmationNumber());

    // assert an account contribution was made
    AccountContribution contribution = confirmation.getAccountContribution();
    assertNotNull(contribution);

    // the account number should be '123456789'
    assertEquals("123456789", contribution.getAccountNumber());

    // the total contribution amount should be 8.00 (8% of 100.00)
    assertEquals(MonetaryAmount.valueOf("8.00"), contribution.getAmount());

    // the total contribution amount should have been split into 2 distributions
    assertEquals(2, contribution.getDistributions().size());

    // each distribution should be 4.00 (as both have a 50% allocation)
    assertEquals(
        MonetaryAmount.valueOf("4.00"), contribution.getDistribution("Annabelle").getAmount());
    assertEquals(
        MonetaryAmount.valueOf("4.00"), contribution.getDistribution("Corgan").getAmount());
  }
 //	Whenever a message arrives on the rewards.queue.dining queue,
 //	call the rewardAccountFor method on the rewardNetwork,
 //	passing the message payload (which is a Dining).
 //	Send the resulting RewardConfirmation out in a message to the rewards.queue.confirmation queue:
 @JmsListener(destination = "rewards.queue.dining")
 @SendTo("rewards.queue.confirmation")
 public RewardConfirmation rewardAccountFor(Dining dining) {
   return rewardNetwork.rewardAccountFor(dining);
 }