-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbinder_test.go
More file actions
94 lines (80 loc) · 3 KB
/
Copy pathbinder_test.go
File metadata and controls
94 lines (80 loc) · 3 KB
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
package sqle
import (
"context"
"database/sql"
"testing"
_ "github.com/mattn/go-sqlite3"
"github.com/stretchr/testify/require"
)
type UserWithUnderscoreTag struct {
ID int `db:"id"`
FirstName string `db:"first_name"`
LastName string `db:"last_name"`
Email string `db:"email"`
}
type UserWithoutTag struct {
ID int
FirstName string
LastName string
Email string
}
func TestStructBinderWithUnderscoreTags(t *testing.T) {
d, err := sql.Open("sqlite3", "file::memory:?cache=shared")
require.NoError(t, err)
defer d.Close()
_, err = d.Exec("CREATE TABLE users (id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT, email TEXT)")
require.NoError(t, err)
_, err = d.Exec("INSERT INTO users (id, first_name, last_name, email) VALUES (1, 'John', 'Doe', 'john@example.com')")
require.NoError(t, err)
db := Open(d)
t.Run("db_tag_with_underscores_should_work", func(t *testing.T) {
var user UserWithUnderscoreTag
err := db.QueryRow("SELECT id, first_name, last_name, email FROM users WHERE id = 1").Bind(&user)
require.NoError(t, err)
require.Equal(t, 1, user.ID)
require.Equal(t, "John", user.FirstName)
require.Equal(t, "Doe", user.LastName)
require.Equal(t, "john@example.com", user.Email)
})
t.Run("without_tag_should_work", func(t *testing.T) {
var user UserWithoutTag
err := db.QueryRow("SELECT id, first_name, last_name, email FROM users WHERE id = 1").Bind(&user)
require.NoError(t, err)
require.Equal(t, 1, user.ID)
require.Equal(t, "John", user.FirstName)
require.Equal(t, "Doe", user.LastName)
require.Equal(t, "john@example.com", user.Email)
})
t.Run("uppercase_column_names_should_work", func(t *testing.T) {
var user UserWithUnderscoreTag
err := db.QueryRow("SELECT id, FIRST_NAME, LAST_NAME, EMAIL FROM users WHERE id = 1").Bind(&user)
require.NoError(t, err)
require.Equal(t, 1, user.ID)
require.Equal(t, "John", user.FirstName)
require.Equal(t, "Doe", user.LastName)
require.Equal(t, "john@example.com", user.Email)
})
t.Run("mixed_case_column_names_should_work", func(t *testing.T) {
var user UserWithUnderscoreTag
err := db.QueryRow("SELECT id, First_Name, Last_Name, Email FROM users WHERE id = 1").Bind(&user)
require.NoError(t, err)
require.Equal(t, 1, user.ID)
require.Equal(t, "John", user.FirstName)
require.Equal(t, "Doe", user.LastName)
require.Equal(t, "john@example.com", user.Email)
})
t.Run("slice_binding_should_work", func(t *testing.T) {
_, err = d.Exec("INSERT INTO users (id, first_name, last_name, email) VALUES (2, 'Jane', 'Smith', 'jane@example.com')")
require.NoError(t, err)
var users []UserWithUnderscoreTag
rows, err := db.QueryBuilder(context.Background(), New("SELECT id, first_name, last_name, email FROM users ORDER BY id"))
require.NoError(t, err)
err = rows.Bind(&users)
require.NoError(t, err)
require.Len(t, users, 2)
require.Equal(t, 1, users[0].ID)
require.Equal(t, "John", users[0].FirstName)
require.Equal(t, 2, users[1].ID)
require.Equal(t, "Jane", users[1].FirstName)
})
}