package logic import ( "errors" "testing" smsentity "spark-server/internal/module/sms/entity" smsmodel "spark-server/internal/module/sms/model" "spark-server/internal/pkg/errs" ) func TestCheckAndConsumeInvalidUnified(t *testing.T) { store := smsmodel.NewMemoryStore() svc := NewService(store, nil, nil, nil) ctx := t.Context() email := "ada@example.com" key := storeKey(smsentity.ChannelEmail, smsentity.PurposeLogin, email) if err := svc.CheckAndConsume(ctx, smsentity.ChannelEmail, smsentity.PurposeLogin, email, "000000"); !errors.Is(err, errs.ErrVerifyCodeInvalid) { t.Fatalf("missing: %v", err) } if err := store.Put(ctx, key, "123456", 60); err != nil { t.Fatal(err) } if err := svc.CheckAndConsume(ctx, smsentity.ChannelEmail, smsentity.PurposeLogin, email, "999999"); !errors.Is(err, errs.ErrVerifyCodeInvalid) { t.Fatalf("wrong: %v", err) } if err := svc.CheckAndConsume(ctx, smsentity.ChannelEmail, smsentity.PurposeLogin, email, "123456"); err != nil { t.Fatal(err) } if err := svc.CheckAndConsume(ctx, smsentity.ChannelEmail, smsentity.PurposeLogin, email, "123456"); !errors.Is(err, errs.ErrVerifyCodeInvalid) { t.Fatalf("used: %v", err) } }