feat: 积分流水互转合并展示,并优化个人主页与经济看板
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
75
backend/service/points_ledger_test.go
Normal file
75
backend/service/points_ledger_test.go
Normal file
@@ -0,0 +1,75 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/freefire/jiang13-bbs/model"
|
||||
)
|
||||
|
||||
func TestComplementaryLedgerRef(t *testing.T) {
|
||||
if got := complementaryLedgerRef(model.PointReasonUnlockPost, "post"); got != "post_earn" {
|
||||
t.Fatalf("unlock debit: got %q", got)
|
||||
}
|
||||
if got := complementaryLedgerRef(model.PointReasonUnlockPost, "post_earn"); got != "post" {
|
||||
t.Fatalf("unlock credit: got %q", got)
|
||||
}
|
||||
if got := complementaryLedgerRef(model.PointReasonDownloadFile, "attachment"); got != "attachment_earn" {
|
||||
t.Fatalf("download debit: got %q", got)
|
||||
}
|
||||
if got := complementaryLedgerRef(model.PointReasonCheckin, "checkin"); got != "" {
|
||||
t.Fatalf("checkin should not pair, got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPairLedgerIndicesMergesUnlock(t *testing.T) {
|
||||
rows := []model.PointLedger{
|
||||
{ID: 4, UserID: 2, Delta: 10, Reason: model.PointReasonUnlockPost, RefType: "post_earn", RefID: 9},
|
||||
{ID: 3, UserID: 1, Delta: -10, Reason: model.PointReasonUnlockPost, RefType: "post", RefID: 9},
|
||||
{ID: 2, UserID: 3, Delta: 5, Reason: model.PointReasonCheckin, RefType: "checkin", RefID: 1},
|
||||
}
|
||||
pairs := pairLedgerIndices(rows)
|
||||
if len(pairs) != 2 {
|
||||
t.Fatalf("pairs=%d want 2: %#v", len(pairs), pairs)
|
||||
}
|
||||
if pairs[0] != [2]int{0, 1} {
|
||||
t.Fatalf("first pair=%v want [0 1]", pairs[0])
|
||||
}
|
||||
if pairs[1] != [2]int{2, -1} {
|
||||
t.Fatalf("checkin pair=%v want [2 -1]", pairs[1])
|
||||
}
|
||||
}
|
||||
|
||||
func TestPairLedgerIndicesNearestSamePost(t *testing.T) {
|
||||
rows := []model.PointLedger{
|
||||
{ID: 10, UserID: 2, Delta: 8, Reason: model.PointReasonUnlockPost, RefType: "post_earn", RefID: 1},
|
||||
{ID: 9, UserID: 1, Delta: -8, Reason: model.PointReasonUnlockPost, RefType: "post", RefID: 1},
|
||||
{ID: 8, UserID: 4, Delta: 8, Reason: model.PointReasonUnlockPost, RefType: "post_earn", RefID: 1},
|
||||
{ID: 7, UserID: 3, Delta: -8, Reason: model.PointReasonUnlockPost, RefType: "post", RefID: 1},
|
||||
}
|
||||
pairs := pairLedgerIndices(rows)
|
||||
if len(pairs) != 2 {
|
||||
t.Fatalf("pairs=%d want 2: %#v", len(pairs), pairs)
|
||||
}
|
||||
if pairs[0] != [2]int{0, 1} || pairs[1] != [2]int{2, 3} {
|
||||
t.Fatalf("pairs=%v", pairs)
|
||||
}
|
||||
from, to := transferEnds(rows[0], rows[1])
|
||||
if from != 1 || to != 2 {
|
||||
t.Fatalf("flow=%d→%d want 1→2", from, to)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMergePairedLedgerKeepsNewer(t *testing.T) {
|
||||
a := model.PointLedger{ID: 4, UserID: 2, Delta: 10, Note: "正文解锁收益", Reason: model.PointReasonUnlockPost}
|
||||
b := model.PointLedger{ID: 3, UserID: 1, Delta: -10, Note: "解锁帖子:长标题", Reason: model.PointReasonUnlockPost}
|
||||
got := mergePairedLedger(a, b)
|
||||
if got.ID != 4 {
|
||||
t.Fatalf("id=%d want 4", got.ID)
|
||||
}
|
||||
if got.Note != "解锁帖子:长标题" {
|
||||
t.Fatalf("note=%q", got.Note)
|
||||
}
|
||||
if got.Delta != 10 {
|
||||
t.Fatalf("delta=%d want 10", got.Delta)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user