From 7029dd1d7f0bfc25c084819e6e70b69eefd1fef2 Mon Sep 17 00:00:00 2001 From: Mathias Date: Fri, 2 Oct 2026 09:05:36 +0200 Subject: [PATCH] test(e2e): a finished job's phases are all closed and it was reporting while it ran (ADR-035) Co-Authored-By: Claude Sonnet 5.5 --- cmd/tapir/e2e_upload_test.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/cmd/tapir/e2e_upload_test.go b/cmd/tapir/e2e_upload_test.go index e4c2803..683e483 100644 --- a/cmd/tapir/e2e_upload_test.go +++ b/cmd/tapir/e2e_upload_test.go @@ -2,6 +2,7 @@ package main import ( "context" + "encoding/json" "fmt" "io" "mime/multipart" @@ -21,6 +22,7 @@ import ( "git.d-ma.be/mathias/tapir/internal/adapters/store" "git.d-ma.be/mathias/tapir/internal/config" + "git.d-ma.be/mathias/tapir/internal/domain" "git.d-ma.be/mathias/tapir/internal/web" ) @@ -156,6 +158,23 @@ func TestE2E_UploadTranscribeAndChat(t *testing.T) { assert.Equal(t, "done", status) assert.NotEmpty(t, endpoint) assert.NotEmpty(t, content) + + // ADR-035: a finished job's phases are all closed, and it was reporting while it ran. + var progJSON string + var progressAt, aliveAt *time.Time + require.NoError(t, raw.QueryRow(ctx, + `SELECT COALESCE(progress::text, '[]'), progress_at, alive_at FROM uploaded_transcripts WHERE user_id = $1`, uid). + Scan(&progJSON, &progressAt, &aliveAt)) + var steps []domain.ProgressStep + require.NoError(t, json.Unmarshal([]byte(progJSON), &steps)) + require.NotEmpty(t, steps, "the job recorded no phases") + for _, st := range steps { + assert.Contains(t, []domain.StepState{domain.StepDone, domain.StepSkipped}, st.State, + "phase %q was left %q after the job finished", st.Key, st.State) + } + assert.Equal(t, "save", steps[len(steps)-1].Key) + assert.NotNil(t, progressAt, "progress_at must have been stamped") + t.Logf("phases: %d, heartbeat stamped: %v", len(steps), aliveAt != nil) entries, err := os.ReadDir(cfg.UploadTmpDir) require.NoError(t, err) assert.Empty(t, entries, "the audio must be deleted once transcribed")