Files
cmroubao/backend-api/internal/usecase/order_authorization_service_test.go
T

84 lines
2.4 KiB
Go

package usecase
import (
"strings"
"testing"
)
func TestValidateOrderAuthorizationAcceptsSingleStructuredSelection(
t *testing.T,
) {
command := validOrderAuthorizationCommand()
if err := validateOrderAuthorizationCommand(command); err != nil {
t.Fatalf("validate order authorization: %v", err)
}
}
func TestValidateOrderAuthorizationRejectsDuplicateCandidateKey(
t *testing.T,
) {
command := validOrderAuthorizationCommand()
command.Items[1].CandidateKey = command.Items[0].CandidateKey
if err := validateOrderAuthorizationCommand(command); err == nil {
t.Fatal("expected duplicate candidate key to be rejected")
}
}
func TestValidateOrderAuthorizationRejectsSelectedKeyMismatch(
t *testing.T,
) {
command := validOrderAuthorizationCommand()
command.CandidateKey = command.Items[1].CandidateKey
if err := validateOrderAuthorizationCommand(command); err == nil {
t.Fatal("expected selected candidate mismatch to be rejected")
}
}
func TestValidateOrderAuthorizationRequiresOtherNote(t *testing.T) {
command := validOrderAuthorizationCommand()
command.Items[0].PrimaryReasonCode = "OTHER"
command.Items[0].ReasonCodes = []string{"OTHER"}
command.Items[0].Note = "短"
if err := validateOrderAuthorizationCommand(command); err == nil {
t.Fatal("expected short OTHER note to be rejected")
}
command.Items[0].Note = "人工判断规格更准确"
if err := validateOrderAuthorizationCommand(command); err != nil {
t.Fatalf("validate OTHER note: %v", err)
}
}
func validOrderAuthorizationCommand() CreateOrderAuthorizationCommand {
firstKey := strings.Repeat("a", 64)
secondKey := strings.Repeat("b", 64)
return CreateOrderAuthorizationCommand{
ActorUserID: "00000000-0000-4000-8000-000000000001",
TaskID: "00000000-0000-4000-8000-000000000002",
IdempotencyKey: "authorize-order-test",
ExecutionID: "00000000-0000-4000-8000-000000000003",
TaskContentSHA256: strings.Repeat("c", 64),
ExpectedTaskVersion: 2,
CandidateKey: firstKey,
ReasonSchemaVersion: 1,
PrimaryReasonCode: "SELECTED_BEST_MATCH",
Items: []OrderAuthorizationItemInput{
{
CandidateKey: firstKey,
Label: "ACCEPT",
PrimaryReasonCode: "SKU_MATCH",
ReasonCodes: []string{"SKU_MATCH", "IMAGE_MATCH"},
},
{
CandidateKey: secondKey,
Label: "REJECT",
PrimaryReasonCode: "NOT_BEST_MATCH",
ReasonCodes: []string{"NOT_BEST_MATCH"},
},
},
}
}