-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconnector_test.go
113 lines (82 loc) · 3.36 KB
/
connector_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package wpgx_test
import (
"io/ioutil"
"path/filepath"
"testing"
"github.com/pkg/errors"
"github.com/shestakovda/wpgx"
"github.com/stretchr/testify/assert"
)
func TestConnector(t *testing.T) {
db, err := wpgx.Connect("port=test")
assert.EqualError(t, err, "parsing connection string: strconv.ParseUint: parsing \"test\": invalid syntax")
db, err = wpgx.Connect("postgresql://***")
assert.EqualError(t, err, "creating connection pool: dial tcp: lookup ***: no such host")
db, err = wpgx.Connect(connStr, wpgx.ReservePath("./connector.go"))
assert.EqualError(t, err, "applying connection options: reserve path is not a directory")
db, err = wpgx.Connect(connStr, wpgx.ReservePath(reserve))
assert.NoError(t, err)
assert.NotNil(t, db)
defer db.Close()
defer func() {
err = db.Deal(nil, `DROP TABLE users;`)
assert.NoError(t, err)
db.Close()
_, err = db.Cook(`SELECT 1;`)
assert.Equal(t, wpgx.ErrConnClosed, errors.Cause(err))
err = db.Deal(nil, `SELECT 1;`)
assert.Equal(t, wpgx.ErrConnClosed, errors.Cause(err))
err = db.Load(nil, `SELECT 1;`)
assert.Equal(t, wpgx.ErrConnClosed, errors.Cause(err))
err = db.Save(nil, `SELECT 1;`, nil)
assert.Equal(t, wpgx.ErrConnClosed, errors.Cause(err))
}()
_, err = db.Cook(`SELECT 1;`)
assert.NoError(t, err)
_, err = db.Cook(`SELECT FROM WHERE;`)
assert.EqualError(t, err, "preparing statement: ERROR: syntax error at or near \"WHERE\" (SQLSTATE 42601)")
err = db.Jail(false)
assert.NoError(t, err)
err = db.Deal(nil, `SELECT 1;`)
assert.NoError(t, err)
err = db.Deal(nil, `SELECT FROM WHERE;`)
assert.EqualError(t, err, "executing query: ERROR: syntax error at or near \"WHERE\" (SQLSTATE 42601)")
err = db.Load(nil, `SELECT FROM WHERE;`)
assert.EqualError(t, err, "selecting data: ERROR: syntax error at or near \"WHERE\" (SQLSTATE 42601)")
strings := make(wpgx.Strings, 0, 1)
err = db.Deal(&strings, `SELECT FROM WHERE;`)
assert.EqualError(t, err, "selecting data: ERROR: syntax error at or near \"WHERE\" (SQLSTATE 42601)")
err = db.Deal(&strings, `SELECT 'test';`)
assert.NoError(t, err)
assert.Len(t, strings, 1)
assert.Equal(t, "test", strings[0])
err = db.Deal(nil, `CREATE TABLE users (id serial PRIMARY KEY, name text not null);`)
assert.NoError(t, err)
sqlInsert, err := db.Cook(`INSERT INTO users (name) VALUES ($1) RETURNING id;`, "name")
assert.NoError(t, err)
assert.NotEmpty(t, sqlInsert)
strings = make(wpgx.Strings, 0, 1)
u := &user{
Name: "test",
}
err = db.Save(u, sqlInsert, &strings)
assert.NoError(t, err)
assert.Len(t, strings, 1)
assert.Equal(t, "1", strings[0])
nu := new(user)
sqlSelect, err := db.Cook(`SELECT * FROM users WHERE id = $1;`)
assert.NoError(t, err)
assert.NotEmpty(t, sqlSelect)
err = db.Load(nu, sqlSelect, 1)
assert.NoError(t, err)
assert.Equal(t, 1, nu.ID)
assert.Equal(t, "test", nu.Name)
err = db.Save(new(user), sqlInsert, nil)
assert.EqualError(t, err, "executing query: ERROR: null value in column \"name\" violates not-null constraint (SQLSTATE 23502)")
dump, err := ioutil.ReadFile(filepath.Join(reserve, sqlInsert+".pgsql"))
assert.NoError(t, err)
assert.Equal(t, "INSERT INTO users (name) VALUES ($1) RETURNING id;", string(dump))
dump, err = ioutil.ReadFile(filepath.Join(reserve, sqlInsert+"_c3b374cf5a76aa557c625f9eaa6e91f462b67fe2.json"))
assert.NoError(t, err)
assert.Equal(t, "{\n \"name\": null\n}", string(dump))
}