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`) assert.NotContains(t, eventLog, received+"", "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`) assert.Contains(t, page, `title="`+ranAt.Format(time.DateTime)+ ` UTC">30 minutes ago`) } }