package render import ( "encoding/json" "git.5iot.com/iotlcm-public/iotlcm-bot/internal/archive" "strings" "testing" ) func TestSupplyBlockCoversEveryTrafficOperation(t *testing.T) { observation := json.RawMessage(`{"schemaVersion":1,"resolutionMs":1000,"summary":{"targetChannels":1,"validChannels":1,"confirmedChannels":1,"confirmedChannelMs":6000,"longestMs":6000}}`) for _, operation := range []string{"previous_day_usage_full_sync", "previous_month_usage_full_sync", "current_month_usage_full_sync", "traffic_usage_full_sync"} { a := archive.RunArchive{Run: archive.RunSummary{Operation: operation, SupplyObservation: observation}} if supplyBlock(a) == "" { t.Fatalf("traffic operation %q must show supply block", operation) } } for _, operation := range []string{"sim_status_queue_full_sync", "imei_full_sync"} { a := archive.RunArchive{Run: archive.RunSummary{Operation: operation, SupplyObservation: observation}} if supplyBlock(a) != "" { t.Fatalf("non-traffic operation %q must omit supply block", operation) } } } func TestSupplyCompatibilityAndPartial(t *testing.T) { a := archive.RunArchive{Run: archive.RunSummary{Operation: "current_month_usage_full_sync"}} if supplyBlock(a) != "" { t.Fatal("legacy archive must omit telemetry") } a.Run.SupplyObservation = json.RawMessage(`{"schemaVersion":1,"resolutionMs":1000,"partial":true,"summary":{"targetChannels":2,"validChannels":2,"confirmedChannels":1,"confirmedChannelMs":6000,"longestMs":6000},"channels":[{"chanKey":"a","confirmedWait":{"totalMs":6000,"longestMs":6000},"producerStageMs":{"global_capacity":6000}}]}`) text := supplyBlock(a) for _, want := range []string{"partial", "6.0通道秒", "global_capacity", "约1秒分辨率", "≥5秒"} { if !strings.Contains(text, want) { t.Fatalf("missing %s in %s", want, text) } } if strings.Contains(text, "全程供料充足") { t.Fatal("unsupported conclusion") } a.Run.SupplyObservation = json.RawMessage(`"bad"`) if !strings.Contains(supplyBlock(a), "不可用") { t.Fatal("bad optional telemetry must degrade") } a.Run.SyncType = "replay" if supplyBlock(a) != "" { t.Fatal("replay changed") } }