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;
/**
* @author neo
*/
public class RepositoryImplCompositeKeyEntityTest {
private static DatabaseImpl database;
private static Repository<CompositeKeyEntity> repository;
@BeforeClass
public static void createDatabase() {
database = new DatabaseImpl();
database.url("jdbc:hsqldb:mem:.;sql.syntax_mys=true");
database.execute("CREATE TABLE composite_key_entity (id1 VARCHAR(36), id2 VARCHAR(36), boolean_field BIT(1), long_field BIGINT, PRIMARY KEY (id1, id2))");
repository = database.repository(CompositeKeyEntity.class);
}
@AfterClass
public static void cleanupDatabase() {
database.execute("DROP TABLE composite_key_entity");
}
@Before
public void truncateTable() {
database.execute("TRUNCATE TABLE composite_key_entity");
}
@Test
public void insert() {
CompositeKeyEntity entity = new CompositeKeyEntity();
entity.id1 = "id1";
entity.id2 = "id2";
entity.booleanField = true;
entity.longField = 1L;
repository.insert(entity);
CompositeKeyEntity selectedEntity = repository.get(entity.id1, entity.id2).get();
Assert.assertEquals(entity.id1, selectedEntity.id1);
Assert.assertEquals(entity.id2, selectedEntity.id2);
Assert.assertEquals(entity.booleanField, selectedEntity.booleanField);
Assert.assertEquals(entity.longField, selectedEntity.longField);
}
@Test
public void update() {
CompositeKeyEntity entity = new CompositeKeyEntity();
entity.id1 = "id1";
entity.id2 = "id2";
entity.booleanField = true;
entity.longField = 1L;
repository.insert(entity);
entity.longField = 2L;
repository.update(entity);
CompositeKeyEntity selectedEntity = repository.get(entity.id1, entity.id2).get();
Assert.assertEquals(entity.longField, selectedEntity.longField);
}
@Test
public void batchDelete() {
CompositeKeyEntity entity1 = new CompositeKeyEntity();
entity1.id1 = "1-1";
entity1.id2 = "1-2";
entity1.booleanField = true;
CompositeKeyEntity entity2 = new CompositeKeyEntity();
entity2.id1 = "2-1";
entity2.id2 = "2-2";
entity2.booleanField = true;
repository.batchInsert(Lists.newArrayList(entity1, entity2));
repository.batchDelete(Lists.newArrayList(new Object[]{entity1.id1, entity1.id2}, new Object[]{entity2.id1, entity2.id2}));
Assert.assertFalse(repository.get(entity1.id1, entity1.id2).isPresent());
Assert.assertFalse(repository.get(entity2.id1, entity2.id2).isPresent());
}
}