184 lines
5.3 KiB
Go
184 lines
5.3 KiB
Go
package xuexitong
|
|
|
|
import (
|
|
"context"
|
|
"likedream-goframe/internal/application/quesbank"
|
|
"likedream-goframe/internal/common/db"
|
|
"likedream-goframe/internal/ent/sysconfig"
|
|
"likedream-goframe/internal/framework/errors"
|
|
"likedream-goframe/internal/framework/logger"
|
|
"likedream-goframe/internal/utils"
|
|
"testing"
|
|
|
|
"github.com/bytedance/sonic"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// getAIConfig 获取AI配置
|
|
func getAIConfig(ctx context.Context) *quesbank.AIConfig {
|
|
db.InitDB()
|
|
config, err := db.Global.SysConfig.Query().
|
|
Where(sysconfig.KeyEQ("ai.config")).
|
|
Only(ctx)
|
|
if err != nil {
|
|
logger.Logger.Debug("未配置AI,作业将跳过", zap.Error(err))
|
|
return nil
|
|
}
|
|
|
|
var aiConfig quesbank.AIConfig
|
|
if err := sonic.Unmarshal([]byte(config.Value), &aiConfig); err != nil {
|
|
logger.Logger.Warn("AI配置解析失败", zap.Error(err))
|
|
return nil
|
|
}
|
|
|
|
return &aiConfig
|
|
}
|
|
func TestSchedule(t *testing.T) {
|
|
ctx := context.Background()
|
|
xuexitongLogin := NewXuexitongLogin(ctx)
|
|
err := xuexitongLogin.Login(context.Background(), "13151832241", "yyz@083422", 5)
|
|
utils.OkOrPanic(err)
|
|
|
|
client := xuexitongLogin.GetClient()
|
|
courseService := NewXuexitongCourse(client)
|
|
|
|
// 人人必修的人工智能课
|
|
config := getAIConfig(ctx)
|
|
if config != nil {
|
|
logger.Logger.Info("AI配置加载成功",
|
|
zap.String("aiType", string(config.Type)),
|
|
zap.String("apiURL", config.URL),
|
|
zap.String("model", config.Model))
|
|
} else {
|
|
logger.Logger.Warn("AI配置为空,作业将被跳过")
|
|
}
|
|
|
|
err = courseService.AutoStudyByCourseIDWithOptions(ctx, "258109701", &AutoStudyOptions{
|
|
AIConfig: config,
|
|
AutoSubmit: true, // 默认不自动提交,仅保存
|
|
Thread: 5,
|
|
})
|
|
if err != nil {
|
|
utils.OkOrPanic(errors.NewBusinessErrorWithDetail(503, "刷课失败", err))
|
|
}
|
|
}
|
|
|
|
func TestXuexitongLogin(t *testing.T) {
|
|
xuexitongLogin := NewXuexitongLogin(context.Background())
|
|
err := xuexitongLogin.Login(context.Background(), "13551503012", "xiaozhi520", 5)
|
|
utils.OkOrPanic(err)
|
|
}
|
|
|
|
func TestPullCourse(t *testing.T) {
|
|
xuexitongLogin := NewXuexitongLogin(context.Background())
|
|
err := xuexitongLogin.Login(context.Background(), "13551503012", "xiaozhi520", 5)
|
|
utils.OkOrPanic(err)
|
|
client := xuexitongLogin.GetClient()
|
|
courseAction := NewXuexitongCourse(client)
|
|
list := courseAction.PullCourseList(context.Background())
|
|
utils.OkOrPanic(err)
|
|
t.Log(list)
|
|
}
|
|
|
|
func TestPullChapter(t *testing.T) {
|
|
xuexitongLogin := NewXuexitongLogin(context.Background())
|
|
err := xuexitongLogin.Login(context.Background(), "13551503012", "xiaozhi520", 5)
|
|
utils.OkOrPanic(err)
|
|
|
|
client := xuexitongLogin.GetClient()
|
|
courseAction := NewXuexitongCourse(client)
|
|
|
|
// 先获取课程列表
|
|
courseList := courseAction.PullCourseList(context.Background())
|
|
if len(courseList) == 0 {
|
|
t.Fatal("没有找到课程")
|
|
}
|
|
|
|
// 获取第一个课程的章节
|
|
chapters := courseAction.PullCourseChapterList(context.Background(), courseList[0])
|
|
t.Logf("课程 %s 的章节数量: %d", courseList[0].CourseName, len(chapters))
|
|
|
|
for _, chapter := range chapters {
|
|
t.Logf("章节: %s, 任务点数量: %d", chapter.Name, chapter.JobCount)
|
|
}
|
|
}
|
|
|
|
func TestFetchChapterCards(t *testing.T) {
|
|
xuexitongLogin := NewXuexitongLogin(context.Background())
|
|
err := xuexitongLogin.Login(context.Background(), "13551503012", "xiaozhi520", 5)
|
|
utils.OkOrPanic(err)
|
|
|
|
client := xuexitongLogin.GetClient()
|
|
courseAction := NewXuexitongCourse(client)
|
|
|
|
// 获取课程列表
|
|
courseList := courseAction.PullCourseList(context.Background())
|
|
if len(courseList) == 0 {
|
|
t.Fatal("没有找到课程")
|
|
}
|
|
|
|
course := courseList[0]
|
|
|
|
// 获取章节列表
|
|
chapters := courseAction.PullCourseChapterList(context.Background(), course)
|
|
if len(chapters) == 0 {
|
|
t.Fatal("没有找到章节")
|
|
}
|
|
|
|
// 找一个有任务点的章节
|
|
var targetChapterID int
|
|
for _, ch := range chapters {
|
|
if ch.JobCount > 0 {
|
|
targetChapterID = ch.ID
|
|
break
|
|
}
|
|
}
|
|
|
|
if targetChapterID == 0 {
|
|
t.Fatal("没有找到有任务点的章节")
|
|
}
|
|
}
|
|
|
|
// TestAutoStudyByCourseID 测试通过课程ID刷课(定时任务使用)
|
|
func TestAutoStudyByCourseID(t *testing.T) {
|
|
// 登录
|
|
xuexitongLogin := NewXuexitongLogin(context.Background())
|
|
err := xuexitongLogin.Login(context.Background(), "13551503012", "xiaozhi520", 5)
|
|
utils.OkOrPanic(err)
|
|
|
|
// 创建课程实例
|
|
courseAction := NewXuexitongCourse(xuexitongLogin.GetClient())
|
|
|
|
// 先获取课程列表,拿到第一个课程的ID
|
|
courseList := courseAction.PullCourseList(context.Background())
|
|
if len(courseList) == 0 {
|
|
t.Fatal("没有找到课程")
|
|
}
|
|
|
|
courseID := courseList[0].CourseID
|
|
t.Logf("准备刷课程ID: %s", courseID)
|
|
|
|
// 一键刷指定课程的所有任务(定时任务就调用这一个方法)
|
|
err = courseAction.AutoStudyByCourseID(context.Background(), courseID)
|
|
utils.OkOrPanic(err)
|
|
|
|
t.Log("指定课程刷课完成")
|
|
}
|
|
|
|
// TestAutoStudyAllCourses 测试自动刷所有课程
|
|
func TestAutoStudyAllCourses(t *testing.T) {
|
|
// 登录
|
|
xuexitongLogin := NewXuexitongLogin(context.Background())
|
|
err := xuexitongLogin.Login(context.Background(), "13551503012", "xiaozhi520", 5)
|
|
utils.OkOrPanic(err)
|
|
|
|
// 创建课程实例
|
|
courseAction := NewXuexitongCourse(xuexitongLogin.GetClient())
|
|
|
|
// 一键刷所有课程
|
|
err = courseAction.AutoStudyAllCourses(context.Background())
|
|
utils.OkOrPanic(err)
|
|
|
|
t.Log("所有课程刷课完成")
|
|
}
|