You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
1.8 KiB

package m9zApi
import (
"path/filepath"
"testing"
"time"
)
func useTempFaultHistoryFile(t *testing.T) {
t.Helper()
oldFilePath := filePath
filePath = filepath.Join(t.TempDir(), "data.json")
t.Cleanup(func() {
filePath = oldFilePath
})
}
func TestAddDataSkipsDuplicateFaultWithin12Hours(t *testing.T) {
useTempFaultHistoryFile(t)
now := time.Date(2026, 7, 29, 8, 0, 0, 0, time.UTC)
item := M9zFaultHistory{
CommUid: "device-1",
LoopIdx: 1,
FaultCode: "01",
FaultMsg: "short circuit",
FaultTime: now,
}
if err := addData(item); err != nil {
t.Fatalf("addData first item error = %v", err)
}
duplicate := item
duplicate.Voltage = 230
duplicate.FaultTime = now.Add(faultDuplicateWindow - time.Second)
if err := addData(duplicate); err != nil {
t.Fatalf("addData duplicate item error = %v", err)
}
items, err := readData()
if err != nil {
t.Fatalf("readData error = %v", err)
}
if len(items) != 1 {
t.Fatalf("len(items) = %d, want 1", len(items))
}
if !items[0].FaultTime.Equal(now) {
t.Fatalf("FaultTime = %v, want %v", items[0].FaultTime, now)
}
}
func TestAddDataAllowsDuplicateFaultAfter12Hours(t *testing.T) {
useTempFaultHistoryFile(t)
now := time.Date(2026, 7, 29, 8, 0, 0, 0, time.UTC)
item := M9zFaultHistory{
CommUid: "device-1",
LoopIdx: 1,
FaultCode: "01",
FaultMsg: "short circuit",
FaultTime: now,
}
if err := addData(item); err != nil {
t.Fatalf("addData first item error = %v", err)
}
duplicate := item
duplicate.FaultTime = now.Add(faultDuplicateWindow)
if err := addData(duplicate); err != nil {
t.Fatalf("addData after window error = %v", err)
}
items, err := readData()
if err != nil {
t.Fatalf("readData error = %v", err)
}
if len(items) != 2 {
t.Fatalf("len(items) = %d, want 2", len(items))
}
}