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

Function TestChannelAccessChanges

rest/access_test.go:757–919  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

755}
756
757func TestChannelAccessChanges(t *testing.T) {
758 base.TestRequiresDCPResync(t)
759 base.SetUpTestLogging(t, base.LevelDebug, base.KeyCache, base.KeyChanges, base.KeyCRUD)
760 rtConfig := RestTesterConfig{SyncFn: `function(doc) {access(doc.owner, doc._id);channel(doc.channel)}`, PersistentConfig: true}
761 rt := NewRestTester(t, &rtConfig)
762 defer rt.Close()
763 RequireStatus(t, rt.CreateDatabase("db", rt.NewDbConfig()), http.StatusCreated)
764 dataStore := rt.GetSingleDataStore()
765 c := dataStore.CollectionName()
766 s := dataStore.ScopeName()
767
768 ctx := rt.Context()
769 a := rt.ServerContext().Database(ctx, "db").Authenticator(ctx)
770 guest, err := a.GetUser("")
771 assert.NoError(t, err)
772 guest.SetDisabled(false)
773 err = a.Save(guest)
774 assert.NoError(t, err)
775
776 // Create users:
777 alice, err := a.NewUser("alice", "letmein", channels.BaseSetOf(t, "zero"))
778 require.NoError(t, err)
779 assert.NoError(t, a.Save(alice))
780 zegpold, err := a.NewUser("zegpold", "letmein", channels.BaseSetOf(t, "zero"))
781 require.NoError(t, err)
782 assert.NoError(t, a.Save(zegpold))
783
784 // Create some docs that give users access:
785 response := rt.SendRequest(http.MethodPut, "/{{.keyspace}}/alpha", `{"owner":"alice"}`)
786 RequireStatus(t, response, 201)
787 var body db.Body
788 assert.NoError(t, base.JSONUnmarshal(response.Body.Bytes(), &body))
789 assert.Equal(t, true, body["ok"])
790 alphaRevID := body["rev"].(string)
791
792 RequireStatus(t, rt.SendRequest("PUT", "/{{.keyspace}}/beta", `{"owner":"boadecia"}`), 201)
793 RequireStatus(t, rt.SendRequest("PUT", "/{{.keyspace}}/delta", `{"owner":"alice"}`), 201)
794 RequireStatus(t, rt.SendRequest("PUT", "/{{.keyspace}}/gamma", `{"owner":"zegpold"}`), 201)
795
796 RequireStatus(t, rt.SendRequest("PUT", "/{{.keyspace}}/a1", `{"channel":"alpha"}`), 201)
797 RequireStatus(t, rt.SendRequest("PUT", "/{{.keyspace}}/b1", `{"channel":"beta"}`), 201)
798 RequireStatus(t, rt.SendRequest("PUT", "/{{.keyspace}}/d1", `{"channel":"delta"}`), 201)
799 RequireStatus(t, rt.SendRequest("PUT", "/{{.keyspace}}/g1", `{"channel":"gamma"}`), 201)
800
801 rt.WaitForDoc("g1")
802
803 changes := rt.GetChanges("/{{.keyspace}}/_changes", "zegpold")
804 require.Len(t, changes.Results, 1)
805 since := changes.Results[0].Seq
806 assert.Equal(t, "g1", changes.Results[0].ID)
807
808 // Look up sequences for created docs
809 deltaGrantDocSeq, err := rt.SequenceForDoc("delta")
810 assert.NoError(t, err, "Error retrieving document sequence")
811 gammaGrantDocSeq, err := rt.SequenceForDoc("gamma")
812 assert.NoError(t, err, "Error retrieving document sequence")
813
814 alphaDocSeq, err := rt.SequenceForDoc("a1")

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
CreateDatabaseMethod · 0.95
NewDbConfigMethod · 0.95
GetSingleDataStoreMethod · 0.95
ContextMethod · 0.95
ServerContextMethod · 0.95
SendRequestMethod · 0.95
WaitForDocMethod · 0.95
GetChangesMethod · 0.95
SequenceForDocMethod · 0.95
SendAdminRequestMethod · 0.95
RunResyncMethod · 0.95

Tested by

no test coverage detected