package io.ebean.dbmigration.model;
import io.ebean.dbmigration.migration.ChangeSet;
import io.ebean.dbmigration.migration.DropColumn;
import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import static org.assertj.core.api.StrictAssertions.assertThat;
public class EntryTest {
@Test
public void test_when_empty() throws Exception {
PendingDrops.Entry entry = createEntry();
assertThat(entry.hasPendingDrops()).isFalse();
}
@Test
public void test_when_normal() throws Exception {
PendingDrops.Entry entry = createEntry(new ChangeSet());
assertThat(entry.hasPendingDrops()).isTrue();
}
@Test
public void test_when_suppressOnly() throws Exception {
ChangeSet cs = new ChangeSet();
cs.setSuppressDropsForever(Boolean.TRUE);
PendingDrops.Entry entry = createEntry(cs);
assertThat(entry.hasPendingDrops()).isFalse();
}
@Test
public void test_when_both() throws Exception {
ChangeSet cs = new ChangeSet();
cs.setSuppressDropsForever(Boolean.TRUE);
PendingDrops.Entry entry = createEntry(cs, new ChangeSet());
assertThat(entry.hasPendingDrops()).isTrue();
}
@Test
public void test_containsSuppressForever_when_empty() {
PendingDrops.Entry entry = createEntry();
assertThat(entry.containsSuppressForever()).isFalse();
}
@Test
public void test_containsSuppressForever_when_notSuppress() {
PendingDrops.Entry entry = createEntry(new ChangeSet());
assertThat(entry.containsSuppressForever()).isFalse();
}
@Test
public void test_containsSuppressForever_when_suppress() {
ChangeSet cs = new ChangeSet();
cs.setSuppressDropsForever(Boolean.TRUE);
PendingDrops.Entry entry = createEntry(cs);
assertThat(entry.containsSuppressForever()).isTrue();
}
@Test
public void test_containsSuppressForever_when_mixed() {
ChangeSet cs = new ChangeSet();
cs.setSuppressDropsForever(Boolean.TRUE);
PendingDrops.Entry entry = createEntry(cs, new ChangeSet());
assertThat(entry.containsSuppressForever()).isTrue();
}
@Test
public void test_removeDrops_when_columnsMatch() {
ChangeSet pending = changeSet("one", "two");
PendingDrops.Entry entry = createEntry(pending);
assertThat(entry.removeDrops(changeSet("one", "two"))).isTrue();
assertThat(entry.list).asList().doesNotContain(pending);
}
@Test
public void test_removeDrops_when_subset() {
DropColumn dropColumnTwo = col("two");
ChangeSet pending = changeSet("one");
pending.getChangeSetChildren().add(dropColumnTwo);
PendingDrops.Entry entry = createEntry(pending);
assertThat(entry.removeDrops(changeSet("one"))).isFalse();
assertThat(entry.list).asList().containsExactly(pending);
assertThat(pending.getChangeSetChildren()).asList().containsExactly(dropColumnTwo);
}
@Test
public void test_removeDrops_when_columnsMatch_butSuppressed() {
ChangeSet pending = changeSet("one", "two");
pending.setSuppressDropsForever(Boolean.TRUE);
PendingDrops.Entry entry = createEntry(pending);
assertThat(entry.removeDrops(changeSet("one", "two"))).isFalse();
assertThat(entry.list).asList().contains(pending);
assertThat(pending.getChangeSetChildren()).asList().hasSize(2);
}
static ChangeSet changeSet(String... colName) {
ChangeSet cs = new ChangeSet();
for (String col : colName) {
cs.getChangeSetChildren().add(col(col));
}
return cs;
}
static DropColumn col(String colName) {
DropColumn drop = new DropColumn();
drop.setColumnName(colName);
drop.setTableName("tab");
return drop;
}
@NotNull
static PendingDrops.Entry createEntry(ChangeSet... pending) {
PendingDrops.Entry entry = new PendingDrops.Entry(MigrationVersion.parse("1.1"));
for (ChangeSet changeSet : pending) {
entry.add(changeSet);
}
return entry;
}
}