test: add rollback error condition tests

Add tests for Rollback method error paths:
- No previous image available
- Empty previous image string
- App deployment lock held
- App lock already acquired

Relates to #71
This commit is contained in:
clawbot 2026-02-16 00:27:46 -08:00
parent 046cccf31f
commit 3c1525d59e
5 changed files with 130 additions and 56 deletions

View File

@ -0,0 +1,74 @@
package deploy_test
import (
"context"
"database/sql"
"log/slog"
"testing"
"github.com/stretchr/testify/assert"
"git.eeqj.de/sneak/upaas/internal/models"
"git.eeqj.de/sneak/upaas/internal/service/deploy"
)
func TestRollback_NoPreviousImage(t *testing.T) {
t.Parallel()
svc := deploy.NewTestService(slog.Default())
app := &models.App{
ID: "app-rollback-1",
PreviousImageID: sql.NullString{},
}
err := svc.Rollback(context.Background(), app)
assert.ErrorIs(t, err, deploy.ErrNoPreviousImage)
}
func TestRollback_EmptyPreviousImage(t *testing.T) {
t.Parallel()
svc := deploy.NewTestService(slog.Default())
app := &models.App{
ID: "app-rollback-2",
PreviousImageID: sql.NullString{String: "", Valid: true},
}
err := svc.Rollback(context.Background(), app)
assert.ErrorIs(t, err, deploy.ErrNoPreviousImage)
}
func TestRollback_DeploymentLocked(t *testing.T) {
t.Parallel()
svc := deploy.NewTestService(slog.Default())
// Simulate a deploy holding the lock
assert.True(t, svc.TryLockApp("app-rollback-3"))
defer svc.UnlockApp("app-rollback-3")
app := &models.App{
ID: "app-rollback-3",
PreviousImageID: sql.NullString{String: "sha256:abc123", Valid: true},
}
err := svc.Rollback(context.Background(), app)
assert.ErrorIs(t, err, deploy.ErrDeploymentInProgress)
}
func TestRollback_LockedApp(t *testing.T) {
t.Parallel()
svc := deploy.NewTestService(slog.Default())
assert.True(t, svc.TryLockApp("app-rollback-4"))
defer svc.UnlockApp("app-rollback-4")
app := &models.App{
ID: "app-rollback-4",
PreviousImageID: sql.NullString{String: "sha256:abc123", Valid: true},
}
err := svc.Rollback(context.Background(), app)
assert.ErrorIs(t, err, deploy.ErrDeploymentInProgress)
}