/
update_option.go
57 lines (50 loc) · 1.25 KB
/
update_option.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
package dbkit
import (
"testing"
sq "github.com/Masterminds/squirrel"
"github.com/stretchr/testify/require"
)
type (
// UpdateOption to compile update query
UpdateOption interface {
CompileUpdate(sq.UpdateBuilder) (sq.UpdateBuilder, error)
}
// UpdateTestCase to test the update
UpdateTestCase struct {
TestName string
UpdateOption
Builder sq.UpdateBuilder
ExpectedErr string
Expected string
ExpectedArgs []interface{}
}
// CompileUpdateFn function
CompileUpdateFn func(sq.UpdateBuilder) (sq.UpdateBuilder, error)
updateOptionImpl struct {
fn CompileUpdateFn
}
)
// NewUpdateOption return new instance of UpdateOption
func NewUpdateOption(fn CompileUpdateFn) UpdateOption {
return &updateOptionImpl{fn: fn}
}
func (u *updateOptionImpl) CompileUpdate(b sq.UpdateBuilder) (sq.UpdateBuilder, error) {
return u.fn(b)
}
//
// UpdateTestCase
//
// Execute test
func (tt *UpdateTestCase) Execute(t *testing.T) {
t.Run(tt.TestName, func(t *testing.T) {
builder, err := tt.CompileUpdate(tt.Builder)
if tt.ExpectedErr != "" {
require.EqualError(t, err, tt.ExpectedErr)
return
}
require.NoError(t, err)
query, args, _ := builder.ToSql()
require.Equal(t, tt.Expected, query)
require.Equal(t, tt.ExpectedArgs, args)
})
}