(t *testing.T)
| 145 | } |
| 146 | |
| 147 | func 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 | |
| 197 | func TestViewQueryMultipleViewsInterfaceValues(t *testing.T) { |
| 198 | // TODO: Waiting for a fix for couchbaselabs/Walrus #13 |
nothing calls this directly
no test coverage detected