-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathstore_test.go
136 lines (107 loc) · 3.16 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
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/twitter"
"github.com/code-payments/code-server/pkg/code/data/twitter/tests"
postgrestest "github.com/code-payments/code-server/pkg/database/postgres/test"
_ "github.com/jackc/pgx/v4/stdlib"
)
var (
testStore twitter.Store
teardown func()
)
const (
// Used for testing ONLY, the table and migrations are external to this repository
tableCreate = `
CREATE TABLE codewallet__core_twitteruser (
id SERIAL NOT NULL PRIMARY KEY,
username TEXT NOT NULL,
name TEXT NOT NULL,
profile_pic_url TEXT NOT NULL,
verified_type INTEGER NOT NULL,
follower_count INTEGER NOT NULL,
tip_address TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
last_updated_at TIMESTAMP WITH TIME ZONE NOT NULL,
CONSTRAINT codewallet__core_twitteruser__uniq__username UNIQUE (username),
CONSTRAINT codewallet__core_twitteruser__uniq__tip_address UNIQUE (tip_address)
);
CREATE TABLE codewallet__core_processedtweets (
id SERIAL NOT NULL PRIMARY KEY,
tweet_id TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
CONSTRAINT codewallet__core_processedtweets__uniq__tweet_id UNIQUE (tweet_id)
);
CREATE TABLE codewallet__core_usedtwitternonces (
id SERIAL NOT NULL PRIMARY KEY,
nonce UUID NOT NULL,
tweet_id TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
CONSTRAINT codewallet__core_usedtwitternonces__uniq__tweet_id UNIQUE (nonce)
);
`
// Used for testing ONLY, the table and migrations are external to this repository
tableDestroy = `
DROP TABLE codewallet__core_twitteruser;
DROP TABLE codewallet__core_processedtweets;
DROP TABLE codewallet__core_usedtwitternonces;
`
)
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 TestTwitterPostgresStore(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)
}