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

Function TestUserFunctionsCRUD

db/functions/function_test.go:332–417  ·  view source on GitHub ↗

Test CRUD operations

(t *testing.T)

Source from the content-addressed store, hash-verified

330
331// Test CRUD operations
332func TestUserFunctionsCRUD(t *testing.T) {
333 // base.SetUpTestLogging(t, base.LevelDebug, base.KeyAll)
334 dbCtx, ctx := setupTestDBWithFunctions(t, &kUserFunctionConfig)
335 defer dbCtx.Close(ctx)
336
337 ctx = db.GetSingleDatabaseCollection(t, dbCtx.DatabaseContext).AddCollectionContext(ctx)
338 body := map[string]any{"key": "value"}
339
340 // Create a doc with random ID:
341 result, err := dbCtx.CallUserFunction(ctx, "putDoc", map[string]any{"docID": nil, "doc": body}, true)
342 assert.NoError(t, err)
343 assert.IsType(t, "", result)
344 _, err = dbCtx.CallUserFunction(ctx, "getDoc", map[string]any{"docID": result}, true)
345 assert.NoError(t, err)
346
347 docID := "foo"
348
349 // Missing document:
350 result, err = dbCtx.CallUserFunction(ctx, "getDoc", map[string]any{"docID": docID}, true)
351 assert.NoError(t, err)
352 assert.EqualValues(t, nil, result)
353
354 docParams := map[string]any{
355 "docID": docID,
356 "doc": body,
357 }
358
359 // Illegal mutation (passing mutationAllowed = false):
360 _, err = dbCtx.CallUserFunction(ctx, "putDoc", docParams, false)
361 assertHTTPError(t, err, 403)
362
363 // Successful save (as admin):
364 result, err = dbCtx.CallUserFunction(ctx, "putDoc", docParams, true)
365 assert.NoError(t, err)
366 assert.EqualValues(t, docID, result) // save() returns docID
367
368 // Existing document:
369 result, err = dbCtx.CallUserFunction(ctx, "getDoc", map[string]any{"docID": docID}, true)
370 assert.NoError(t, err)
371 revID, ok := result.(map[string]any)["_rev"].(string)
372 assert.True(t, ok)
373 assert.NotEmpty(t, revID)
374 assert.True(t, strings.HasPrefix(revID, "1-"))
375 body["_id"] = docID
376 body["_rev"] = revID
377 assert.EqualValues(t, body, result)
378
379 // Update document with revID:
380 body["key2"] = 2
381 _, err = dbCtx.CallUserFunction(ctx, "putDoc", docParams, true)
382 assert.NoError(t, err)
383
384 // Save fails with conflict:
385 body["key3"] = 3
386 body["_rev"] = "9-9999"
387 result, err = dbCtx.CallUserFunction(ctx, "putDoc", docParams, true)
388 assert.NoError(t, err)
389 assert.Nil(t, result)

Callers

nothing calls this directly

Calls 7

setupTestDBWithFunctionsFunction · 0.85
AddCollectionContextMethod · 0.80
CallUserFunctionMethod · 0.80
assertHTTPErrorFunction · 0.70
CloseMethod · 0.65
EqualMethod · 0.45

Tested by

no test coverage detected