check / check (push) Successful in 3m19s
Each attempt shows when it was recorded and each delivery when it was created, in the event log and on the event's page. The event log's event times read as the recent events list does: how long ago, with the full UTC time on hover. A delivery records whether Replay created it, in a new replay column added to the delivery model in place. Such a delivery is labelled a replay in the event's summary line and in both pages' delivery lists. Model: opus-5-5
53 lines
1.7 KiB
Go
53 lines
1.7 KiB
Go
package handlers_test
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"sneak.berlin/go/webhooker/internal/database"
|
|
)
|
|
|
|
// TestEventLog_TimesCarryTheirZone proves that the event log shows
|
|
// when an event arrived, and that it and the event's page show when
|
|
// each delivery was created and each attempt recorded: each as how
|
|
// long ago, with the full UTC time on hover.
|
|
func TestEventLog_TimesCarryTheirZone(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
f := newRecentEventsFixture(t)
|
|
target := seedTarget(t, f.db, f.webhook.ID, database.TargetTypeHTTP)
|
|
|
|
now := time.Now().UTC().Truncate(time.Second)
|
|
receivedAt := now.Add(-3 * time.Hour)
|
|
createdAt := now.Add(-90 * time.Minute)
|
|
ranAt := now.Add(-30 * time.Minute)
|
|
|
|
event := f.event(t, contentTypeJSON, "{}", receivedAt)
|
|
dlv := f.deliveryQueuedAt(
|
|
t, event, target.ID, database.DeliveryStatusDelivered, createdAt,
|
|
)
|
|
f.attempt(t, dlv, http.StatusOK, ranAt.Sub(createdAt))
|
|
|
|
w := serveEventPage(t, f.h, f.sess, f.webhook.ID, event.ID)
|
|
require.Equal(t, http.StatusOK, w.Code)
|
|
|
|
eventPage := w.Body.String()
|
|
eventLog := renderSourceLogsPage(t, f.h, f.sess, f.webhook.ID)
|
|
|
|
received := receivedAt.Format(time.DateTime)
|
|
assert.Contains(t, eventLog, `title="`+received+` UTC">3 hours ago</span>`)
|
|
assert.NotContains(t, eventLog, received+"</span>",
|
|
"an event's time must not be written without its zone")
|
|
assert.Contains(t, eventPage, received+" UTC")
|
|
|
|
for _, page := range []string{eventLog, eventPage} {
|
|
assert.Contains(t, page, `title="`+createdAt.Format(time.DateTime)+
|
|
` UTC">created 1 hour ago</span>`)
|
|
assert.Contains(t, page, `title="`+ranAt.Format(time.DateTime)+
|
|
` UTC">30 minutes ago</span>`)
|
|
}
|
|
}
|