67 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package db
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 	"fmt"
 | |
| 	"os"
 | |
| 	"strings"
 | |
| 	"testing"
 | |
| )
 | |
| 
 | |
| func TestMain(m *testing.M) {
 | |
| 	if err := testConnectAndInit(); nil != err {
 | |
| 		fmt.Fprintf(os.Stderr, err.Error())
 | |
| 		os.Exit(1)
 | |
| 		return
 | |
| 	}
 | |
| 	os.Exit(m.Run())
 | |
| }
 | |
| 
 | |
| func needsTestDB() (string, error) {
 | |
| 	connStr := os.Getenv("TEST_DATABASE_URL")
 | |
| 	if "" == connStr {
 | |
| 		return "", errors.New(`no connection string defined
 | |
| 
 | |
| You must set TEST_DATABASE_URL to run db tests.
 | |
| 
 | |
| You may find this helpful:
 | |
| 
 | |
|     psql 'postgres://postgres:postgres@localhost:5432/postgres'
 | |
| 
 | |
| 	DROP DATABASE IF EXISTS postgres_test;
 | |
| 	CREATE DATABASE postgres_test;
 | |
| 	\q
 | |
| 
 | |
| Then your test database URL will be
 | |
| 
 | |
|     export TEST_DATABASE_URL=postgres://postgres:postgres@localhost:5432/postgres_test`)
 | |
| 	}
 | |
| 	return connStr, nil
 | |
| }
 | |
| 
 | |
| func testConnectAndInit() error {
 | |
| 	connStr, err := needsTestDB()
 | |
| 	if nil != err {
 | |
| 		return err
 | |
| 	}
 | |
| 	if strings.Contains(connStr, "@localhost/") || strings.Contains(connStr, "@localhost:") {
 | |
| 		connStr += "?sslmode=disable"
 | |
| 	} else {
 | |
| 		connStr += "?sslmode=required"
 | |
| 	}
 | |
| 
 | |
| 	if err := Init(connStr); nil != err {
 | |
| 		return fmt.Errorf("db connection error: %w", err)
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func TestDropAll(t *testing.T) {
 | |
| 	connStr := os.Getenv("TEST_DATABASE_URL")
 | |
| 
 | |
| 	if err := DropAllTables(PleaseDoubleCheckTheDatabaseURLDontDropProd(connStr)); nil != err {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| }
 |