package danielcortes.xyz.models.efectivo; import static org.assertj.core.api.Assertions.assertThat; import com.github.javafaker.Faker; import danielcortes.xyz.data.ConnectionHolder; import danielcortes.xyz.data.DAOManager; import danielcortes.xyz.data.SQLiteConnectionHolder; import danielcortes.xyz.models.caja.Caja; import danielcortes.xyz.models.caja.CajaDAO; import danielcortes.xyz.models.version.SQLiteVersionDAO; import danielcortes.xyz.models.version.VersionDAO; import danielcortes.xyz.utils.RandomLocalDate; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Optional; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; class SQLiteEfectivoDAOTest { private static final int databaseVersion = 2; private static VersionDAO versionDAO; private static Faker faker; private CajaDAO cajaDAO; private EfectivoDAO efectivoDAO; @BeforeAll static void setAll() { ConnectionHolder connectionHolder = new SQLiteConnectionHolder("jdbc:sqlite:/tmp/tmp.sqlite"); DAOManager.setup(connectionHolder); versionDAO = new SQLiteVersionDAO(connectionHolder); faker = new Faker(); } @BeforeEach void setUp() { versionDAO.updateTo(databaseVersion); this.cajaDAO = DAOManager.getCajaDAO(); this.efectivoDAO = DAOManager.getEfectivoDAO(); } @AfterEach void tearDown() { //noinspection ResultOfMethodCallIgnored new File("/tmp/tmp.sqlite").delete(); } @ParameterizedTest @ValueSource(ints = {1,5,10}) void getAll(int size) { List cajas = new ArrayList<>(size); for(int x = 0; x < size; x++){ Caja c = giveRandomCaja(); cajas.add(c); this.cajaDAO.insert(c); } List efectivos = new ArrayList<>(size); for(Caja c: cajas) { Efectivo e = giveRandomEfectivo(c); efectivos.add(e); this.efectivoDAO.insert(e); } List l1 = this.efectivoDAO.getAll(); assertThat(l1) .hasSize(size) .containsAll(efectivos); } @ParameterizedTest @ValueSource(ints = {1,5,10}) void getById(int size) { List cajas = new ArrayList<>(size); for(int x = 0; x < size; x++){ Caja c = giveRandomCaja(); cajas.add(c); this.cajaDAO.insert(c); } List efectivos = new ArrayList<>(size); for(Caja c: cajas) { Efectivo e = giveRandomEfectivo(c); efectivos.add(e); this.efectivoDAO.insert(e); } for(Efectivo e: efectivos){ Optional o = this.efectivoDAO.getById(e.getId()); assertThat(o) .isPresent() .contains(e); } Optional o = this.efectivoDAO.getById(-1); assertThat(o) .isEmpty(); } @ParameterizedTest @ValueSource(ints = {1,5,10}) void getByCaja(int size) { List cajas = new ArrayList<>(size); for(int x = 0; x < size; x++){ Caja c = giveRandomCaja(); cajas.add(c); this.cajaDAO.insert(c); } List efectivos = new ArrayList<>(size); for(Caja c: cajas) { Efectivo e = giveRandomEfectivo(c); efectivos.add(e); this.efectivoDAO.insert(e); } for(Efectivo e: efectivos) { Optional o = this.efectivoDAO.getByCaja(e.getCaja()); assertThat(o) .isPresent() .contains(e); } Optional o = this.efectivoDAO.getByCaja(Caja.EMPTY); assertThat(o) .isEmpty(); } @ParameterizedTest @ValueSource(ints = {1,5,10}) void getTotalEfectivo(int size) { List cajas = new ArrayList<>(size); for(int x = 0; x < size; x++){ Caja c = giveRandomCaja(); cajas.add(c); this.cajaDAO.insert(c); } for(Caja c: cajas) { Efectivo e = giveRandomEfectivo(c); this.efectivoDAO.insert(e); } for(Caja c: cajas) { Optional o = this.efectivoDAO.getByCaja(c); int sum = this.efectivoDAO.getTotalEfectivo(c); assertThat(sum) .isEqualTo( o.get().getDiez() + o.get().getCincuenta() + o.get().getCien() + o.get().getQuinientos() + o.get().getMil() + o.get().getDosMil() + o.get().getCincoMil() + o.get().getDiezMil() + o.get().getVeinteMil() ); } assertThat(this.efectivoDAO.getTotalEfectivo(Caja.EMPTY)) .isEqualTo(0); } @ParameterizedTest @ValueSource(ints = {1, 5, 10}) void insert(int size) { Caja c = giveRandomCaja(); this.cajaDAO.insert(c); Efectivo e = giveRandomEfectivo(c); assertThat(e.getId()) .isEqualTo(0); this.efectivoDAO.insert(e); assertThat(e.getId()) .isNotEqualTo(0); } @Test void update() { Caja c1 = giveRandomCaja(); this.cajaDAO.insert(c1); Caja c2 = giveRandomCaja(); this.cajaDAO.insert(c2); Efectivo f1 = giveRandomEfectivo(c1); this.efectivoDAO.insert(f1); Optional o1 = this.efectivoDAO.getById(f1.getId()); Efectivo f2 = updateRandomEfectivo(f1); assertThat(o1) .isPresent() .contains(f1); assertThat(f1).isNotEqualTo(f2); this.efectivoDAO.update(f2); Optional o2 = this.efectivoDAO.getById(f2.getId()); assertThat(o2) .isPresent() .contains(f2); } @Test void delete() { Caja c = giveRandomCaja(); this.cajaDAO.insert(c); Efectivo e = giveRandomEfectivo(c); this.efectivoDAO.insert(e); Optional o1 = this.efectivoDAO.getById(e.getId()); assertThat(o1) .isPresent() .contains(e); this.efectivoDAO.delete(e); Optional o2 = this.efectivoDAO.getById(e.getId()); assertThat(o2) .isEmpty(); } Caja giveRandomCaja() { Caja c= new Caja(); c.setFondo(faker.number().numberBetween(0, 10000000)); c.setFecha(RandomLocalDate.random()); return c; } Efectivo giveRandomEfectivo(Caja caja){ Efectivo e = new Efectivo(); e.setDiez(faker.number().numberBetween(0, 10000000)); e.setCincuenta(faker.number().numberBetween(0, 10000000)); e.setCien(faker.number().numberBetween(0, 10000000)); e.setQuinientos(faker.number().numberBetween(0, 10000000)); e.setMil(faker.number().numberBetween(0, 10000000)); e.setDosMil(faker.number().numberBetween(0, 10000000)); e.setCincoMil(faker.number().numberBetween(0, 10000000)); e.setDiezMil(faker.number().numberBetween(0, 10000000)); e.setVeinteMil(faker.number().numberBetween(0, 10000000)); e.setCaja(caja); return e; } Efectivo updateRandomEfectivo(Efectivo efectivo){ Efectivo e = giveRandomEfectivo(efectivo.getCaja()); e.setId(efectivo.getId()); return e; } }