| 296 | } |
| 297 | |
| 298 | func TestSchemeExprValidate(t *testing.T) { |
| 299 | var ( |
| 300 | tokenURL = "http://example.com/token" |
| 301 | authorizationURL = "http://example.com/auth" |
| 302 | refreshURL = "http://example.com/refresh" |
| 303 | invalidURL = "http://%" |
| 304 | escapeError = url.EscapeError("%") |
| 305 | parseError = url.Error{Op: "parse", URL: invalidURL, Err: escapeError} |
| 306 | validFlow = &FlowExpr{ |
| 307 | TokenURL: tokenURL, |
| 308 | AuthorizationURL: authorizationURL, |
| 309 | RefreshURL: refreshURL, |
| 310 | } |
| 311 | invalidTokenURLFlow = &FlowExpr{ |
| 312 | TokenURL: invalidURL, |
| 313 | AuthorizationURL: authorizationURL, |
| 314 | RefreshURL: refreshURL, |
| 315 | } |
| 316 | invalidAuthorizationURLFlow = &FlowExpr{ |
| 317 | TokenURL: tokenURL, |
| 318 | AuthorizationURL: invalidURL, |
| 319 | RefreshURL: refreshURL, |
| 320 | } |
| 321 | errInvalidTokenURL = fmt.Errorf("invalid token URL %q: %s", invalidURL, parseError.Error()) |
| 322 | errInvalidAuthorizationURL = fmt.Errorf("invalid authorization URL %q: %s", invalidURL, parseError.Error()) |
| 323 | ) |
| 324 | cases := map[string]struct { |
| 325 | flows []*FlowExpr |
| 326 | expected *eval.ValidationErrors |
| 327 | }{ |
| 328 | "no error": { |
| 329 | flows: []*FlowExpr{ |
| 330 | validFlow, |
| 331 | }, |
| 332 | expected: &eval.ValidationErrors{ |
| 333 | Errors: []error{}, |
| 334 | }, |
| 335 | }, |
| 336 | "single error": { |
| 337 | flows: []*FlowExpr{ |
| 338 | invalidTokenURLFlow, |
| 339 | }, |
| 340 | expected: &eval.ValidationErrors{ |
| 341 | Errors: []error{ |
| 342 | errInvalidTokenURL, |
| 343 | }, |
| 344 | }, |
| 345 | }, |
| 346 | "multiple errors": { |
| 347 | flows: []*FlowExpr{ |
| 348 | invalidTokenURLFlow, |
| 349 | invalidAuthorizationURLFlow, |
| 350 | }, |
| 351 | expected: &eval.ValidationErrors{ |
| 352 | Errors: []error{ |
| 353 | errInvalidTokenURL, |
| 354 | errInvalidAuthorizationURL, |
| 355 | }, |