(t *testing.T, ctx context.Context, db *db.Database)
| 118 | } |
| 119 | |
| 120 | func testUserQueriesCommon(t *testing.T, ctx context.Context, db *db.Database) { |
| 121 | // dynamic channel list |
| 122 | fn, err := db.GetUserFunction(ctx, "airports_in_city", map[string]any{"city": "London"}, false) |
| 123 | assert.NoError(t, err) |
| 124 | iter, err := fn.Iterate() |
| 125 | assert.NoError(t, err) |
| 126 | assertQueryResults(t, `[{"city":"London"}]`, iter) |
| 127 | |
| 128 | fn, err = db.GetUserFunction(ctx, "square", map[string]any{"numero": 16}, false) |
| 129 | assert.NoError(t, err) |
| 130 | iter, err = fn.Iterate() |
| 131 | assert.NoError(t, err) |
| 132 | assertQueryResults(t, `[{"square":256}]`, iter) |
| 133 | |
| 134 | fn, err = db.GetUserFunction(ctx, "inject", map[string]any{"foo": "1337 as pwned"}, false) |
| 135 | assert.NoError(t, err) |
| 136 | iter, err = fn.Iterate() |
| 137 | assert.NoError(t, err) |
| 138 | assertQueryResults(t, `[{"foo":"1337 as pwned"}]`, iter) |
| 139 | |
| 140 | // ERRORS: |
| 141 | |
| 142 | // Missing a parameter: |
| 143 | _, err = callUserQuery(ctx, db, "square", nil) |
| 144 | assertHTTPError(t, err, 400) |
| 145 | assert.ErrorContains(t, err, "numero") |
| 146 | assert.ErrorContains(t, err, "square") |
| 147 | |
| 148 | // Extra parameter: |
| 149 | _, err = callUserQuery(ctx, db, "square", map[string]any{"numero": 42, "number": 0}) |
| 150 | assertHTTPError(t, err, 400) |
| 151 | assert.ErrorContains(t, err, "number") |
| 152 | assert.ErrorContains(t, err, "square") |
| 153 | |
| 154 | // Function definition has a syntax error: |
| 155 | _, err = callUserQuery(ctx, db, "syntax_error", nil) |
| 156 | assertHTTPError(t, err, 500) |
| 157 | assert.ErrorContains(t, err, "syntax_error") |
| 158 | } |
| 159 | |
| 160 | func testUserQueriesAsAdmin(t *testing.T, ctx context.Context, db *db.Database) { |
| 161 | testUserQueriesCommon(t, ctx, db) |
no test coverage detected