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
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))
|
|
}
|
|
}
|