(t *testing.T, ctx context.Context, db *db.Database)
| 187 | } |
| 188 | |
| 189 | func testUserQueriesAsUser(t *testing.T, ctx context.Context, db *db.Database) { |
| 190 | testUserQueriesCommon(t, ctx, db) |
| 191 | |
| 192 | fn, err := db.GetUserFunction(ctx, "user", nil, false) |
| 193 | assert.NoError(t, err) |
| 194 | // (Can't compare the entire result string because the order of items in the "channels" array |
| 195 | // is undefined and can change from one run to another.) |
| 196 | iter, err := fn.Iterate() |
| 197 | assert.NoError(t, err) |
| 198 | resultStr := queryResultString(t, iter) |
| 199 | assert.True(t, strings.HasPrefix(resultStr, `[{"user":{"channels":["`)) |
| 200 | assert.True(t, strings.HasSuffix(resultStr, `"],"email":"","name":"alice","roles":["hero"]}}]`)) |
| 201 | |
| 202 | fn, err = db.GetUserFunction(ctx, "user_parts", nil, false) |
| 203 | assert.NoError(t, err) |
| 204 | iter, err = fn.Iterate() |
| 205 | assert.NoError(t, err) |
| 206 | assertQueryResults(t, `[{"email":"","name":"alice"}]`, iter) |
| 207 | |
| 208 | // ERRORS: |
| 209 | |
| 210 | // Not allowed (admin only): |
| 211 | _, err = callUserQuery(ctx, db, "admin_only", nil) |
| 212 | assertHTTPError(t, err, 403) |
| 213 | |
| 214 | // Not allowed (dynamic channel list): |
| 215 | _, err = callUserQuery(ctx, db, "airports_in_city", map[string]any{"city": "Chicago"}) |
| 216 | assertHTTPError(t, err, 403) |
| 217 | |
| 218 | // No such query: |
| 219 | _, err = callUserQuery(ctx, db, "xxxx", nil) |
| 220 | assertHTTPError(t, err, 403) // not 404 as for an admin |
| 221 | } |
| 222 | |
| 223 | // Unit test to ensure only SELECT queries can run |
| 224 | func TestUserN1QLQueriesInvalid(t *testing.T) { |
no test coverage detected