package core.framework.impl.db; import core.framework.api.db.Query; import core.framework.api.db.Repository; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import java.time.LocalDateTime; import java.time.Month; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.List; import java.util.Optional; /** * @author neo */ public class RepositoryImplAutoIncrementIdEntityTest { private static DatabaseImpl database; private static Repository<AutoIncrementIdEntity> repository; @BeforeClass public static void createDatabase() { database = new DatabaseImpl(); database.url("jdbc:hsqldb:mem:.;sql.syntax_mys=true"); database.execute("CREATE TABLE auto_increment_id_entity (id INT AUTO_INCREMENT PRIMARY KEY, string_field VARCHAR(20), double_field DOUBLE, enum_field VARCHAR(10), date_time_field TIMESTAMP, zoned_date_time_field TIMESTAMP)"); repository = database.repository(AutoIncrementIdEntity.class); } @AfterClass public static void cleanupDatabase() { database.execute("DROP TABLE auto_increment_id_entity"); } @Before public void truncateTable() { database.execute("TRUNCATE TABLE auto_increment_id_entity"); } @Test public void insert() { AutoIncrementIdEntity entity = new AutoIncrementIdEntity(); entity.stringField = "string"; entity.doubleField = 3.25; entity.dateTimeField = LocalDateTime.now(); entity.zonedDateTimeField = ZonedDateTime.of(LocalDateTime.of(2017, Month.APRIL, 3, 12, 0), ZoneId.of("UTC")); Optional<Long> id = repository.insert(entity); Assert.assertTrue(id.isPresent()); AutoIncrementIdEntity selectedEntity = repository.get(id.get()).orElseThrow(() -> new Error("not found")); Assert.assertEquals((long) id.get(), (long) selectedEntity.id); Assert.assertEquals(entity.stringField, selectedEntity.stringField); Assert.assertEquals(entity.doubleField, selectedEntity.doubleField); Assert.assertEquals(entity.dateTimeField, selectedEntity.dateTimeField); Assert.assertEquals(entity.zonedDateTimeField.toInstant(), selectedEntity.zonedDateTimeField.toInstant()); } @Test public void selectOne() { AutoIncrementIdEntity entity = new AutoIncrementIdEntity(); entity.stringField = "stringField#123456"; Optional<Long> id = repository.insert(entity); Assert.assertTrue(id.isPresent()); AutoIncrementIdEntity selectedEntity = repository.selectOne("string_field = ?", entity.stringField).orElseThrow(() -> new Error("not found")); Assert.assertEquals((long) id.get(), (long) selectedEntity.id); Assert.assertEquals(entity.stringField, selectedEntity.stringField); } @Test public void selectAll() { List<AutoIncrementIdEntity> entities = repository.select(new Query()); Assert.assertTrue(entities.isEmpty()); } @Test public void selectWithLimit() { Query query = new Query(); query.skip = 0; query.limit = 1000; List<AutoIncrementIdEntity> entities = repository.select(query); Assert.assertTrue(entities.isEmpty()); query.where = "string_field = ?"; query.params = new Object[]{"value"}; entities = repository.select(query); Assert.assertTrue(entities.isEmpty()); } @Test public void select() { AutoIncrementIdEntity entity1 = new AutoIncrementIdEntity(); entity1.stringField = "string1"; entity1.enumField = TestEnum.V1; repository.insert(entity1); AutoIncrementIdEntity entity2 = new AutoIncrementIdEntity(); entity2.stringField = "string2"; entity2.enumField = TestEnum.V2; repository.insert(entity2); List<AutoIncrementIdEntity> entities = repository.select("enum_field = ?", TestEnum.V1); Assert.assertEquals(1, entities.size()); Assert.assertEquals(entity1.enumField, entities.get(0).enumField); Assert.assertEquals(entity1.stringField, entities.get(0).stringField); } }