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) } }