package rewards.jms.client;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.*;
import rewards.Dining;
/**
* Tests the Dining batch processor
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:rewards/system-test-config.xml",
"classpath:rewards/jms/client/client-config.xml",
"classpath:rewards/jms/jms-rewards-config.xml",
"classpath:rewards/jms/jms-infrastructure-config.xml"})
public class DiningBatchProcessorTests extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private DiningBatchProcessor diningBatchProcessor;
@Autowired
private RewardConfirmationLogger confirmationLogger;
@Test
public void testBatch() throws Exception {
Dining dining1 = Dining.createDining("80.93", "1234123412341234", "1234567890");
Dining dining2 = Dining.createDining("56.12", "1234123412341234", "1234567890");
Dining dining3 = Dining.createDining("32.64", "1234123412341234", "1234567890");
Dining dining4 = Dining.createDining("77.05", "1234123412341234", "1234567890");
Dining dining5 = Dining.createDining("94.50", "1234123412341234", "1234567890");
List<Dining> batch = new ArrayList<Dining>();
batch.add(dining1);
batch.add(dining2);
batch.add(dining3);
batch.add(dining4);
batch.add(dining5);
diningBatchProcessor.processBatch(batch);
waitForBatch(batch.size(), 1000);
assertEquals(batch.size(), confirmationLogger.getConfirmations().size());
}
private void waitForBatch(int batchSize, int timeout) throws InterruptedException {
int sleepTime = 100;
while (confirmationLogger.getConfirmations().size() < batchSize && timeout > 0) {
Thread.sleep(sleepTime);
timeout -= sleepTime;
}
}
}