package io.ebean.dbmigration.model; import org.junit.Test; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static org.assertj.core.api.StrictAssertions.assertThat; public class MigrationVersionTest { @Test public void sort() { List<MigrationVersion> list = new ArrayList<>(); list.add(MigrationVersion.parse("1.1__point")); list.add(MigrationVersion.parse("3.0__three")); list.add(MigrationVersion.parse("1.0__init")); list.add(MigrationVersion.parse("R__beta")); list.add(MigrationVersion.parse("R__alpha")); Collections.sort(list); assertThat(list.get(0).getComment()).isEqualTo("init"); assertThat(list.get(1).getComment()).isEqualTo("point"); assertThat(list.get(2).getComment()).isEqualTo("three"); assertThat(list.get(3).getComment()).isEqualTo("alpha"); assertThat(list.get(4).getComment()).isEqualTo("beta"); } @Test public void test_parse_hyphenSnapshot() { MigrationVersion version = MigrationVersion.parse("0.1.1-SNAPSHOT"); assertThat(version.normalised()).isEqualTo("0.1.1"); assertThat(version.getComment()).isEqualTo(""); } @Test public void test_parse_hyphenSnapshot_when_underscores() { MigrationVersion version = MigrationVersion.parse("0_1_1-SNAPSHOT__Foo"); assertThat(version.normalised()).isEqualTo("0.1.1"); assertThat(version.getComment()).isEqualTo("Foo"); } @Test public void test_parse_when_repeatable() throws Exception { MigrationVersion version = MigrationVersion.parse("R__Foo"); assertThat(version.getComment()).isEqualTo("Foo"); assertThat(version.normalised()).isEqualTo("R"); } @Test public void test_parse_when_repeatable_case() throws Exception { MigrationVersion version = MigrationVersion.parse("r__Foo"); assertThat(version.isRepeatable()).isTrue(); assertThat(version.getComment()).isEqualTo("Foo"); assertThat(version.normalised()).isEqualTo("R"); assertThat(version.normalised()).isEqualTo("R"); } @Test public void test_parse_when_v_prefix() throws Exception { MigrationVersion version = MigrationVersion.parse("v1_0__Foo"); assertThat(version.isRepeatable()).isFalse(); assertThat(version.getComment()).isEqualTo("Foo"); assertThat(version.normalised()).isEqualTo("1.0"); assertThat(version.asString()).isEqualTo("1_0"); assertThat(version.getRaw()).isEqualTo("1_0__Foo"); } @Test public void repeatable_compareTo() throws Exception { MigrationVersion foo = MigrationVersion.parse("R__Foo"); MigrationVersion bar = MigrationVersion.parse("R__Bar"); assertThat(foo.compareTo(bar)).isGreaterThan(0); assertThat(bar.compareTo(foo)).isLessThan(0); MigrationVersion bar2 = MigrationVersion.parse("R__Bar"); assertThat(bar.compareTo(bar2)).isEqualTo(0); } @Test public void repeatable_compareTo_when_caseDifferent() throws Exception { MigrationVersion none = MigrationVersion.parse("R__"); MigrationVersion bar = MigrationVersion.parse("R__Bar"); MigrationVersion bar2 = MigrationVersion.parse("R__bar"); assertThat(none.compareTo(bar)).isLessThan(0); assertThat(bar.compareTo(bar2)).isLessThan(0); assertThat(none.compareTo(bar2)).isLessThan(0); } @Test public void test_parse_getComment() throws Exception { assertThat(MigrationVersion.parse("1.1.1_2__Foo").getComment()).isEqualTo("Foo"); assertThat(MigrationVersion.parse("1.1.1.2__junk").getComment()).isEqualTo("junk"); assertThat(MigrationVersion.parse("1.1_1.2_foo").getComment()).isEqualTo(""); assertThat(MigrationVersion.parse("1.1_1.2_d").getComment()).isEqualTo(""); assertThat(MigrationVersion.parse("1.1_1.2_").getComment()).isEqualTo(""); assertThat(MigrationVersion.parse("1.1_1.2").getComment()).isEqualTo(""); } @Test public void test_nextVersion_expect_preserveUnderscores() { assertThat(MigrationVersion.parse("2").nextVersion()).isEqualTo("3"); assertThat(MigrationVersion.parse("1.0").nextVersion()).isEqualTo("1.1"); assertThat(MigrationVersion.parse("2.0.b34").nextVersion()).isEqualTo("2.1"); assertThat(MigrationVersion.parse("1.1.1_2__Foo").nextVersion()).isEqualTo("1.1.1_3"); assertThat(MigrationVersion.parse("1.1.1.2_junk").nextVersion()).isEqualTo("1.1.1.3"); assertThat(MigrationVersion.parse("1_2.3_4__Foo").nextVersion()).isEqualTo("1_2.3_5"); assertThat(MigrationVersion.parse("1_2.3_4_").nextVersion()).isEqualTo("1_2.3_5"); assertThat(MigrationVersion.parse("1_2_3_4__Foo").nextVersion()).isEqualTo("1_2_3_5"); } @Test public void test_normalised_expect_periods() { assertThat(MigrationVersion.parse("2").normalised()).isEqualTo("2"); assertThat(MigrationVersion.parse("1.0").normalised()).isEqualTo("1.0"); assertThat(MigrationVersion.parse("2.0.b34").normalised()).isEqualTo("2.0"); assertThat(MigrationVersion.parse("1.1.1_2__Foo").normalised()).isEqualTo("1.1.1.2"); assertThat(MigrationVersion.parse("1.1.1.2_junk").normalised()).isEqualTo("1.1.1.2"); assertThat(MigrationVersion.parse("1_2.3_4__Foo").normalised()).isEqualTo("1.2.3.4"); assertThat(MigrationVersion.parse("1_2.3_4_").normalised()).isEqualTo("1.2.3.4"); assertThat(MigrationVersion.parse("1_2_3_4__Foo").normalised()).isEqualTo("1.2.3.4"); } @Test public void test_compareTo_isEqual() throws Exception { MigrationVersion v0 = MigrationVersion.parse("1.1.1_2__Foo"); MigrationVersion v1 = MigrationVersion.parse("1.1.1.2_junk"); MigrationVersion v2 = MigrationVersion.parse("1.1_1.2_foo"); MigrationVersion v3 = MigrationVersion.parse("1.1_1.2__foo"); assertThat(v0.compareTo(v1)).isGreaterThan(0); assertThat(v1.compareTo(v0)).isLessThan(0); assertThat(v1.compareTo(v2)).isEqualTo(0); assertThat(v0.compareTo(v3)).isLessThan(0); assertThat(v3.compareTo(v0)).isGreaterThan(0); } @Test public void test_compareTo() throws Exception { MigrationVersion v0 = MigrationVersion.parse("1.1.1.1_junk"); MigrationVersion v1 = MigrationVersion.parse("1.1.1.2_junk"); MigrationVersion v2 = MigrationVersion.parse("1.1_1.3_junk"); MigrationVersion v3 = MigrationVersion.parse("1.2_1.2_junk"); MigrationVersion v4 = MigrationVersion.parse("2.1_1.2_junk"); assertThat(v1.compareTo(v0)).isEqualTo(1); assertThat(v1.compareTo(v2)).isEqualTo(-1); assertThat(v1.compareTo(v3)).isEqualTo(-1); assertThat(v1.compareTo(v4)).isEqualTo(-1); } }