Skip to content

Commit 5c5b6c1

Browse files
authored
Merge pull request #104 from zonkyio/flyway-preparer-properties
#96 Extend FlywayPreparer by a new fromConfiguration factory method
2 parents 4f31a35 + e349677 commit 5c5b6c1

File tree

2 files changed

+40
-19
lines changed

2 files changed

+40
-19
lines changed

src/main/java/io/zonky/test/db/postgres/embedded/FlywayPreparer.java

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,53 @@
1313
*/
1414
package io.zonky.test.db.postgres.embedded;
1515

16-
import java.sql.SQLException;
17-
import java.util.Arrays;
18-
import java.util.List;
19-
import java.util.Objects;
20-
21-
import javax.sql.DataSource;
22-
2316
import org.apache.commons.lang3.reflect.MethodUtils;
2417
import org.flywaydb.core.Flyway;
2518
import org.flywaydb.core.api.configuration.FluentConfiguration;
2619

27-
// TODO: Detect missing migration files.
28-
// cf. https://github.com/flyway/flyway/issues/1496
29-
// There is also a related @Ignored test in otj-sql.
20+
import javax.sql.DataSource;
21+
import java.sql.SQLException;
22+
import java.util.Arrays;
23+
import java.util.HashMap;
24+
import java.util.List;
25+
import java.util.Map;
26+
import java.util.Objects;
3027

3128
public final class FlywayPreparer implements DatabasePreparer {
3229

3330
private final FluentConfiguration configuration;
3431
private final List<String> locations;
32+
private final Map<String, String> properties;
3533

34+
/**
35+
* Creates a new instance of the preparer with the specified locations of migrations.
36+
*/
3637
public static FlywayPreparer forClasspathLocation(String... locations) {
3738
FluentConfiguration config = Flyway.configure().locations(locations);
38-
return new FlywayPreparer(config, Arrays.asList(locations));
39+
return new FlywayPreparer(config, Arrays.asList(locations), null);
3940
}
4041

41-
private FlywayPreparer(FluentConfiguration configuration, List<String> locations) {
42+
/**
43+
* Creates a new instance of the preparer with the specified configuration properties.
44+
*
45+
* <p>Example of use:
46+
* <pre> {@code
47+
* FlywayPreparer preparer = FlywayPreparer.fromConfiguration(Map.of(
48+
* "flyway.locations", "db/migration",
49+
* "flyway.postgresql.transactional.lock", "false"));
50+
* }</pre>
51+
*
52+
* A list of all available configuration properties can be found <a href='https://flywaydb.org/documentation/configuration/configfile.html'>here</a>.
53+
*/
54+
public static FlywayPreparer fromConfiguration(Map<String, String> configuration) {
55+
FluentConfiguration config = Flyway.configure().configuration(configuration);
56+
return new FlywayPreparer(config, null, new HashMap<>(configuration));
57+
}
58+
59+
private FlywayPreparer(FluentConfiguration configuration, List<String> locations, Map<String, String> properties) {
4260
this.configuration = configuration;
4361
this.locations = locations;
62+
this.properties = properties;
4463
}
4564

4665
@Override
@@ -55,15 +74,15 @@ public void prepare(DataSource ds) throws SQLException {
5574
}
5675

5776
@Override
58-
public boolean equals(Object obj) {
59-
if (! (obj instanceof FlywayPreparer)) {
60-
return false;
61-
}
62-
return Objects.equals(locations, ((FlywayPreparer) obj).locations);
77+
public boolean equals(Object o) {
78+
if (this == o) return true;
79+
if (o == null || getClass() != o.getClass()) return false;
80+
FlywayPreparer that = (FlywayPreparer) o;
81+
return Objects.equals(locations, that.locations) && Objects.equals(properties, that.properties);
6382
}
6483

6584
@Override
6685
public int hashCode() {
67-
return Objects.hashCode(locations);
86+
return Objects.hash(locations, properties);
6887
}
6988
}

src/test/java/io/zonky/test/db/postgres/junit/FlywayPreparerTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,16 @@
1818
import java.sql.Connection;
1919
import java.sql.ResultSet;
2020
import java.sql.Statement;
21+
import java.util.Collections;
2122

2223
import io.zonky.test.db.postgres.embedded.FlywayPreparer;
2324
import org.junit.Rule;
2425
import org.junit.Test;
2526

2627
public class FlywayPreparerTest {
2728
@Rule
28-
public PreparedDbRule db = EmbeddedPostgresRules.preparedDatabase(FlywayPreparer.forClasspathLocation("db/testing"));
29+
public PreparedDbRule db = EmbeddedPostgresRules.preparedDatabase(FlywayPreparer.fromConfiguration(
30+
Collections.singletonMap("flyway.locations", "db/testing")));
2931

3032
@Test
3133
public void testTablesMade() throws Exception {

0 commit comments

Comments
 (0)