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

Function TestUserFunctionAllow

db/functions/function_test.go:477–572  ·  view source on GitHub ↗

Low-level test of channel-name parameter expansion for user query/function auth

(t *testing.T)

Source from the content-addressed store, hash-verified

475
476// Low-level test of channel-name parameter expansion for user query/function auth
477func TestUserFunctionAllow(t *testing.T) {
478 // base.SetUpTestLogging(t, base.LevelDebug, base.KeyAll)
479 db, ctx := setupTestDBWithFunctions(t, &kUserFunctionConfig)
480 defer db.Close(ctx)
481
482 authenticator := auth.NewAuthenticator(db.MetadataStore, db, db.AuthenticatorOptions(ctx))
483 user, err := authenticator.NewUser("maurice", "pass", base.SetOf("city-Paris"))
484 assert.NoError(t, err)
485
486 params := map[string]any{
487 "CITY": "Paris",
488 "BREAD": "Baguette",
489 "YEAR": 2020,
490 "WINE": map[string]any{"blanc": "Sauterne", "rouge": "Bordeaux"},
491 "WORDS": []string{"ouais", "fromage", "amour", "vachement"},
492 }
493
494 ch, err := expandPattern("someChannel", params, user)
495 assert.NoError(t, err)
496 assert.Equal(t, ch, "someChannel")
497
498 ch, err = expandPattern("sales-${args.CITY}-all", params, user)
499 assert.NoError(t, err)
500 assert.Equal(t, "sales-Paris-all", ch)
501
502 ch, err = expandPattern("sales${args.CITY}All", params, user)
503 assert.NoError(t, err)
504 assert.Equal(t, "salesParisAll", ch)
505
506 ch, err = expandPattern("sales${args.CITY}-${args.BREAD}", params, user)
507 assert.NoError(t, err)
508 assert.Equal(t, "salesParis-Baguette", ch)
509
510 ch, err = expandPattern("sales-upTo-${args.YEAR}", params, user)
511 assert.NoError(t, err)
512 assert.Equal(t, "sales-upTo-2020", ch)
513
514 ch, err = expandPattern("wines-${args.WINE.blanc}", params, user)
515 assert.NoError(t, err)
516 assert.Equal(t, "wines-Sauterne", ch)
517
518 ch, err = expandPattern("${args.WORDS[2]}", params, user)
519 assert.NoError(t, err)
520 assert.Equal(t, "amour", ch)
521
522 ch, err = expandPattern("employee-${context.user.name}", params, user)
523 assert.NoError(t, err)
524 assert.Equal(t, "employee-maurice", ch)
525
526 // Escaped `\$`:
527 ch, err = expandPattern(`expen\$ive`, params, user)
528 assert.NoError(t, err)
529 assert.Equal(t, "expen$ive", ch)
530 ch, err = expandPattern(`\$wow`, params, user)
531 assert.NoError(t, err)
532 assert.Equal(t, "$wow", ch)
533 ch, err = expandPattern(`\${wow}`, params, user)
534 assert.NoError(t, err)

Callers

nothing calls this directly

Calls 8

NewUserMethod · 0.95
NewAuthenticatorFunction · 0.92
SetOfFunction · 0.92
setupTestDBWithFunctionsFunction · 0.85
expandPatternFunction · 0.85
AuthenticatorOptionsMethod · 0.80
CloseMethod · 0.65
EqualMethod · 0.45

Tested by

no test coverage detected