Files
updata_hfb/internal/hfb/parser_test.go
T
2026-07-25 14:59:56 +08:00

145 lines
4.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package hfb
import (
"strings"
"testing"
)
const sampleText = `上号方式:QQ扫码
哈夫币纯币:156
段位:铂金
等级:60
保险格数:9
每日消耗:10
体力:7
负重:7
AWM子弹数量:80
6头数量:13
6甲数量:12
皮肤:暗星
绝密KD0.2
押金:350
号主在线时间:11:00 至 00:00
封禁记录:无
常用地区:海南
回收比例:1:47.0
回收租金:332
联系电话:15203616450`
func TestParseUploadTextSample(t *testing.T) {
parsed, err := ParseUploadText(sampleText)
if err != nil {
t.Fatalf("ParseUploadText() error = %v", err)
}
account := parsed.Account
if account.LoginMethod != "QQ扫码" {
t.Fatalf("LoginMethod = %q", account.LoginMethod)
}
if account.Currency.HafuCoin != 156 {
t.Fatalf("HafuCoin = %v", account.Currency.HafuCoin)
}
if account.Currency.RecycleRatio != 47 {
t.Fatalf("RecycleRatio = %v", account.Currency.RecycleRatio)
}
if account.ContactPhone != "15203616450" {
t.Fatalf("ContactPhone = %q", account.ContactPhone)
}
if got := len(account.Inventory.Skins); got != 1 || account.Inventory.Skins[0] != "暗星" {
t.Fatalf("Skins = %#v", account.Inventory.Skins)
}
}
func TestParseUploadTextASCIIDelimiterKeepsRatioValue(t *testing.T) {
text := sampleText + "\n上传人:张三"
parsed, err := ParseUploadText(text)
if err != nil {
t.Fatalf("ParseUploadText() error = %v", err)
}
if parsed.UploaderName != "张三" {
t.Fatalf("UploaderName = %q", parsed.UploaderName)
}
if parsed.Account.Currency.RecycleRatio != 47 {
t.Fatalf("RecycleRatio = %v", parsed.Account.Currency.RecycleRatio)
}
}
func TestParseUploadTextNormalizesOwnerOnlineTimeFormats(t *testing.T) {
tests := []struct {
name string
line string
want string
}{
{name: "至", line: "号主在线时间:08:00 至 23:00", want: "08:00 至 23:00"},
{name: "短横线和全角冒号", line: "号主在线时间:8:00-100", want: "08:00 至 01:00"},
{name: "英文字段冒号", line: "号主在线时间:8:00-100", want: "08:00 至 01:00"},
{name: "点和到", line: "在线时间:8点到1点", want: "08:00 至 01:00"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
text := strings.Replace(sampleText, "号主在线时间:11:00 至 00:00", tt.line, 1)
parsed, err := ParseUploadText(text)
if err != nil {
t.Fatalf("ParseUploadText() error = %v", err)
}
if parsed.Account.OwnerOnlineTime != tt.want {
t.Fatalf("OwnerOnlineTime = %q, want %q", parsed.Account.OwnerOnlineTime, tt.want)
}
})
}
}
func TestParseUploadTextMissingRequiredField(t *testing.T) {
_, err := ParseUploadText("上号方式:QQ扫码")
if err == nil {
t.Fatal("ParseUploadText() expected error")
}
}
func TestParseUploadTextBanRecordAndRemark(t *testing.T) {
text := `上号方式:QQ扫码
哈夫币纯币:156
段位:铂金
等级:60
保险格数:9
每日消耗:10
体力:7
负重:7
AWM子弹数量:80
6头数量:13
6甲数量:12
皮肤:暗星
绝密KD0.2
押金:350
号主在线时间:11:00 至 00:00
封禁记录:2026/01/23封禁3天 2026/01/26封禁一天
常用地区:海南
回收比例:1:47.0
回收租金:332
联系电话:15203616450
备注:有语音封禁`
parsed, err := ParseUploadText(text)
if err != nil {
t.Fatalf("ParseUploadText() error = %v", err)
}
if parsed.Account.BanRecord != "有" {
t.Fatalf("BanRecord = %q, want 有", parsed.Account.BanRecord)
}
wantRemark := "有语音封禁\n封禁历史:2026/01/23封禁3天 2026/01/26封禁一天"
if parsed.Account.Remark != wantRemark {
t.Fatalf("Remark = %q, want %q", parsed.Account.Remark, wantRemark)
}
}
func TestParseUploadTextNoBanKeepsEmptyRemark(t *testing.T) {
parsed, err := ParseUploadText(sampleText)
if err != nil {
t.Fatalf("ParseUploadText() error = %v", err)
}
if parsed.Account.BanRecord != "无" {
t.Fatalf("BanRecord = %q, want 无", parsed.Account.BanRecord)
}
if parsed.Account.Remark != "" {
t.Fatalf("Remark = %q, want empty", parsed.Account.Remark)
}
}