-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathstore_test.go
150 lines (118 loc) · 3.6 KB
/
store_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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package postgres
import (
"database/sql"
"os"
"testing"
"github.com/ory/dockertest/v3"
"github.com/sirupsen/logrus"
"github.com/code-payments/code-server/pkg/code/data/phone"
"github.com/code-payments/code-server/pkg/code/data/phone/tests"
postgrestest "github.com/code-payments/code-server/pkg/database/postgres/test"
_ "github.com/jackc/pgx/v4/stdlib"
)
const (
// Used for testing ONLY, the table and migrations are external to this repository
tableCreate = `
CREATE TABLE codewallet__core_phoneverification(
id SERIAL NOT NULL PRIMARY KEY,
phone_number TEXT NOT NULL,
owner_account TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
last_verified_at TIMESTAMP WITH TIME ZONE NOT NULL,
CONSTRAINT codewallet__core_phoneverification__uniq__owner_account__and__phone_number UNIQUE (owner_account, phone_number)
);
CREATE TABLE codewallet__core_phonelinkingtoken(
id SERIAL NOT NULL PRIMARY KEY,
phone_number TEXT NOT NULL,
code TEXT NOT NULL,
current_check_count INTEGER NOT NULL,
max_check_count INTEGER NOT NULL,
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
CONSTRAINT codewallet__core_phonelinkingtoken__uniq__phone_number UNIQUE (phone_number)
);
CREATE TABLE codewallet__core_phonesetting(
id SERIAL NOT NULL PRIMARY KEY,
phone_number TEXT NOT NULL,
owner_account TEXT NOT NULL,
is_unlinked BOOL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
last_updated_at TIMESTAMP WITH TIME ZONE NOT NULL,
CONSTRAINT codewallet__core_phonesetting__uniq__owner_account__and__phone_number UNIQUE (owner_account, phone_number)
);
CREATE TABLE codewallet__core_phoneevent(
id SERIAL NOT NULL PRIMARY KEY,
event_type INTEGER NOT NULL,
verification_id TEXT NOT NULL,
phone_number TEXT NOT NULL,
phone_type INTEGER NULL,
mobile_country_code INTEGER NULL,
mobile_network_code INTEGER NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL
);
`
// Used for testing ONLY, the table and migrations are external to this repository
tableDestroy = `
DROP TABLE codewallet__core_phoneverification;
DROP TABLE codewallet__core_phonelinkingtoken;
DROP TABLE codewallet__core_phonesetting;
DROP TABLE codewallet__core_phoneevent;
`
)
var (
testStore phone.Store
teardown func()
)
func TestMain(m *testing.M) {
log := logrus.StandardLogger()
testPool, err := dockertest.NewPool("")
if err != nil {
log.WithError(err).Error("Error creating docker pool")
os.Exit(1)
}
var cleanUpFunc func()
db, cleanUpFunc, err := postgrestest.StartPostgresDB(testPool)
if err != nil {
log.WithError(err).Error("Error starting postgres image")
os.Exit(1)
}
defer db.Close()
if err := createTestTables(db); err != nil {
logrus.StandardLogger().WithError(err).Error("Error creating test tables")
cleanUpFunc()
os.Exit(1)
}
testStore = New(db)
teardown = func() {
if pc := recover(); pc != nil {
cleanUpFunc()
panic(pc)
}
if err := resetTestTables(db); err != nil {
logrus.StandardLogger().WithError(err).Error("Error resetting test tables")
cleanUpFunc()
os.Exit(1)
}
}
code := m.Run()
cleanUpFunc()
os.Exit(code)
}
func TestPhonePostgresStore(t *testing.T) {
tests.RunTests(t, testStore, teardown)
}
func createTestTables(db *sql.DB) error {
_, err := db.Exec(tableCreate)
if err != nil {
logrus.StandardLogger().WithError(err).Error("could not create test tables")
return err
}
return nil
}
func resetTestTables(db *sql.DB) error {
_, err := db.Exec(tableDestroy)
if err != nil {
logrus.StandardLogger().WithError(err).Error("could not drop test tables")
return err
}
return createTestTables(db)
}