package core.framework.impl.db; import core.framework.api.db.Repository; import core.framework.api.util.Lists; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import java.math.BigDecimal; import java.time.LocalDate; import java.time.Month; import java.util.Optional; import java.util.UUID; /** * @author neo */ public class RepositoryImplAssignedIdEntityTest { private static DatabaseImpl database; private static Repository<AssignedIdEntity> repository; @BeforeClass public static void createDatabase() { database = new DatabaseImpl(); database.url("jdbc:hsqldb:mem:.;sql.syntax_mys=true"); database.execute("CREATE TABLE assigned_id_entity (id VARCHAR(36) PRIMARY KEY, string_field VARCHAR(20), int_field INT, big_decimal_field DECIMAL(10,2), date_field DATE)"); repository = database.repository(AssignedIdEntity.class); } @AfterClass public static void cleanupDatabase() { database.execute("DROP TABLE assigned_id_entity"); } @Before public void truncateTable() { database.execute("TRUNCATE TABLE assigned_id_entity"); } @Test public void insert() { AssignedIdEntity entity = new AssignedIdEntity(); entity.id = UUID.randomUUID().toString(); entity.stringField = "string"; entity.intField = 12; entity.bigDecimalField = new BigDecimal("86.99"); entity.dateField = LocalDate.of(2016, Month.JULY, 5); Optional<Long> id = repository.insert(entity); Assert.assertFalse(id.isPresent()); AssignedIdEntity selectedEntity = repository.get(entity.id).get(); Assert.assertEquals(entity.id, selectedEntity.id); Assert.assertEquals(entity.stringField, selectedEntity.stringField); Assert.assertEquals(entity.intField, selectedEntity.intField); Assert.assertEquals(entity.bigDecimalField, selectedEntity.bigDecimalField); Assert.assertEquals(entity.dateField, selectedEntity.dateField); } @Test public void update() { AssignedIdEntity entity = new AssignedIdEntity(); entity.id = UUID.randomUUID().toString(); entity.stringField = "string"; entity.intField = 11; repository.insert(entity); AssignedIdEntity updatedEntity = new AssignedIdEntity(); updatedEntity.id = entity.id; updatedEntity.stringField = "updated"; updatedEntity.dateField = LocalDate.of(2016, Month.JULY, 5); repository.update(updatedEntity); AssignedIdEntity selectedEntity = repository.get(entity.id).get(); Assert.assertEquals(updatedEntity.stringField, selectedEntity.stringField); Assert.assertEquals(entity.intField, selectedEntity.intField); Assert.assertEquals(updatedEntity.dateField, selectedEntity.dateField); } @Test public void delete() { AssignedIdEntity entity = new AssignedIdEntity(); entity.id = UUID.randomUUID().toString(); entity.intField = 11; repository.insert(entity); repository.delete(entity.id); Optional<AssignedIdEntity> result = repository.get(entity.id); Assert.assertFalse(result.isPresent()); } @Test public void batchInsert() { AssignedIdEntity entity1 = new AssignedIdEntity(); entity1.id = "1"; entity1.stringField = "value1"; entity1.intField = 11; AssignedIdEntity entity2 = new AssignedIdEntity(); entity2.id = "2"; entity2.stringField = "value2"; entity2.intField = 12; repository.batchInsert(Lists.newArrayList(entity1, entity2)); AssignedIdEntity selectedEntity1 = repository.get("1").get(); Assert.assertEquals(entity1.stringField, selectedEntity1.stringField); AssignedIdEntity selectedEntity2 = repository.get("2").get(); Assert.assertEquals(entity2.stringField, selectedEntity2.stringField); } @Test public void batchDelete() { AssignedIdEntity entity1 = new AssignedIdEntity(); entity1.id = "3"; entity1.intField = 11; AssignedIdEntity entity2 = new AssignedIdEntity(); entity2.id = "4"; entity2.intField = 12; repository.batchInsert(Lists.newArrayList(entity1, entity2)); repository.batchDelete(Lists.newArrayList(entity1.id, entity2.id)); Assert.assertFalse(repository.get(entity1.id).isPresent()); Assert.assertFalse(repository.get(entity2.id).isPresent()); } }