@@ -10,6 +10,7 @@ import (
1010 "testing"
1111 "time"
1212
13+ postprocesspolicy "github.com/tae2089/code-context-graph/internal/postprocess/policy"
1314 "github.com/tae2089/code-context-graph/internal/webhook"
1415)
1516
@@ -110,7 +111,7 @@ func TestStatusHandler_ReportsWebhookQueueFull(t *testing.T) {
110111 req := httptest .NewRequest (http .MethodGet , "/status" , nil )
111112 rec := httptest .NewRecorder ()
112113
113- statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }).ServeHTTP (rec , req )
114+ statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }, nil ).ServeHTTP (rec , req )
114115
115116 if rec .Code != http .StatusServiceUnavailable {
116117 t .Fatalf ("expected 503, got %d body=%s" , rec .Code , rec .Body .String ())
@@ -133,7 +134,7 @@ func TestStatusHandler_ReportsWebhookQueueAges(t *testing.T) {
133134 req := httptest .NewRequest (http .MethodGet , "/status" , nil )
134135 rec := httptest .NewRecorder ()
135136
136- statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }).ServeHTTP (rec , req )
137+ statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }, nil ).ServeHTTP (rec , req )
137138
138139 if rec .Code != http .StatusOK {
139140 t .Fatalf ("expected 200, got %d body=%s" , rec .Code , rec .Body .String ())
@@ -204,7 +205,7 @@ func TestStatusHandler_ReportsUnresolvedWebhookFailure(t *testing.T) {
204205 req := httptest .NewRequest (http .MethodGet , "/status" , nil )
205206 rec := httptest .NewRecorder ()
206207
207- statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }).ServeHTTP (rec , req )
208+ statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }, nil ).ServeHTTP (rec , req )
208209
209210 if rec .Code != http .StatusOK {
210211 t .Fatalf ("expected 200, got %d body=%s" , rec .Code , rec .Body .String ())
@@ -280,7 +281,7 @@ func TestStatusHandler_DegradedWhenRecentRepoFailureUnresolved(t *testing.T) {
280281
281282 req := httptest .NewRequest (http .MethodGet , "/status" , nil )
282283 rec := httptest .NewRecorder ()
283- statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }).ServeHTTP (rec , req )
284+ statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }, nil ).ServeHTTP (rec , req )
284285
285286 if rec .Code != http .StatusOK {
286287 t .Fatalf ("expected 200, got %d body=%s" , rec .Code , rec .Body .String ())
@@ -323,7 +324,7 @@ func TestStatusHandler_DBNotReadyTakesPrecedenceOverWebhookDegraded(t *testing.T
323324
324325 req := httptest .NewRequest (http .MethodGet , "/status" , nil )
325326 rec := httptest .NewRecorder ()
326- statusHandler (func (r * http.Request ) error { return errors .New ("db down" ) }, time .Minute , func () * webhook.SyncQueue { return q }).ServeHTTP (rec , req )
327+ statusHandler (func (r * http.Request ) error { return errors .New ("db down" ) }, time .Minute , func () * webhook.SyncQueue { return q }, nil ).ServeHTTP (rec , req )
327328
328329 if rec .Code != http .StatusServiceUnavailable {
329330 t .Fatalf ("expected 503, got %d body=%s" , rec .Code , rec .Body .String ())
@@ -380,7 +381,7 @@ func TestStatusHandler_ReportsPerRepoRecentRepos(t *testing.T) {
380381
381382 req := httptest .NewRequest (http .MethodGet , "/status" , nil )
382383 rec := httptest .NewRecorder ()
383- statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }).ServeHTTP (rec , req )
384+ statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }, nil ).ServeHTTP (rec , req )
384385
385386 if rec .Code != http .StatusOK {
386387 t .Fatalf ("expected 200, got %d body=%s" , rec .Code , rec .Body .String ())
@@ -441,7 +442,7 @@ func TestStatusHandler_RecentRepos_FailureHasErrorFields(t *testing.T) {
441442
442443 req := httptest .NewRequest (http .MethodGet , "/status" , nil )
443444 rec := httptest .NewRecorder ()
444- statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }).ServeHTTP (rec , req )
445+ statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }, nil ).ServeHTTP (rec , req )
445446
446447 var body map [string ]any
447448 if err := json .Unmarshal (rec .Body .Bytes (), & body ); err != nil {
@@ -473,7 +474,7 @@ func TestStatusHandler_ExistingAggregateFieldsPreserved(t *testing.T) {
473474
474475 req := httptest .NewRequest (http .MethodGet , "/status" , nil )
475476 rec := httptest .NewRecorder ()
476- statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }).ServeHTTP (rec , req )
477+ statusHandler (func (r * http.Request ) error { return nil }, time .Minute , func () * webhook.SyncQueue { return q }, nil ).ServeHTTP (rec , req )
477478
478479 var body map [string ]any
479480 if err := json .Unmarshal (rec .Body .Bytes (), & body ); err != nil {
@@ -490,6 +491,41 @@ func TestStatusHandler_ExistingAggregateFieldsPreserved(t *testing.T) {
490491 }
491492}
492493
494+ func TestStatusHandler_ReportsPostprocessSummary (t * testing.T ) {
495+ req := httptest .NewRequest (http .MethodGet , "/status" , nil )
496+ rec := httptest .NewRecorder ()
497+
498+ statusHandler (func (r * http.Request ) error { return nil }, time .Minute , nil , func (context.Context ) (* postprocesspolicy.StatusSummary , error ) {
499+ return & postprocesspolicy.StatusSummary {
500+ Status : postprocesspolicy .StatusDegraded ,
501+ FailClosed : []postprocesspolicy.StateSnapshot {{
502+ Namespace : "default" ,
503+ Tool : postprocesspolicy .ToolRunPostprocess ,
504+ Policy : postprocesspolicy .PolicyFailClosed ,
505+ ConsecutiveFailures : 3 ,
506+ }},
507+ }, nil
508+ }).ServeHTTP (rec , req )
509+
510+ if rec .Code != http .StatusOK {
511+ t .Fatalf ("expected 200, got %d body=%s" , rec .Code , rec .Body .String ())
512+ }
513+ var body map [string ]any
514+ if err := json .Unmarshal (rec .Body .Bytes (), & body ); err != nil {
515+ t .Fatalf ("decode status: %v" , err )
516+ }
517+ if got := body ["status" ]; got != "degraded" {
518+ t .Fatalf ("status = %v, want degraded" , got )
519+ }
520+ postprocessBody , ok := body ["postprocess" ].(map [string ]any )
521+ if ! ok {
522+ t .Fatalf ("missing postprocess body: %v" , body )
523+ }
524+ if got := postprocessBody ["status" ]; got != "degraded" {
525+ t .Fatalf ("postprocess.status = %v, want degraded" , got )
526+ }
527+ }
528+
493529type recordingPool struct {
494530 maxOpen int
495531 maxIdle int
0 commit comments