@@ -422,3 +422,51 @@ func TestCanceledJSON(t *testing.T) {
422422 assert .Contains (t , string (body ), "some unrelated error" )
423423 assert .Equal (t , 499 , resp .StatusCode )
424424}
425+
426+ func TestOryErrorIDHeader (t * testing.T ) {
427+ for k , tc := range []struct {
428+ name string
429+ err error
430+ expectedHeader string
431+ }{
432+ {
433+ name : "error with ID sets header" ,
434+ err : & ErrMisconfiguration ,
435+ expectedHeader : "invalid_configuration" ,
436+ },
437+ {
438+ name : "error without ID does not set header" ,
439+ err : & ErrNotFound ,
440+ expectedHeader : "" ,
441+ },
442+ {
443+ name : "custom error with ID sets header" ,
444+ err : & DefaultError {
445+ IDField : "custom_error_id" ,
446+ CodeField : http .StatusBadRequest ,
447+ StatusField : http .StatusText (http .StatusBadRequest ),
448+ ErrorField : "custom error" ,
449+ },
450+ expectedHeader : "custom_error_id" ,
451+ },
452+ {
453+ name : "upstream error sets header" ,
454+ err : & ErrUpstreamError ,
455+ expectedHeader : "upstream_error" ,
456+ },
457+ } {
458+ t .Run (fmt .Sprintf ("case=%d/%s" , k , tc .name ), func (t * testing.T ) {
459+ h := NewJSONWriter (nil )
460+ ts := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
461+ h .WriteError (w , r , tc .err )
462+ }))
463+ t .Cleanup (ts .Close )
464+
465+ resp , err := http .Get (ts .URL + "/do" )
466+ require .NoError (t , err )
467+ defer resp .Body .Close ()
468+
469+ assert .Equal (t , tc .expectedHeader , resp .Header .Get ("Ory-Error-Id" ))
470+ })
471+ }
472+ }
0 commit comments