65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
package app
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"douyu_go/internal/seckill"
|
|
"douyu_go/internal/types"
|
|
)
|
|
|
|
func TestParseAccountImport(t *testing.T) {
|
|
entries, err := parseAccountImport("# 注释\r\nfoo----pass----cookie-a\nbar----pass----cookie-b\n")
|
|
if err != nil {
|
|
t.Fatalf("解析账号失败: %v", err)
|
|
}
|
|
if len(entries) != 2 || entries[0].Raw != "foo----pass----cookie-a" {
|
|
t.Fatalf("解析结果异常: %#v", entries)
|
|
}
|
|
|
|
if _, err := parseAccountImport("bad-line"); err == nil {
|
|
t.Fatal("格式错误的账号行应该被拒绝")
|
|
}
|
|
if _, err := parseAccountImport("foo----pass----cookie\nfoo----pass----cookie2"); err == nil {
|
|
t.Fatal("重复账号应该被拒绝")
|
|
}
|
|
}
|
|
|
|
func TestAccountMutations(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "user.txt")
|
|
if err := os.WriteFile(path, []byte("# 账号\r\nfoo----pass----cookie-a\r\n"), 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
scheduler := seckill.New(nil, types.AppPaths{AccountFile: path}, nil, 1, 1, nil, types.SeckillModeNormal)
|
|
scheduler.LoadAccounts()
|
|
a := &App{scheduler: scheduler}
|
|
|
|
result := a.ImportAccounts("bar----pass----cookie-b")
|
|
if !result.Success || result.Count != 1 {
|
|
t.Fatalf("导入失败: %#v", result)
|
|
}
|
|
result = a.UpdateAccount("bar", "baz", "")
|
|
if !result.Success {
|
|
t.Fatalf("编辑失败: %#v", result)
|
|
}
|
|
result = a.DeleteAccounts([]string{"foo"})
|
|
if !result.Success || result.Count != 1 {
|
|
t.Fatalf("删除失败: %#v", result)
|
|
}
|
|
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
content := string(data)
|
|
if strings.Contains(content, "foo----") || !strings.Contains(content, "baz----pass----cookie-b") {
|
|
t.Fatalf("账号文件内容异常: %q", content)
|
|
}
|
|
if len(content) == 0 || !strings.HasSuffix(content, "\r\n") {
|
|
t.Fatalf("账号文件未使用规范换行: %q", content)
|
|
}
|
|
}
|