32 lines
1.0 KiB
Go
32 lines
1.0 KiB
Go
package uploads_test
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"git.d-ma.be/mathias/tapir/internal/domain"
|
|
"git.d-ma.be/mathias/tapir/internal/uploads"
|
|
)
|
|
|
|
// A full queue is the user's to retry, not a server fault: a typed rejection, the row
|
|
// failed honestly, the audio removed (adversarial review F6).
|
|
|
|
func TestAccept_AFullQueueIsABusyRejectionNotAServerErrorAndLeavesNothingBehind(t *testing.T) {
|
|
r := newRig(t)
|
|
r.sub.err = uploads.ErrQueueFull
|
|
|
|
_, err := r.in.Accept(context.Background(), "user-1", "t", strings.NewReader("data"))
|
|
|
|
var rej *uploads.RejectError
|
|
require.True(t, errors.As(err, &rej), "a full queue must be a rejection the web layer can answer with 429: %v", err)
|
|
assert.Equal(t, uploads.ReasonBusy, rej.Reason)
|
|
assert.Contains(t, rej.Message, "waiting")
|
|
assert.Equal(t, domain.UploadErrBusy, r.st.failed["up-1"], "the row must not sit queued: that is the stuck spinner")
|
|
assert.Empty(t, r.tmpFiles(t), "the audio is deleted")
|
|
}
|