User-function tests, run as user "alice":
(t *testing.T, ctx context.Context, db *db.Database)
| 290 | |
| 291 | // User-function tests, run as user "alice": |
| 292 | func testUserFunctionsAsUser(t *testing.T, ctx context.Context, db *db.Database) { |
| 293 | testUserFunctionsCommon(t, ctx, db) |
| 294 | |
| 295 | // Checking `context.user.name`: |
| 296 | result, err := db.CallUserFunction(ctx, "user_only", nil, true) |
| 297 | assert.NoError(t, err) |
| 298 | assert.EqualValues(t, "alice", result) |
| 299 | |
| 300 | // Checking `context.admin.func` |
| 301 | _, err = db.CallUserFunction(ctx, "sudo_call_forbidden", nil, true) |
| 302 | assert.NoError(t, err) |
| 303 | |
| 304 | // No such function: |
| 305 | _, err = db.CallUserFunction(ctx, "xxxx", nil, true) |
| 306 | assertHTTPError(t, err, 403) // not 404 as for an admin |
| 307 | |
| 308 | _, err = db.CallUserFunction(ctx, "great_and_terrible", nil, true) |
| 309 | assertHTTPError(t, err, 403) |
| 310 | |
| 311 | _, err = db.CallUserFunction(ctx, "call_forbidden", nil, true) |
| 312 | assertHTTPError(t, err, 403) |
| 313 | assert.ErrorContains(t, err, "great_and_terrible") // failed fn name should appear in error |
| 314 | |
| 315 | _, err = db.CallUserFunction(ctx, "admin_only", nil, true) |
| 316 | assertHTTPError(t, err, 403) |
| 317 | |
| 318 | _, err = db.CallUserFunction(ctx, "require_admin", nil, true) |
| 319 | assertHTTPError(t, err, 403) |
| 320 | |
| 321 | _, err = db.CallUserFunction(ctx, "pevensies_only", nil, true) |
| 322 | assertHTTPError(t, err, 403) |
| 323 | |
| 324 | _, err = db.CallUserFunction(ctx, "narnia_only", nil, true) |
| 325 | assertHTTPError(t, err, 403) |
| 326 | |
| 327 | _, err = db.CallUserFunction(ctx, "villain_only", nil, true) |
| 328 | assertHTTPError(t, err, 403) |
| 329 | } |
| 330 | |
| 331 | // Test CRUD operations |
| 332 | func TestUserFunctionsCRUD(t *testing.T) { |
no test coverage detected