Test CRUD operations
(t *testing.T)
| 330 | |
| 331 | // Test CRUD operations |
| 332 | func 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) |
nothing calls this directly
no test coverage detected