package io.ebean.dbmigration.model;
import io.ebean.dbmigration.migration.Migration;
import io.ebean.dbmigration.migrationreader.MigrationXmlReader;
import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class ModelContainerTest {
@Test
public void apply_when_noPendingDrops_then_emptyPending() throws Exception {
ModelContainer container = new ModelContainer();
container.apply(mig("1.0.model.xml"), ver("1.1"));
assertThat(container.getPendingDrops()).isEmpty();
}
@Test
public void apply_when_pendingDrops_then_registeredHistoryTable() throws Exception {
ModelContainer base = container_1_1();
MTable table = base.getTable("document");
assertThat(table.allHistoryColumns(true)).doesNotContain("zing");
container_1_1().registerPendingHistoryDropColumns(base);
assertThat(table.allHistoryColumns(true)).contains("zing");
assertThat(table.allHistoryColumns(false)).doesNotContain("zing");
}
@Test
public void apply_when_pendingDropsApplied_then_droppedTableNotInHistory() throws Exception {
ModelContainer container = container_1_1();
container.apply(mig("1.1_2__drops.model.xml"), ver("1.1_2"));
ModelContainer base = container_1_1();
container.registerPendingHistoryDropColumns(base);
assertThat(base.getTable("document").allHistoryColumns(false)).doesNotContain("zing");
assertThat(base.getTable("document").allHistoryColumns(true)).doesNotContain("zing");
}
@Test
public void apply_when_apply_partial_pendingDrops_then_some_remainder() throws Exception {
ModelContainer container = container_2_1();
container.apply(mig("2.2__drops.model.xml"), ver("2.2"));
ModelContainer base = container_2_1();
container.registerPendingHistoryDropColumns(base);
List<String> normalColumns = base.getTable("document").allHistoryColumns(false);
List<String> historyColumns = base.getTable("document").allHistoryColumns(true);
assertThat(historyColumns).contains("zong", "boom", "baz", "bar");
assertThat(normalColumns).doesNotContain("zing", "zong", "boom", "baz", "bar");
}
@NotNull
private ModelContainer container_2_1() {
ModelContainer container = new ModelContainer();
container.apply(mig("2.0.model.xml"), ver("2.0"));
container.apply(mig("2.1.model.xml"), ver("2.1"));
return container;
}
@NotNull
private ModelContainer container_1_1() {
ModelContainer container = new ModelContainer();
container.apply(mig("1.0.model.xml"), ver("1.0"));
container.apply(mig("1.1.model.xml"), ver("1.1"));
return container;
}
private MigrationVersion ver(String version) {
return MigrationVersion.parse(version);
}
private Migration mig(String path) {
return MigrationXmlReader.read(ModelContainerTest.class.getResourceAsStream(path));
}
}