package webui import ( "errors" "testing" "cmroubao/backend-api/internal/domain" "cmroubao/backend-api/internal/usecase" ) func TestMapFreightPreflightErrorUsesStablePublicErrors(t *testing.T) { testCases := []struct { err error want error }{ {domain.ErrFreightSourceOCRInvalid, ErrOCRServiceInvalid}, {domain.ErrFreightSourceNotConfigured, ErrERPNotConfigured}, {domain.ErrFreightSourceSessionNeeded, ErrERPSessionNeeded}, {domain.ErrFreightSourceNotFound, ErrERPFreightNotFound}, {domain.ErrFreightSourceLoginRejected, ErrERPLoginRejected}, {domain.ErrFreightSourceProtocol, ErrERPProtocol}, {domain.ErrFreightSourceUnavailable, ErrERPUnavailable}, } for _, testCase := range testCases { actual := mapFreightPreflightError(testCase.err) if !errors.Is(actual, testCase.want) || !errors.Is(actual, testCase.err) { t.Fatalf("mapFreightPreflightError(%v) = %v", testCase.err, actual) } } } func TestMapFreightCreateErrorPreservesPreflightErrors(t *testing.T) { for _, testCase := range []struct { err error want error }{ {domain.ErrFreightSourceOCRInvalid, ErrOCRServiceInvalid}, {domain.ErrFreightSourceNotConfigured, ErrERPNotConfigured}, {domain.ErrFreightSourceSessionNeeded, ErrERPSessionNeeded}, {domain.ErrFreightSourceNotFound, ErrERPFreightNotFound}, {domain.ErrFreightSourceLoginRejected, ErrERPLoginRejected}, {domain.ErrFreightSourceProtocol, ErrERPProtocol}, {domain.ErrFreightSourceUnavailable, ErrERPUnavailable}, } { actual := mapFreightCreateError(testCase.err) if !errors.Is(actual, testCase.want) || !errors.Is(actual, testCase.err) { t.Fatalf("mapFreightCreateError(%v) = %v", testCase.err, actual) } } } func TestMapFreightCreateErrorUsesStableSyncErrors(t *testing.T) { for _, testCase := range []struct { code string want error }{ {"FREIGHT_SYNC_BUSY", ErrFreightSyncBusy}, {"FREIGHT_SYNC_TIMEOUT", ErrFreightSyncTimeout}, } { source := &usecase.Error{ Kind: usecase.ErrorKindUnavailable, Code: testCase.code, Fields: map[string]string{}, } actual := mapFreightCreateError(source) if !errors.Is(actual, testCase.want) || !errors.Is(actual, source) { t.Fatalf("mapFreightCreateError(%s) = %v", testCase.code, actual) } } }