querydsl/querydsl-sql/src/test/java/com/mysema/query/ColumnMetadataTest.java
Stefan Oehme d5cddcf855 added column metadata to make the sql backend more interoperable with
other backends
also opens the opportunity for more optimizations and checks (like
prohibiting null values for nonnull columns)
2013-08-07 17:56:46 +02:00

102 lines
3.3 KiB
Java

package com.mysema.query;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.sql.Types;
import org.junit.Test;
import com.mysema.query.sql.ColumnMetadata;
import com.mysema.query.sql.domain.QEmployee;
public class ColumnMetadataTest {
@Test
public void defaultColumn() {
ColumnMetadata column = ColumnMetadata.named("Person");
assertEquals("Person", column.getName());
assertFalse(column.hasJdbcType());
assertFalse(column.hasLength());
assertFalse(column.hasPrecisionAndScale());
assertTrue(column.isInsertable());
assertTrue(column.isUpdateable());
assertTrue(column.isNullable());
}
@Test(expected = IllegalStateException.class)
public void exceptionOnMissingType() {
ColumnMetadata column = ColumnMetadata.named("Person");
column.getJdbcType();
}
@Test(expected = IllegalStateException.class)
public void exceptionOnMissingLength() {
ColumnMetadata column = ColumnMetadata.named("Person");
column.getLength();
}
@Test(expected = IllegalStateException.class)
public void exceptionOnMissingPrecision() {
ColumnMetadata column = ColumnMetadata.named("Person");
column.getPrecision();
}
@Test(expected = IllegalStateException.class)
public void exceptionOnMissingScale() {
ColumnMetadata column = ColumnMetadata.named("Person");
column.getScale();
}
@Test(expected = IllegalStateException.class)
public void notBothPrecisionAndLength() {
ColumnMetadata column = ColumnMetadata.named("Person");
column.withlength(1).withPrecisionAndScale(1, 1);
}
@Test(expected = IllegalArgumentException.class)
public void lengthMustBePositive() {
ColumnMetadata column = ColumnMetadata.named("Person");
column.withlength(-1);
}
@Test(expected = IllegalArgumentException.class)
public void scaleMustBePositive() {
ColumnMetadata column = ColumnMetadata.named("Person");
column.withPrecisionAndScale(1, -1);
}
@Test(expected = IllegalArgumentException.class)
public void precisionMustBePositive() {
ColumnMetadata column = ColumnMetadata.named("Person");
column.withPrecisionAndScale(-1, 1);
}
@Test
public void testFullyConfigured() {
ColumnMetadata column = ColumnMetadata.named("Person").withlength(10).nonInsertable()
.nonUpdateable().notNull().ofType(Types.BIGINT);
assertEquals("Person", column.getName());
assertTrue(column.hasJdbcType());
assertEquals(Types.BIGINT, column.getJdbcType());
assertTrue(column.hasLength());
assertEquals(10, column.getLength());
assertFalse(column.hasPrecisionAndScale());
assertFalse(column.isInsertable());
assertFalse(column.isUpdateable());
assertFalse(column.isNullable());
}
@Test
public void extractFromRelationalPath() {
ColumnMetadata column = ColumnMetadata.getColumnMetadata(QEmployee.employee.id);
assertEquals("ID", column.getName());
}
@Test
public void fallBackToDefaultWhenMissing() {
ColumnMetadata column = ColumnMetadata.getColumnMetadata(QEmployee.employee.salary);
assertEquals("SALARY", column.getName());
}
}