@@ -2,14 +2,18 @@ package resolvers
2
2
3
3
import (
4
4
"context"
5
+ "strings"
5
6
"testing"
6
7
8
+ "github.com/sourcegraph/log/logtest"
9
+ "github.com/stretchr/testify/require"
10
+
7
11
"github.com/sourcegraph/sourcegraph/cmd/frontend/graphqlbackend"
8
12
"github.com/sourcegraph/sourcegraph/cmd/frontend/graphqlbackend/graphqlutil"
9
13
"github.com/sourcegraph/sourcegraph/internal/database"
10
14
"github.com/sourcegraph/sourcegraph/internal/database/dbmocks"
11
15
"github.com/sourcegraph/sourcegraph/internal/types"
12
- "github.com/stretchr/testify/require "
16
+ "github.com/sourcegraph/sourcegraph/lib/errors "
13
17
)
14
18
15
19
func TestPermissionSyncJobsResolver (t * testing.T ) {
@@ -24,8 +28,9 @@ func TestPermissionSyncJobsResolver(t *testing.T) {
24
28
jobsStore .ListFunc .SetDefaultReturn ([]* database.PermissionSyncJob {}, nil )
25
29
26
30
db .PermissionSyncJobsFunc .SetDefaultReturn (jobsStore )
31
+ logger := logtest .NoOp (t )
27
32
28
- resolver , err := NewPermissionsSyncJobsResolver (db , graphqlbackend.ListPermissionsSyncJobsArgs {ConnectionResolverArgs : args })
33
+ resolver , err := NewPermissionsSyncJobsResolver (logger , db , graphqlbackend.ListPermissionsSyncJobsArgs {ConnectionResolverArgs : args })
29
34
require .NoError (t , err )
30
35
jobs , err := resolver .Nodes (ctx )
31
36
require .NoError (t , err )
@@ -42,12 +47,207 @@ func TestPermissionSyncJobsResolver(t *testing.T) {
42
47
43
48
db .PermissionSyncJobsFunc .SetDefaultReturn (jobsStore )
44
49
db .ReposFunc .SetDefaultReturn (repoStore )
50
+ logger := logtest .NoOp (t )
45
51
46
- resolver , err := NewPermissionsSyncJobsResolver (db , graphqlbackend.ListPermissionsSyncJobsArgs {ConnectionResolverArgs : args })
52
+ resolver , err := NewPermissionsSyncJobsResolver (logger , db , graphqlbackend.ListPermissionsSyncJobsArgs {ConnectionResolverArgs : args })
47
53
require .NoError (t , err )
48
54
jobs , err := resolver .Nodes (ctx )
49
55
require .NoError (t , err )
50
56
require .Len (t , jobs , 1 )
51
57
require .Equal (t , marshalPermissionsSyncJobID (1 ), jobs [0 ].ID ())
52
58
})
59
+
60
+ t .Run ("logs non-not-found errors" , func (t * testing.T ) {
61
+ t .Run ("repository error" , func (t * testing.T ) {
62
+ // Create a mock database
63
+ db := dbmocks .NewMockDB ()
64
+
65
+ // Create a mock permissions sync job store
66
+ jobStore := dbmocks .NewMockPermissionSyncJobStore ()
67
+
68
+ // Set up the expectations for the job store
69
+ job := & database.PermissionSyncJob {ID : 1 , RepositoryID : 1 }
70
+ jobStore .ListFunc .SetDefaultReturn ([]* database.PermissionSyncJob {job }, nil )
71
+
72
+ db .PermissionSyncJobsFunc .SetDefaultReturn (jobStore )
73
+
74
+ unexpectedError := errors .New ("this is a test error" )
75
+
76
+ reposStore := dbmocks .NewMockRepoStore ()
77
+ reposStore .GetFunc .SetDefaultReturn (nil , unexpectedError )
78
+ db .ReposFunc .SetDefaultReturn (reposStore )
79
+
80
+ logger , dumpLogs := logtest .Captured (t )
81
+ // Create a permissions sync job connection store
82
+ resolver , err := NewPermissionsSyncJobsResolver (logger , db , graphqlbackend.ListPermissionsSyncJobsArgs {ConnectionResolverArgs : args })
83
+ require .NoError (t , err )
84
+
85
+ nodes , err := resolver .Nodes (ctx )
86
+ require .NoError (t , err ) // Assert that no error is returned
87
+ require .Equal (t , 0 , len (nodes ))
88
+
89
+ // Assert that the error is logged
90
+ logEntries := dumpLogs ()
91
+ var foundLogEntry bool
92
+ for _ , entry := range logEntries {
93
+ errText , ok := entry .Fields ["error" ].(string )
94
+
95
+ if ok && strings .Contains (errText , unexpectedError .Error ()) {
96
+ foundLogEntry = true
97
+ break
98
+ }
99
+ }
100
+
101
+ require .True (t , foundLogEntry , "Expected log entry not found" )
102
+ })
103
+
104
+ t .Run ("user error" , func (t * testing.T ) {
105
+ // Create a mock database
106
+ db := dbmocks .NewMockDB ()
107
+
108
+ // Create a mock permissions sync job store
109
+ jobStore := dbmocks .NewMockPermissionSyncJobStore ()
110
+
111
+ // Set up the expectations for the job store
112
+ job := & database.PermissionSyncJob {ID : 1 , UserID : 1 }
113
+ jobStore .ListFunc .SetDefaultReturn ([]* database.PermissionSyncJob {job }, nil )
114
+
115
+ db .PermissionSyncJobsFunc .SetDefaultReturn (jobStore )
116
+
117
+ unexpectedError := errors .New ("this is a test error" )
118
+
119
+ userStore := dbmocks .NewMockUserStore ()
120
+ userStore .GetByIDFunc .SetDefaultReturn (nil , unexpectedError )
121
+ db .UsersFunc .SetDefaultReturn (userStore )
122
+
123
+ logger , dumpLogs := logtest .Captured (t )
124
+ // Create a permissions sync job connection store
125
+ resolver , err := NewPermissionsSyncJobsResolver (logger , db , graphqlbackend.ListPermissionsSyncJobsArgs {ConnectionResolverArgs : args })
126
+ require .NoError (t , err )
127
+
128
+ nodes , err := resolver .Nodes (ctx )
129
+ require .NoError (t , err )
130
+ require .Equal (t , 0 , len (nodes ))
131
+
132
+ // Assert that the error is logged
133
+ logEntries := dumpLogs ()
134
+ var foundLogEntry bool
135
+ for _ , entry := range logEntries {
136
+ errText , ok := entry .Fields ["error" ].(string )
137
+
138
+ if ok && strings .Contains (errText , unexpectedError .Error ()) {
139
+ foundLogEntry = true
140
+ break
141
+ }
142
+ }
143
+
144
+ require .True (t , foundLogEntry , "Expected log entry not found" )
145
+ })
146
+ })
147
+
148
+ t .Run ("skips over not found errors" , func (t * testing.T ) {
149
+ t .Run ("repository error" , func (t * testing.T ) {
150
+
151
+ // Create a mock
152
+ db := dbmocks .NewMockDB ()
153
+
154
+ // Create a mock permissions sync job store
155
+ jobStore := dbmocks .NewMockPermissionSyncJobStore ()
156
+
157
+ // Set up the expectations for the job store
158
+ job := & database.PermissionSyncJob {ID : 1 , RepositoryID : 1 }
159
+ jobStore .ListFunc .SetDefaultReturn ([]* database.PermissionSyncJob {job }, nil )
160
+
161
+ db .PermissionSyncJobsFunc .SetDefaultReturn (jobStore )
162
+
163
+ notFoundError := testNotFoundError {}
164
+
165
+ repoStore := dbmocks .NewMockRepoStore ()
166
+ repoStore .GetFunc .SetDefaultReturn (nil , notFoundError )
167
+ db .ReposFunc .SetDefaultReturn (repoStore )
168
+
169
+ logger , dumpLogs := logtest .Captured (t )
170
+ // Create a permissions sync job connection store
171
+ resolver , err := NewPermissionsSyncJobsResolver (logger , db , graphqlbackend.ListPermissionsSyncJobsArgs {ConnectionResolverArgs : args })
172
+ require .NoError (t , err )
173
+
174
+ nodes , err := resolver .Nodes (ctx )
175
+ require .NoError (t , err ) // Assert that no error is returned
176
+ require .Equal (t , 0 , len (nodes ))
177
+
178
+ foundError := false
179
+ for _ , entry := range dumpLogs () {
180
+ if strings .Contains (entry .Message , notFoundError .Error ()) {
181
+ foundError = true
182
+ break
183
+ }
184
+
185
+ errText , ok := entry .Fields ["error" ].(string )
186
+ if ok && strings .Contains (errText , notFoundError .Error ()) {
187
+ foundError = true
188
+ break
189
+ }
190
+ }
191
+
192
+ require .False (t , foundError , "Unexpected error found in logs" )
193
+ })
194
+
195
+ t .Run ("user error" , func (t * testing.T ) {
196
+
197
+ // Create a mock
198
+ db := dbmocks .NewMockDB ()
199
+
200
+ // Create a mock permissions sync job store
201
+ jobStore := dbmocks .NewMockPermissionSyncJobStore ()
202
+
203
+ // Set up the expectations for the job store
204
+ job := & database.PermissionSyncJob {ID : 1 , RepositoryID : 1 }
205
+ jobStore .ListFunc .SetDefaultReturn ([]* database.PermissionSyncJob {job }, nil )
206
+
207
+ db .PermissionSyncJobsFunc .SetDefaultReturn (jobStore )
208
+
209
+ notFoundError := testNotFoundError {}
210
+
211
+ userStore := dbmocks .NewMockRepoStore ()
212
+ userStore .GetFunc .SetDefaultReturn (nil , notFoundError )
213
+ db .ReposFunc .SetDefaultReturn (userStore )
214
+
215
+ logger , dumpLogs := logtest .Captured (t )
216
+ // Create a permissions sync job connection store
217
+ resolver , err := NewPermissionsSyncJobsResolver (logger , db , graphqlbackend.ListPermissionsSyncJobsArgs {ConnectionResolverArgs : args })
218
+ require .NoError (t , err )
219
+
220
+ nodes , err := resolver .Nodes (ctx )
221
+ require .NoError (t , err ) // Assert that no error is returned
222
+ require .Equal (t , 0 , len (nodes ))
223
+
224
+ foundError := false
225
+ for _ , entry := range dumpLogs () {
226
+ if strings .Contains (entry .Message , notFoundError .Error ()) {
227
+ foundError = true
228
+ break
229
+ }
230
+
231
+ errText , ok := entry .Fields ["error" ].(string )
232
+ if ok && strings .Contains (errText , notFoundError .Error ()) {
233
+ foundError = true
234
+ break
235
+ }
236
+ }
237
+
238
+ require .False (t , foundError , "Unexpected error found in logs" )
239
+ })
240
+ })
241
+ }
242
+
243
+ type testNotFoundError struct {}
244
+
245
+ func (testNotFoundError ) NotFound () bool {
246
+ return true
53
247
}
248
+
249
+ func (testNotFoundError ) Error () string {
250
+ return "this is a test not found error"
251
+ }
252
+
253
+ var _ error = testNotFoundError {}
0 commit comments