package io.ebean.dbmigration.model.build;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.config.DbConstraintNaming;
import io.ebean.dbmigration.ddlgeneration.platform.DefaultConstraintMaxLength;
import io.ebean.dbmigration.model.MColumn;
import io.ebean.dbmigration.model.MTable;
import io.ebean.dbmigration.model.ModelContainer;
import io.ebean.dbmigration.model.visitor.VisitAllUsing;
import io.ebeaninternal.api.SpiEbeanServer;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class ModelBuildBeanVisitorTest extends BaseTestCase {
@Test
public void test() {
SpiEbeanServer defaultServer = (SpiEbeanServer) Ebean.getDefaultServer();
ModelContainer model = new ModelContainer();
DbConstraintNaming constraintNaming = defaultServer.getServerConfig().getConstraintNaming();
DefaultConstraintMaxLength maxLength = new DefaultConstraintMaxLength(60);
ModelBuildContext ctx = new ModelBuildContext(model, constraintNaming, maxLength, true);
ModelBuildBeanVisitor addTable = new ModelBuildBeanVisitor(ctx);
new VisitAllUsing(addTable, defaultServer).visitAllBeans();
assert_compound_pk(model);
assert_discriminatorColumn_explicit(model);
assert_discriminatorColumn_implied(model);
assert_discriminatorColumn_length(model);
}
private void assert_compound_pk(ModelContainer model) {
MTable item = model.getTable("item");
assertThat(item).isNotNull();
assertThat(item.primaryKeyColumns()).hasSize(2);
}
private void assert_discriminatorColumn_explicit(ModelContainer model) {
MTable configuration = model.getTable("configuration");
MColumn discTypeColumn = configuration.getColumn("type");
assertThat(discTypeColumn.getType()).isEqualTo("varchar(21)");
assertThat(discTypeColumn.isNotnull()).isTrue();
}
private void assert_discriminatorColumn_implied(ModelContainer model) {
MTable configuration = model.getTable("bar");
MColumn discTypeColumn = configuration.getColumn("bar_type");
assertThat(discTypeColumn.getType()).isEqualTo("varchar(31)");
assertThat(discTypeColumn.isNotnull()).isTrue();
}
private void assert_discriminatorColumn_length(ModelContainer model) {
MTable configuration = model.getTable("vehicle");
MColumn discTypeColumn = configuration.getColumn("dtype");
assertThat(discTypeColumn.getType()).isEqualTo("varchar(3)");
assertThat(discTypeColumn.isNotnull()).isTrue();
}
}