129 lines
3.2 KiB
Go
129 lines
3.2 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
smokemodel "wx_service/internal/smoke/model"
|
|
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
)
|
|
|
|
func setupSmokeLogServiceTestDB(t *testing.T) *gorm.DB {
|
|
t.Helper()
|
|
|
|
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Silent),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("open sqlite: %v", err)
|
|
}
|
|
|
|
if err := db.Exec(`
|
|
CREATE TABLE fa_smoke_log (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
uid INTEGER NOT NULL,
|
|
smoke_time DATE NULL,
|
|
smoke_at DATETIME NULL,
|
|
remark TEXT,
|
|
reason_tags TEXT,
|
|
createtime INTEGER,
|
|
updatetime INTEGER,
|
|
deletetime INTEGER,
|
|
level INTEGER DEFAULT 1,
|
|
num INTEGER DEFAULT 1
|
|
)`).Error; err != nil {
|
|
t.Fatalf("create fa_smoke_log: %v", err)
|
|
}
|
|
|
|
return db
|
|
}
|
|
|
|
func TestSmokeLogServiceCreateKeepsZeroForResisted(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
db := setupSmokeLogServiceTestDB(t)
|
|
svc := NewSmokeLogService(db)
|
|
|
|
smokeAt := time.Date(2026, 3, 4, 0, 59, 0, 0, time.Local)
|
|
_, err := svc.Create(context.Background(), 1001, CreateSmokeLogRequest{
|
|
SmokeAt: &smokeAt,
|
|
Remark: "resist",
|
|
Level: 0,
|
|
Num: 0,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("create resisted log: %v", err)
|
|
}
|
|
|
|
var got smokemodel.SmokeLog
|
|
if err := db.Where("uid = ?", 1001).Order("id DESC").First(&got).Error; err != nil {
|
|
t.Fatalf("load created record: %v", err)
|
|
}
|
|
|
|
if got.Level != 0 || got.Num != 0 {
|
|
t.Fatalf("created resisted log level/num=(%d,%d), want=(0,0)", got.Level, got.Num)
|
|
}
|
|
}
|
|
|
|
func TestSmokeLogServiceCreatePersistsReasonTags(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
db := setupSmokeLogServiceTestDB(t)
|
|
svc := NewSmokeLogService(db)
|
|
|
|
smokeAt := time.Date(2026, 3, 4, 8, 30, 0, 0, time.Local)
|
|
_, err := svc.Create(context.Background(), 1002, CreateSmokeLogRequest{
|
|
SmokeAt: &smokeAt,
|
|
Remark: "压力大;会后补了一根",
|
|
ReasonTags: smokemodel.StringSlice{"stress", "social"},
|
|
Level: 3,
|
|
Num: 1,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("create log with reason tags: %v", err)
|
|
}
|
|
|
|
var got smokemodel.SmokeLog
|
|
if err := db.Where("uid = ?", 1002).Order("id DESC").First(&got).Error; err != nil {
|
|
t.Fatalf("load created record: %v", err)
|
|
}
|
|
|
|
if len(got.ReasonTags) != 2 || got.ReasonTags[0] != "stress" || got.ReasonTags[1] != "social" {
|
|
t.Fatalf("created reason_tags=%v, want=[stress social]", got.ReasonTags)
|
|
}
|
|
}
|
|
|
|
func TestSmokeLogServiceUpdatePersistsReasonTags(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
db := setupSmokeLogServiceTestDB(t)
|
|
svc := NewSmokeLogService(db)
|
|
|
|
smokeAt := time.Date(2026, 3, 4, 9, 0, 0, 0, time.Local)
|
|
record, err := svc.Create(context.Background(), 1003, CreateSmokeLogRequest{
|
|
SmokeAt: &smokeAt,
|
|
Remark: "old",
|
|
Level: 2,
|
|
Num: 1,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("create seed log: %v", err)
|
|
}
|
|
|
|
reasonTags := smokemodel.StringSlice{"after_meal", "other"}
|
|
updated, err := svc.Update(context.Background(), 1003, record.ID, UpdateSmokeLogRequest{
|
|
ReasonTags: &reasonTags,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("update reason_tags: %v", err)
|
|
}
|
|
|
|
if len(updated.ReasonTags) != 2 || updated.ReasonTags[0] != "after_meal" || updated.ReasonTags[1] != "other" {
|
|
t.Fatalf("updated reason_tags=%v, want=[after_meal other]", updated.ReasonTags)
|
|
}
|
|
}
|