generated from sv-tools/go-repo-template
-
Notifications
You must be signed in to change notification settings - Fork 4
/
collections_test.go
112 lines (86 loc) · 2.81 KB
/
collections_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
package simple_test
import (
"context"
"fmt"
"math/rand"
"os"
"testing"
"time"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"go.mongodb.org/mongo-driver/mongo/options"
"go.uber.org/mock/gomock"
"github.com/sv-tools/mongoifc"
"github.com/sv-tools/mongoifc/examples/simple"
gomockMocks "github.com/sv-tools/mongoifc/mocks/gomock"
mockeryMocks "github.com/sv-tools/mongoifc/mocks/mockery"
)
func TestCollectionsWorkflow(t *testing.T) {
t.Parallel()
ctx := context.Background()
t.Run("mockery", func(t *testing.T) {
t.Parallel()
col := &mockeryMocks.Collection{}
defer col.AssertExpectations(t)
col.On("Drop", ctx).Return(nil)
db := &mockeryMocks.Database{}
defer db.AssertExpectations(t)
db.On("Collection", mock.Anything).Return(col)
db.On("CreateCollection", ctx, mock.Anything).Return(nil)
db.On("ListCollectionNames", ctx, mock.AnythingOfType("primitive.M")).Return([]string{"fake"}, nil).Once()
db.On("ListCollectionNames", ctx, mock.AnythingOfType("primitive.M")).Return([]string{}, nil).Twice()
collectionsWorkflow(t, db)
})
t.Run("gomock", func(t *testing.T) {
t.Parallel()
ctrl := gomock.NewController(t)
defer ctrl.Finish()
col := gomockMocks.NewMockCollection(ctrl)
col.EXPECT().Drop(ctx).Return(nil)
db := gomockMocks.NewMockDatabase(ctrl)
db.EXPECT().Collection(gomock.Any()).Return(col)
db.EXPECT().CreateCollection(ctx, gomock.Any()).Return(nil)
db.EXPECT().ListCollectionNames(ctx, gomock.Any()).Return([]string{"fake"}, nil)
db.EXPECT().ListCollectionNames(ctx, gomock.Any()).Return([]string{}, nil).Times(2)
collectionsWorkflow(t, db)
})
t.Run("docker", func(t *testing.T) {
t.Parallel()
uri := os.Getenv("MONGO_URI")
require.NotEmpty(t, uri)
opt := options.Client().ApplyURI(uri)
cl, err := mongoifc.NewClient(opt)
require.NoError(t, err)
require.NotNil(t, cl)
err = cl.Connect(ctx)
require.NoError(t, err)
t.Cleanup(func() {
require.NoError(t, cl.Disconnect(ctx))
})
db := cl.Database(fmt.Sprintf("simple_%d", time.Now().Unix()))
collectionsWorkflow(t, db)
})
}
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
func randSeq(n int) string {
b := make([]rune, n)
for i := range b {
b[i] = letters[rand.Intn(len(letters))]
}
return string(b)
}
func collectionsWorkflow(t testing.TB, db mongoifc.Database) {
ctx := context.Background()
name := randSeq(42)
require.NoError(t, simple.CreateCollection(ctx, db, name))
res, err := simple.CollectionExists(ctx, db, name)
require.NoError(t, err)
require.True(t, res)
res, err = simple.CollectionExists(ctx, db, name+"42")
require.NoError(t, err)
require.False(t, res)
require.NoError(t, simple.DropCollection(ctx, db, name))
res, err = simple.CollectionExists(ctx, db, name)
require.NoError(t, err)
require.False(t, res)
}