package codes_test import ( "context" "testing" "time" "github.com/wangjia/pangolin/server/internal/codes" ) // 无活跃 pro 的新用户:GrantRewardTx 新建一行 source='invite',并写一条 audit_log。 func TestGrantRewardTx_FreshUserCreatesInviteSub(t *testing.T) { db := openMigratedSQLite(t) seedUser(t, db, 7) store := codes.NewStore(db) svc := codes.NewService(store, nil, 5, time.Hour) ctx := context.Background() tx, err := store.BeginTx(ctx) if err != nil { t.Fatalf("BeginTx: %v", err) } subID, exp, err := svc.GrantRewardTx(ctx, tx, 7, 3, "invite", "invite_reward", "ref-1") if err != nil { t.Fatalf("grant: %v", err) } if err := tx.Commit(); err != nil { t.Fatal(err) } if subID == 0 || exp.Before(time.Now()) { t.Fatalf("bad sub %d exp %v", subID, exp) } var src string if err := db.QueryRow(`SELECT source FROM subscriptions WHERE id=?`, subID).Scan(&src); err != nil { t.Fatalf("query source: %v", err) } if src != "invite" { t.Fatalf("source = %q, want invite", src) } var n int if err := db.QueryRow(`SELECT COUNT(*) FROM audit_log WHERE action='invite_reward' AND target='ref-1'`).Scan(&n); err != nil { t.Fatalf("query audit_log: %v", err) } if n != 1 { t.Fatalf("audit rows = %d, want 1", n) } }