github.com/fasmat/pop@v4.13.1+incompatible/dialect_sqlite_test.go (about) 1 // +build sqlite 2 3 package pop 4 5 import ( 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "testing" 10 11 "github.com/stretchr/testify/require" 12 ) 13 14 var sqliteDefaultOptions = map[string]string{"_busy_timeout": "5000", "_fk": "true"} 15 16 func Test_ConnectionDetails_Finalize_SQLite_URL_Only(t *testing.T) { 17 r := require.New(t) 18 19 cd := &ConnectionDetails{ 20 URL: "sqlite3:///tmp/foo.db", 21 } 22 err := cd.Finalize() // calls withURL() and urlParserSQLite3(cd) 23 r.NoError(err) 24 r.Equal("sqlite3", cd.Dialect, "given dialect: N/A") 25 r.Equal("/tmp/foo.db", cd.Database, "given url: sqlite3:///tmp/foo.db") 26 r.EqualValues(sqliteDefaultOptions, cd.Options, "given url: sqlite3:///tmp/foo.db") 27 } 28 29 func Test_ConnectionDetails_Finalize_SQLite_OverrideOptions_URL_Only(t *testing.T) { 30 r := require.New(t) 31 32 cd := &ConnectionDetails{ 33 URL: "sqlite3:///tmp/foo.db?_fk=false&foo=bar", 34 } 35 err := cd.Finalize() // calls withURL() and urlParserSQLite3(cd) 36 r.NoError(err) 37 r.Equal("sqlite3", cd.Dialect, "given dialect: N/A") 38 r.Equal("/tmp/foo.db", cd.Database, "given url: sqlite3:///tmp/foo.db?_fk=false&foo=bar") 39 r.EqualValues(map[string]string{"_fk": "false", "foo": "bar", "_busy_timeout": "5000"}, cd.Options, "given url: sqlite3:///tmp/foo.db?_fk=false&foo=bar") 40 } 41 42 func Test_ConnectionDetails_Finalize_SQLite_SynURL_Only(t *testing.T) { 43 r := require.New(t) 44 45 cd := &ConnectionDetails{ 46 URL: "sqlite:///tmp/foo.db", 47 } 48 err := cd.Finalize() // calls withURL() and urlParserSQLite3(cd) 49 r.NoError(err) 50 r.Equal("sqlite3", cd.Dialect, "given dialect: N/A") 51 r.Equal("/tmp/foo.db", cd.Database, "given url: sqlite:///tmp/foo.db") 52 r.EqualValues(sqliteDefaultOptions, cd.Options, "given url: sqlite3:///tmp/foo.db") 53 } 54 55 func Test_ConnectionDetails_Finalize_SQLite_Dialect_URL(t *testing.T) { 56 r := require.New(t) 57 cd := &ConnectionDetails{ 58 Dialect: "sqlite3", 59 URL: "sqlite3:///tmp/foo.db", 60 } 61 err := cd.Finalize() // calls withURL() and urlParserSQLite3(cd) 62 r.NoError(err) 63 r.Equal("sqlite3", cd.Dialect, "given dialect: sqlite3") 64 r.Equal("/tmp/foo.db", cd.Database, "given url: sqlite3:///tmp/foo.db") 65 r.EqualValues(sqliteDefaultOptions, cd.Options, "given url: sqlite3:///tmp/foo.db") 66 } 67 68 func Test_ConnectionDetails_Finalize_SQLite_Dialect_SynURL(t *testing.T) { 69 r := require.New(t) 70 cd := &ConnectionDetails{ 71 Dialect: "sqlite3", 72 URL: "sqlite:///tmp/foo.db", 73 } 74 err := cd.Finalize() // calls withURL() and urlParserSQLite3(cd) 75 r.NoError(err) 76 r.Equal("sqlite3", cd.Dialect, "given dialect: sqlite3") 77 r.Equal("/tmp/foo.db", cd.Database, "given url: sqlite:///tmp/foo.db") 78 r.EqualValues(sqliteDefaultOptions, cd.Options, "given url: sqlite3:///tmp/foo.db") 79 } 80 81 func Test_ConnectionDetails_Finalize_SQLite_Synonym_URL(t *testing.T) { 82 r := require.New(t) 83 cd := &ConnectionDetails{ 84 Dialect: "sqlite", 85 URL: "sqlite3:///tmp/foo.db", 86 } 87 err := cd.Finalize() // calls withURL() and urlParserSQLite3(cd) 88 r.NoError(err) 89 r.Equal("sqlite3", cd.Dialect, "given dialect: sqlite") 90 r.Equal("/tmp/foo.db", cd.Database, "given url: sqlite3:///tmp/foo.db") 91 r.Equal(sqliteDefaultOptions, cd.Options, "given url: sqlite3:///tmp/foo.db") 92 } 93 94 func Test_ConnectionDetails_Finalize_SQLite_Synonym_SynURL(t *testing.T) { 95 r := require.New(t) 96 cd := &ConnectionDetails{ 97 Dialect: "sqlite", 98 URL: "sqlite:///tmp/foo.db", 99 } 100 err := cd.Finalize() // calls withURL() and urlParserSQLite3(cd) 101 r.NoError(err) 102 r.Equal("sqlite3", cd.Dialect, "given dialect: sqlite") 103 r.Equal("/tmp/foo.db", cd.Database, "given url: sqlite:///tmp/foo.db") 104 r.EqualValues(sqliteDefaultOptions, cd.Options, "given url: sqlite:///tmp/foo.db") 105 } 106 107 func Test_ConnectionDetails_Finalize_SQLite_Synonym_Path(t *testing.T) { 108 r := require.New(t) 109 cd := &ConnectionDetails{ 110 Dialect: "sqlite", 111 Database: "./foo.db", 112 } 113 err := cd.Finalize() // calls withURL() and urlParserSQLite3(cd) 114 r.NoError(err) 115 r.Equal("sqlite3", cd.Dialect, "given dialect: sqlite") 116 r.Equal("./foo.db", cd.Database, "given database: ./foo.db") 117 r.EqualValues(sqliteDefaultOptions, cd.Options, "given url: ./foo.db") 118 } 119 120 func Test_ConnectionDetails_Finalize_SQLite_OverrideOptions_Synonym_Path(t *testing.T) { 121 r := require.New(t) 122 123 cd := &ConnectionDetails{ 124 URL: "sqlite3:///tmp/foo.db?_fk=false&foo=bar", 125 } 126 err := cd.Finalize() // calls withURL() and urlParserSQLite3(cd) 127 r.NoError(err) 128 r.Equal("sqlite3", cd.Dialect, "given dialect: N/A") 129 r.Equal("/tmp/foo.db", cd.Database, "given url: sqlite3:///tmp/foo.db") 130 r.EqualValues(map[string]string{"_fk": "false", "foo": "bar", "_busy_timeout": "5000"}, cd.Options, "given url: sqlite3:///tmp/foo.db?_fk=false&foo=bar") 131 } 132 133 func Test_ConnectionDetails_FinalizeOSPath(t *testing.T) { 134 r := require.New(t) 135 d, err := ioutil.TempDir("", "") 136 r.NoError(err) 137 p := filepath.Join(d, "testdb.sqlite") 138 defer os.RemoveAll(p) 139 cd := &ConnectionDetails{ 140 Dialect: "sqlite", 141 Database: p, 142 } 143 r.NoError(cd.Finalize()) 144 r.Equal("sqlite3", cd.Dialect) 145 r.EqualValues(p, cd.Database) 146 }