diff --git a/internal/web/uploads_busy_handler_test.go b/internal/web/uploads_busy_handler_test.go new file mode 100644 index 0000000..b741dba --- /dev/null +++ b/internal/web/uploads_busy_handler_test.go @@ -0,0 +1,31 @@ +package web_test + +import ( + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "git.d-ma.be/mathias/tapir/internal/uploads" +) + +func TestUploadPost_ABusyRejectionIs429WithItsMessage(t *testing.T) { + app, _ := newUploadApp(t, audioOK, 200<<20) + app.Uploads = failingUploader{err: &uploads.RejectError{Reason: uploads.ReasonBusy, Message: "Too many recordings are waiting. Try again in a few minutes."}} + + rec := do(t, app, uploadReq(t, "t", "a.m4a", []byte("x"))) + + require.Equal(t, http.StatusTooManyRequests, rec.Code, "the user's to retry: not a 500, not a 422") + assert.Contains(t, body(t, rec), "Too many recordings are waiting") +} + +func TestUploadStatus_ABusyFailureIsExplainedInWords(t *testing.T) { + app, _ := newUploadApp(t, audioOK, 200<<20) + id := seedUpload(t, userID, "m", "failed", "queue_full") + + b := body(t, do(t, app, get("/uploads/"+id+"/status"))) + + assert.Contains(t, b, "waiting") + assert.NotContains(t, b, "This upload failed. Please upload it again.") +}