Sub2API v1.0 - AI API 网关(二开初始版本,基于上游 Wei-Shaw/sub2api)
Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
//go:build unit
|
||||
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
infraerrors "github.com/Wei-Shaw/sub2api/internal/pkg/errors"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestRedeemService_BatchUpdate_PartialFields(t *testing.T) {
|
||||
status := StatusDisabled
|
||||
notes := "maintenance window"
|
||||
expiresAt := time.Now().UTC().Add(24 * time.Hour)
|
||||
repo := &redeemRepoStub{}
|
||||
svc := &RedeemService{redeemRepo: repo}
|
||||
|
||||
result, err := svc.BatchUpdate(context.Background(), &RedeemCodeBatchUpdateInput{
|
||||
IDs: []int64{1, 2, 2},
|
||||
Fields: RedeemCodeBatchUpdateFields{
|
||||
Status: &status,
|
||||
ExpiresAt: NullableTimeUpdate{Set: true, Value: &expiresAt},
|
||||
Notes: ¬es,
|
||||
},
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, int64(2), result.Updated)
|
||||
require.True(t, repo.batchUpdateCalled)
|
||||
require.Equal(t, []int64{1, 2}, repo.batchUpdateIDs)
|
||||
require.Equal(t, &status, repo.batchUpdateFields.Status)
|
||||
require.True(t, repo.batchUpdateFields.ExpiresAt.Set)
|
||||
require.WithinDuration(t, expiresAt, *repo.batchUpdateFields.ExpiresAt.Value, time.Second)
|
||||
require.Equal(t, ¬es, repo.batchUpdateFields.Notes)
|
||||
require.False(t, repo.batchUpdateFields.GroupID.Set)
|
||||
require.Nil(t, repo.batchUpdateFields.Type)
|
||||
require.Nil(t, repo.batchUpdateFields.Value)
|
||||
}
|
||||
|
||||
func TestRedeemService_BatchUpdate_RejectsInvalidID(t *testing.T) {
|
||||
repo := &redeemRepoStub{}
|
||||
svc := &RedeemService{redeemRepo: repo}
|
||||
notes := "bad id"
|
||||
|
||||
result, err := svc.BatchUpdate(context.Background(), &RedeemCodeBatchUpdateInput{
|
||||
IDs: []int64{1, 0},
|
||||
Fields: RedeemCodeBatchUpdateFields{Notes: ¬es},
|
||||
})
|
||||
|
||||
require.Nil(t, result)
|
||||
require.Error(t, err)
|
||||
require.True(t, infraerrors.IsBadRequest(err))
|
||||
require.False(t, repo.batchUpdateCalled)
|
||||
}
|
||||
|
||||
func TestRedeemService_BatchUpdate_RejectsCoreFieldsForUsedCodes(t *testing.T) {
|
||||
repo := &redeemRepoStub{}
|
||||
svc := &RedeemService{redeemRepo: repo}
|
||||
newValue := 100.0
|
||||
|
||||
result, err := svc.BatchUpdate(context.Background(), &RedeemCodeBatchUpdateInput{
|
||||
IDs: []int64{42},
|
||||
Fields: RedeemCodeBatchUpdateFields{
|
||||
Value: &newValue,
|
||||
},
|
||||
})
|
||||
|
||||
require.Nil(t, result)
|
||||
require.Error(t, err)
|
||||
require.True(t, infraerrors.IsBadRequest(err))
|
||||
require.False(t, repo.batchUpdateCalled)
|
||||
}
|
||||
Reference in New Issue
Block a user