package com.piggymetrics.statistics.repository; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; import com.piggymetrics.statistics.StatisticsApplication; import com.piggymetrics.statistics.domain.timeseries.DataPoint; import com.piggymetrics.statistics.domain.timeseries.DataPointId; import com.piggymetrics.statistics.domain.timeseries.ItemMetric; import com.piggymetrics.statistics.domain.timeseries.StatisticMetric; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.math.BigDecimal; import java.util.Date; import java.util.List; import static org.junit.Assert.assertEquals; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = StatisticsApplication.class) public class DataPointRepositoryTest { @Autowired private DataPointRepository repository; @Test public void shouldSaveDataPoint() { ItemMetric salary = new ItemMetric("salary", new BigDecimal(20_000)); ItemMetric grocery = new ItemMetric("grocery", new BigDecimal(1_000)); ItemMetric vacation = new ItemMetric("vacation", new BigDecimal(2_000)); DataPointId pointId = new DataPointId("test-account", new Date(0)); DataPoint point = new DataPoint(); point.setId(pointId); point.setIncomes(Sets.newHashSet(salary)); point.setExpenses(Sets.newHashSet(grocery, vacation)); point.setStatistics(ImmutableMap.of( StatisticMetric.SAVING_AMOUNT, new BigDecimal(400_000), StatisticMetric.INCOMES_AMOUNT, new BigDecimal(20_000), StatisticMetric.EXPENSES_AMOUNT, new BigDecimal(3_000) )); repository.save(point); List<DataPoint> points = repository.findByIdAccount(pointId.getAccount()); assertEquals(1, points.size()); assertEquals(pointId.getDate(), points.get(0).getId().getDate()); assertEquals(point.getStatistics().size(), points.get(0).getStatistics().size()); assertEquals(point.getIncomes().size(), points.get(0).getIncomes().size()); assertEquals(point.getExpenses().size(), points.get(0).getExpenses().size()); } @Test public void shouldRewriteDataPointWithinADay() { final BigDecimal earlyAmount = new BigDecimal(100); final BigDecimal lateAmount = new BigDecimal(200); DataPointId pointId = new DataPointId("test-account", new Date(0)); DataPoint earlier = new DataPoint(); earlier.setId(pointId); earlier.setStatistics(ImmutableMap.of( StatisticMetric.SAVING_AMOUNT, earlyAmount )); repository.save(earlier); DataPoint later = new DataPoint(); later.setId(pointId); later.setStatistics(ImmutableMap.of( StatisticMetric.SAVING_AMOUNT, lateAmount )); repository.save(later); List<DataPoint> points = repository.findByIdAccount(pointId.getAccount()); assertEquals(1, points.size()); assertEquals(lateAmount, points.get(0).getStatistics().get(StatisticMetric.SAVING_AMOUNT)); } }