43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
package business
|
|
|
|
import (
|
|
"context"
|
|
"kra/internal/biz/business"
|
|
"kra/internal/service/dto"
|
|
"testing"
|
|
)
|
|
|
|
type preferenceFake struct {
|
|
calls int
|
|
value business.UserPreference
|
|
}
|
|
|
|
func (f *preferenceFake) Current(context.Context) (*business.UserPreference, error) {
|
|
return &f.value, nil
|
|
}
|
|
func (f *preferenceFake) UpdateCurrent(_ context.Context, p business.UserPreference) error {
|
|
f.calls++
|
|
f.value = p
|
|
return nil
|
|
}
|
|
|
|
func TestPreferenceRequiresBothFieldsButAcceptsFalse(t *testing.T) {
|
|
f := &preferenceFake{}
|
|
s := &UserPreferenceService{uc: f}
|
|
off := false
|
|
for _, req := range []*dto.UserPreferenceRequest{nil, {}, {IncludeSubPromote: &off}, {IDCardDedup: &off}} {
|
|
if err := s.UpdateCurrent(context.Background(), req); err != business.ErrPreferenceRequired {
|
|
t.Fatalf("缺字段应被拒绝: %v", err)
|
|
}
|
|
}
|
|
if f.calls != 0 {
|
|
t.Fatal("校验失败后不应调用用例")
|
|
}
|
|
if err := s.UpdateCurrent(context.Background(), &dto.UserPreferenceRequest{IncludeSubPromote: &off, IDCardDedup: &off}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if f.calls != 1 || f.value.IncludeSubPromote || f.value.IDCardDedup {
|
|
t.Fatalf("false 值未完整传递: %+v", f)
|
|
}
|
|
}
|