package rewards;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.*;
/**
* A system test that demonstrates how the effects of a given test can affect all tests that follow. JUnit makes no
* guarantee about the order that tests run in, so each test must be independent of all others.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:rewards/system-test-config.xml" })
// TODO 4: Update test to extend AbstractTransactionalJUnit4SpringContextTests
public class RewardNetworkSideEffectTest {
/**
* The object being tested.
*/
@Autowired
private RewardNetwork rewardNetwork;
/**
* A template to use for test verification
*/
private SimpleJdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
@Test
public void testCollision1stTime() {
Dining dining = Dining.createDining("100.00", "1234123412341234", "1234567890");
rewardNetwork.rewardAccountFor(dining);
String sql = "select SAVINGS from T_ACCOUNT_BENEFICIARY where NAME = ?";
assertEquals(Double.valueOf(4.00), jdbcTemplate.queryForObject(sql, Double.class, "Annabelle"));
assertEquals(Double.valueOf(4.00), jdbcTemplate.queryForObject(sql, Double.class, "Corgan"));
}
@Test
public void testCollision2ndTime() {
Dining dining = Dining.createDining("100.00", "1234123412341234", "1234567890");
rewardNetwork.rewardAccountFor(dining);
String sql = "select SAVINGS from T_ACCOUNT_BENEFICIARY where NAME = ?";
assertEquals(Double.valueOf(4.00), jdbcTemplate.queryForObject(sql, Double.class, "Annabelle"));
assertEquals(Double.valueOf(4.00), jdbcTemplate.queryForObject(sql, Double.class, "Corgan"));
}
}