PostgreSQL DataSource Integration Test Helper
A helper class for PostgreSQL integration testing.
It allows for postgresql connections made from
- System properties (give name of property that defines the port and the name of the database)
 - Environment Variables (give name of environment variable, that contain a connect URI)
 - fallback 
  
- from PG* Environment variables
 - from ${user.name} (as user, password and database)
 
 
It also implements a number of helper methods, to manipulate the database.
Functions to:
- wipe a schema
 - dump/truncate and restore tables either by name from a list or all tables in foreign key respecting order
 
Usage
A typical use case is outlined below:
Typical Test Environment
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>${some.version}</version>
        <configuration>
            <redirectTestOutputToFile>false</redirectTestOutputToFile>
            <systemPropertyVariables>
                <postgresql.testbase.port>${postgresql.testbase.port}</postgresql.testbase.port>
                <postgresql.dump.folder>${postgresql.dump.folder}</postgresql.dump.folder>
            </systemPropertyVariables>
            <argLine>-Dfile.encoding=${project.build.sourceEncoding}</argLine>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>integration-test</goal>
                    <goal>verify</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>dk.kosmisk</groupId>
        <artifactId>postgresql-maven-plugin</artifactId>
        <version>${some.version}</version>
        <configuration>
            <!-- <version>LATEST</version> -->
        </configuration>
        <executions>
            <execution>
                <id>postgresql-test-database</id>
                <goals>
                    <goal>setup</goal>
                    <goal>startup</goal>
                    <goal>shutdown</goal>
                </goals>
                <configuration>
                    <name>testbase</name>
                    <scripts>
                        <script>${basedir}/src/test/resources/schema.sql</script>
                        <script>${basedir}/src/test/resources/testdata.sql</script>
                    </scripts>
                </configuration>
            </execution>
        </executions>
    </plugin>
 
...
    <dependency>
        <groupId>dk.kosmisk</groupId>
        <artifactId>postgresql-test-datasource</artifactId>
        <version>${some.version}</version>
        <type>jar</type>
    </dependency>
 
Typical Test
    public class EntityTest {
        private PostgresITDataSource dataSource;
        @Before
        public void setup() throws Exception {
            dataSource = PostgresITDataSource.builder()
                    .fromProperty("testbase", "postgresql.testbase.port")
                    .fromEnvironment("MY_PGTEST_URL")
                    .withFallback()
                    .build();
           dataSource.copyAllTablesToDisk();
        }
        @After
        public void cleanup() throws Exception {
            dataSource.truncateAllTables();
            dataSource.copyAllTablesFromDisk();
        }
        @Test
        public void testSomething() throws Exception {
            System.out.println("Something");
            try(Connection connection = dataSource.getConnection()) {
 
...
            }
        }