package sample.model.asset;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import java.math.BigDecimal;
import java.time.LocalDate;
import org.junit.Test;
import sample.EntityTestSupport;
//low: 簡易な正常系検証のみ
public class CashBalanceTest extends EntityTestSupport {
@Override
protected void setupPreset() {
targetEntities(CashBalance.class);
}
@Test
public void 現金残高を追加する() {
LocalDate baseDay = businessDay.day();
tx(() -> {
CashBalance cb = fixtures.cb("test1", baseDay, "USD", "10.02").save(rep);
// 10.02 + 11.51 = 21.53
assertThat(cb.add(rep, new BigDecimal("11.51")).getAmount(), is(new BigDecimal("21.53")));
// 21.53 + 11.516 = 33.04 (端数切捨確認)
assertThat(cb.add(rep, new BigDecimal("11.516")).getAmount(), is(new BigDecimal("33.04")));
// 33.04 - 41.51 = -8.47 (マイナス値/マイナス残許容)
assertThat(cb.add(rep, new BigDecimal("-41.51")).getAmount(), is(new BigDecimal("-8.47")));
});
}
@Test
public void 現金残高を取得する() {
LocalDate baseDay = businessDay.day();
LocalDate baseMinus1Day = businessDay.day(-1);
tx(() -> {
fixtures.cb("test1", baseDay, "JPY", "1000").save(rep);
fixtures.cb("test2", baseMinus1Day, "JPY", "3000").save(rep);
// 存在している残高の検証
CashBalance cbNormal = CashBalance.getOrNew(rep, "test1", "JPY");
assertThat(cbNormal, allOf(
hasProperty("accountId", is("test1")),
hasProperty("baseDay", is(baseDay)),
hasProperty("amount", is(new BigDecimal("1000")))));
// 基準日に存在していない残高の繰越検証
CashBalance cbRoll = CashBalance.getOrNew(rep, "test2", "JPY");
assertThat(cbRoll, allOf(
hasProperty("accountId", is("test2")),
hasProperty("baseDay", is(baseDay)),
hasProperty("amount", is(new BigDecimal("3000")))));
// 残高を保有しない口座の生成検証
CashBalance cbNew = CashBalance.getOrNew(rep, "test3", "JPY");
assertThat(cbNew, allOf(
hasProperty("accountId", is("test3")),
hasProperty("baseDay", is(baseDay)),
hasProperty("amount", is(BigDecimal.ZERO))));
});
}
}