(t *testing.T)
| 755 | } |
| 756 | |
| 757 | func 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") |
nothing calls this directly
no test coverage detected