-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplugin_test.go
More file actions
91 lines (74 loc) · 2.01 KB
/
plugin_test.go
File metadata and controls
91 lines (74 loc) · 2.01 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
package gormshadow_test
import (
"testing"
sqlmock "github.com/DATA-DOG/go-sqlmock"
gormshadow "github.com/EelisK/gorm-shadow"
"github.com/stretchr/testify/suite"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
type mockRow struct {
ID int `gorm:"primaryKey"`
Value string `gorm:"column:value"`
}
func (m mockRow) ShadowTable() string {
return "shadow_table"
}
type shadowSuite struct {
suite.Suite
db *gorm.DB
mock sqlmock.Sqlmock
}
func TestShadowSuite(t *testing.T) {
suite.Run(t, new(shadowSuite))
}
func (s *shadowSuite) SetupSuite() {
db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherRegexp))
s.NoError(err)
s.mock = mock
s.db, err = gorm.Open(postgres.New(postgres.Config{
Conn: db,
}), &gorm.Config{})
s.NoError(err)
}
func (s *shadowSuite) TearDownSuite() {
rawDB, err := s.db.DB()
s.NoError(err)
s.mock.ExpectClose()
s.NoError(rawDB.Close())
}
func (s *shadowSuite) TestInitialize() {
plugin := &gormshadow.Plugin{}
err := plugin.Initialize(s.db)
s.NoError(err)
}
func (s *shadowSuite) TestCreateShadow() {
plugin := &gormshadow.Plugin{}
err := plugin.Initialize(s.db)
s.NoError(err)
addRow := sqlmock.NewRows([]string{"id"}).AddRow("1")
s.mock.ExpectBegin()
s.mock.ExpectQuery("INSERT INTO \"mock_rows\" (.+) VALUES (.+)").WillReturnRows(addRow)
s.mock.ExpectExec("INSERT INTO \"shadow_table\" (.+) VALUES (.+)").
WithArgs(sqlmock.AnyArg(), sqlmock.AnyArg()).
WillReturnResult(sqlmock.NewResult(1, 1))
s.mock.ExpectCommit()
entry := mockRow{Value: "test"}
err = s.db.Create(&entry).Error
s.NoError(err)
}
func (s *shadowSuite) TestCreateWithoutShadowing() {
type normalRow struct {
ID int `gorm:"primaryKey"`
}
plugin := &gormshadow.Plugin{}
err := plugin.Initialize(s.db)
s.NoError(err)
addRow := sqlmock.NewRows([]string{"id"}).AddRow("1")
s.mock.ExpectBegin()
s.mock.ExpectQuery("INSERT INTO \"normal_rows\" (.+) VALUES (.+)").WillReturnRows(addRow)
s.mock.ExpectCommit()
entry := normalRow{}
err = s.db.Create(&entry).Error
s.NoError(err)
}