Files
huangguo_server/models/v/moduleconfmod/moduleconf_test.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

102 lines
3.1 KiB
Go

package moduleconfmod
import (
"encoding/json"
"testing"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
func TestModuleConfValidateSchedule(t *testing.T) {
start := time.Date(2026, 7, 27, 8, 0, 0, 0, time.UTC)
after := start.Add(time.Hour)
before := start.Add(-time.Second)
tests := []struct {
name string
module ModuleConf
wantErr bool
}{
{name: "no limits", module: ModuleConf{}},
{name: "only online", module: ModuleConf{OnlineAt: &start}},
{name: "only offline", module: ModuleConf{OfflineAt: &after}},
{name: "valid window", module: ModuleConf{OnlineAt: &start, OfflineAt: &after}},
{name: "equal boundary", module: ModuleConf{OnlineAt: &start, OfflineAt: &start}, wantErr: true},
{name: "reversed window", module: ModuleConf{OnlineAt: &start, OfflineAt: &before}, wantErr: true},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
err := test.module.ValidateSchedule()
if (err != nil) != test.wantErr {
t.Fatalf("ValidateSchedule() error = %v, wantErr %v", err, test.wantErr)
}
})
}
}
func TestModuleConfIsActiveAt(t *testing.T) {
now := time.Date(2026, 7, 27, 8, 0, 0, 0, time.UTC)
past := now.Add(-time.Hour)
future := now.Add(time.Hour)
tests := []struct {
name string
module ModuleConf
want bool
}{
{name: "enabled without window", module: ModuleConf{Status: 1}, want: true},
{name: "disabled", module: ModuleConf{Status: 0}, want: false},
{name: "not online yet", module: ModuleConf{Status: 1, OnlineAt: &future}, want: false},
{name: "online boundary is inclusive", module: ModuleConf{Status: 1, OnlineAt: &now}, want: true},
{name: "inside window", module: ModuleConf{Status: 1, OnlineAt: &past, OfflineAt: &future}, want: true},
{name: "offline boundary is exclusive", module: ModuleConf{Status: 1, OfflineAt: &now}, want: false},
{name: "already offline", module: ModuleConf{Status: 1, OfflineAt: &past}, want: false},
{name: "deleted", module: ModuleConf{Status: 1, DeletedAt: &past}, want: false},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
if got := test.module.IsActiveAt(now); got != test.want {
t.Fatalf("IsActiveAt() = %v, want %v", got, test.want)
}
})
}
}
func TestModuleConfJSONIncludesExcludeSearch(t *testing.T) {
data, err := json.Marshal(ModuleConf{})
if err != nil {
t.Fatal(err)
}
var decoded map[string]interface{}
if err = json.Unmarshal(data, &decoded); err != nil {
t.Fatal(err)
}
value, exists := decoded["excludeSearch"]
if !exists || value != false {
t.Fatalf("excludeSearch = %#v, exists = %v; want false and present", value, exists)
}
}
func TestEditSelectorBSONIncludesFalseExcludeSearch(t *testing.T) {
value := false
data, err := bson.Marshal(EditSelector{
ID: primitive.NewObjectID(),
ExcludeSearch: &value,
})
if err != nil {
t.Fatal(err)
}
var decoded bson.M
if err = bson.Unmarshal(data, &decoded); err != nil {
t.Fatal(err)
}
got, exists := decoded["excludeSearch"]
if !exists || got != false {
t.Fatalf("excludeSearch = %#v, exists = %v; want false and present", got, exists)
}
}