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

Function TestViewQueryUserAccess

rest/view_api_test.go:147–195  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

145}
146
147func TestViewQueryUserAccess(t *testing.T) {
148 if !base.TestsDisableGSI() {
149 t.Skip("views tests are not applicable under GSI")
150 }
151
152 rt := NewRestTesterDefaultCollection(t, &RestTesterConfig{GuestEnabled: true}) // views only use default collection
153 defer rt.Close()
154
155 ctx := rt.Context()
156 rt.ServerContext().Database(ctx, "db").SetUserViewsEnabled(true)
157 response := rt.SendAdminRequest(http.MethodPut, "/db/_design/foo", `{"views":{"bar": {"map":"function (doc, meta) { if (doc.type != 'type1') { return; } if (doc.state == 'state1' || doc.state == 'state2' || doc.state == 'state3') { emit(doc.state, meta.id); }}"}}}`)
158 RequireStatus(t, response, http.StatusCreated)
159 response = rt.SendRequest(http.MethodPut, "/db/doc1", `{"type":"type1", "state":"state1"}`)
160 RequireStatus(t, response, http.StatusCreated)
161 response = rt.SendRequest(http.MethodPut, "/db/doc2", `{"type":"type1", "state":"state2"}`)
162 RequireStatus(t, response, http.StatusCreated)
163 response = rt.SendRequest(http.MethodPut, "/db/doc3", `{"type":"type2", "state":"state2"}`)
164 RequireStatus(t, response, http.StatusCreated)
165
166 result := rt.WaitForNAdminViewResults(2, "/db/_design/foo/_view/bar?stale=false")
167 require.Len(t, result.Rows, 2)
168 assert.Equal(t, &sgbucket.ViewRow{ID: "doc1", Key: "state1", Value: "doc1"}, result.Rows[0])
169 assert.Equal(t, &sgbucket.ViewRow{ID: "doc2", Key: "state2", Value: "doc2"}, result.Rows[1])
170
171 result = rt.WaitForNAdminViewResults(2, "/db/_design/foo/_view/bar?stale=false")
172
173 require.Len(t, result.Rows, 2)
174 assert.Equal(t, &sgbucket.ViewRow{ID: "doc1", Key: "state1", Value: "doc1"}, result.Rows[0])
175 assert.Equal(t, &sgbucket.ViewRow{ID: "doc2", Key: "state2", Value: "doc2"}, result.Rows[1])
176
177 // Create a user:
178 a := rt.ServerContext().Database(ctx, "db").Authenticator(ctx)
179 password := "123456"
180 testUser, _ := a.NewUser("testUser", password, channels.BaseSetOf(t, "*"))
181 assert.NoError(t, a.Save(testUser))
182
183 result = rt.WaitForNUserViewResults(2, "/db/_design/foo/_view/bar?stale=false", testUser, password)
184
185 require.Len(t, result.Rows, 2)
186 assert.Equal(t, &sgbucket.ViewRow{ID: "doc1", Key: "state1", Value: "doc1"}, result.Rows[0])
187 assert.Equal(t, &sgbucket.ViewRow{ID: "doc2", Key: "state2", Value: "doc2"}, result.Rows[1])
188
189 // Disable user view access, retry
190 rt.ServerContext().Database(ctx, "db").SetUserViewsEnabled(false)
191 request := Request(http.MethodGet, "/db/_design/foo/_view/bar?stale=false", "")
192 request.SetBasicAuth(testUser.Name(), password)
193 userResponse := rt.Send(request)
194 RequireStatus(t, userResponse, http.StatusForbidden)
195}
196
197func TestViewQueryMultipleViewsInterfaceValues(t *testing.T) {
198 // TODO: Waiting for a fix for couchbaselabs/Walrus #13

Callers

nothing calls this directly

Calls 15

TestsDisableGSIFunction · 0.92
BaseSetOfFunction · 0.92
RequireStatusFunction · 0.85
RequestFunction · 0.85
SetUserViewsEnabledMethod · 0.80
ServerContextMethod · 0.80
SendAdminRequestMethod · 0.80
SendRequestMethod · 0.80
NewUserMethod · 0.80
SaveMethod · 0.80

Tested by

no test coverage detected