TestHandler_MessageAsObject tests that events with structured message objects (message with params, used by v3/v4 with parameterized messages) are handled.
(t *testing.T)
| 559 | // TestHandler_MessageAsObject tests that events with structured message objects |
| 560 | // (message with params, used by v3/v4 with parameterized messages) are handled. |
| 561 | func TestHandler_MessageAsObject(t *testing.T) { |
| 562 | db := setupTestDB(t) |
| 563 | h := &handler{db: db} |
| 564 | |
| 565 | // When SDK sends message with params, "message" is an object, not a string. |
| 566 | payload := `{"event_id":"msg-obj-test","timestamp":1774960590.0,"level":"warning","platform":"php","message":{"message":"User %s performed %s","params":["alice","login"],"formatted":"User alice performed login"}}` |
| 567 | |
| 568 | r := httptest.NewRequest("POST", "/api/1/store", strings.NewReader(payload)) |
| 569 | r.Header.Set("X-Sentry-Auth", "Sentry sentry_version=7, sentry_key=test") |
| 570 | |
| 571 | inc, err := h.Handle(r) |
| 572 | if err != nil { |
| 573 | t.Fatalf("Handle() error: %v", err) |
| 574 | } |
| 575 | if inc == nil { |
| 576 | t.Fatal("Handle() returned nil") |
| 577 | } |
| 578 | if inc.UUID != "msg-obj-test" { |
| 579 | t.Errorf("UUID = %q, want %q", inc.UUID, "msg-obj-test") |
| 580 | } |
| 581 | |
| 582 | // Verify event was stored in structured storage (should not fail on object message). |
| 583 | var count int |
| 584 | err = db.QueryRow("SELECT COUNT(*) FROM sentry_error_events WHERE event_id = 'msg-obj-test'").Scan(&count) |
| 585 | if err != nil { |
| 586 | t.Fatalf("query error: %v", err) |
| 587 | } |
| 588 | if count != 1 { |
| 589 | t.Errorf("sentry_error_events count = %d, want 1 (object message must not break structured storage)", count) |
| 590 | } |
| 591 | } |
| 592 | |
| 593 | func TestPreviewMapper(t *testing.T) { |
| 594 | m := &previewMapper{} |
nothing calls this directly
no test coverage detected