MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / testUserQueriesAsUser

Function testUserQueriesAsUser

db/functions/n1ql_function_test.go:189–221  ·  view source on GitHub ↗
(t *testing.T, ctx context.Context, db *db.Database)

Source from the content-addressed store, hash-verified

187}
188
189func testUserQueriesAsUser(t *testing.T, ctx context.Context, db *db.Database) {
190 testUserQueriesCommon(t, ctx, db)
191
192 fn, err := db.GetUserFunction(ctx, "user", nil, false)
193 assert.NoError(t, err)
194 // (Can't compare the entire result string because the order of items in the "channels" array
195 // is undefined and can change from one run to another.)
196 iter, err := fn.Iterate()
197 assert.NoError(t, err)
198 resultStr := queryResultString(t, iter)
199 assert.True(t, strings.HasPrefix(resultStr, `[{"user":{"channels":["`))
200 assert.True(t, strings.HasSuffix(resultStr, `"],"email":"","name":"alice","roles":["hero"]}}]`))
201
202 fn, err = db.GetUserFunction(ctx, "user_parts", nil, false)
203 assert.NoError(t, err)
204 iter, err = fn.Iterate()
205 assert.NoError(t, err)
206 assertQueryResults(t, `[{"email":"","name":"alice"}]`, iter)
207
208 // ERRORS:
209
210 // Not allowed (admin only):
211 _, err = callUserQuery(ctx, db, "admin_only", nil)
212 assertHTTPError(t, err, 403)
213
214 // Not allowed (dynamic channel list):
215 _, err = callUserQuery(ctx, db, "airports_in_city", map[string]any{"city": "Chicago"})
216 assertHTTPError(t, err, 403)
217
218 // No such query:
219 _, err = callUserQuery(ctx, db, "xxxx", nil)
220 assertHTTPError(t, err, 403) // not 404 as for an admin
221}
222
223// Unit test to ensure only SELECT queries can run
224func TestUserN1QLQueriesInvalid(t *testing.T) {

Callers 1

TestUserN1QLQueriesFunction · 0.70

Calls 7

queryResultStringFunction · 0.85
assertQueryResultsFunction · 0.85
callUserQueryFunction · 0.85
GetUserFunctionMethod · 0.80
testUserQueriesCommonFunction · 0.70
assertHTTPErrorFunction · 0.70
IterateMethod · 0.65

Tested by

no test coverage detected