(t *testing.T)
| 392 | } |
| 393 | |
| 394 | func TestRetryableEnvelope_TrueOnly(t *testing.T) { |
| 395 | // Test 1: Retryable:true → key present |
| 396 | apiErr := &errs.APIError{Problem: errs.Problem{ |
| 397 | Category: errs.CategoryAPI, Subtype: errs.SubtypeRateLimit, Message: "x", Retryable: true, |
| 398 | }} |
| 399 | var buf bytes.Buffer |
| 400 | output.WriteTypedErrorEnvelope(&buf, apiErr, "user") |
| 401 | if !strings.Contains(buf.String(), `"retryable": true`) { |
| 402 | t.Errorf("Retryable:true should emit key; got: %s", buf.String()) |
| 403 | } |
| 404 | |
| 405 | // Test 2: Retryable:false → key absent |
| 406 | buf.Reset() |
| 407 | apiErr2 := &errs.APIError{Problem: errs.Problem{ |
| 408 | Category: errs.CategoryAPI, Message: "x", Retryable: false, |
| 409 | }} |
| 410 | if ok := output.WriteTypedErrorEnvelope(&buf, apiErr2, "user"); !ok { |
| 411 | t.Fatal("WriteTypedErrorEnvelope returned false for typed error — emission failed silently") |
| 412 | } |
| 413 | if strings.Contains(buf.String(), `"retryable"`) { |
| 414 | t.Errorf("Retryable:false should omit key; got: %s", buf.String()) |
| 415 | } |
| 416 | } |
| 417 | |
| 418 | func TestConsoleURL_FeishuBrand(t *testing.T) { |
| 419 | resp := appScopeNotAppliedResp("docx:document") |
nothing calls this directly
no test coverage detected