| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package services
- import (
- "encoding/json"
- "os"
- "strings"
- "testing"
- "fwh-toolbox-server/domain"
- )
- const deviceInfoHar = "../../docs/fault-record/设备信息.test.franklinwh.com.har"
- // 从 HAR 中取出指定接口的 result
- func harResult[T any](t *testing.T, api string) *T {
- t.Helper()
- b, err := os.ReadFile(deviceInfoHar)
- if err != nil {
- t.Skipf("har not found: %v", err)
- }
- var har struct {
- Log struct {
- Entries []struct {
- Request struct{ URL string } `json:"request"`
- Response struct {
- Content struct{ Text string } `json:"content"`
- } `json:"response"`
- } `json:"entries"`
- } `json:"log"`
- }
- if err := json.Unmarshal(b, &har); err != nil {
- t.Fatal(err)
- }
- for _, e := range har.Log.Entries {
- if strings.Contains(e.Request.URL, "/manage/"+api) {
- var res domain.FwhResponse[T]
- if err := json.Unmarshal([]byte(e.Response.Content.Text), &res); err != nil {
- t.Fatal(err)
- }
- return res.Result
- }
- }
- t.Fatalf("%s not in har", api)
- return nil
- }
- func TestBuildFaultRecordDevicesFromHar(t *testing.T) {
- devInfo := harResult[domain.FwhDeviceInfo](t, "getDeviceInfo")
- power := harResult[domain.FwhGatewayPower](t, "selectGatewayPower")
- got := BuildFaultRecordDevices("10070052S00X25150083", devInfo, power)
- var lines []string
- for _, d := range got {
- ver := -1
- if d.HwVer != nil {
- ver = *d.HwVer
- }
- lines = append(lines, d.Kind+"|"+d.Sn+"|"+d.Model+"|"+map[bool]string{true: "ok", false: "pending"}[d.Supported]+"|"+string(rune('0'+ver%10)))
- t.Logf("%-10s %-22s %-9s type=%-5q supported=%v hwVer=%d", d.Kind, d.Sn, d.Model, d.Type, d.Supported, ver)
- }
- want := []string{
- "aGate|10070052S00X25150083||ok",
- "aPowerPE|10050015S00W24240002|aPower 2|ok",
- "aPowerPE|10050019S01X25350643|aPower S|ok",
- "aPowerMPPT|10050019S01X25350643|aPower S|ok", // 版本 21 支持 MPPT
- "aHub|10070053S00X25270092||ok",
- }
- if len(got) != len(want) {
- t.Fatalf("devices = %d, want %d", len(got), len(want))
- }
- for i, w := range want {
- if !strings.HasPrefix(lines[i], w) {
- t.Errorf("device %d = %s, want prefix %s", i, lines[i], w)
- }
- }
- }
- func TestBuildFaultRecordDevicesFallback(t *testing.T) {
- // getDeviceInfo 失败时退回站点信息的 fhpSn:没有硬件版本,不生成 aPower-MPPT
- got := BuildFaultRecordDevices("GW", &domain.FwhDeviceInfo{FhpSn: "A1, A2"}, nil)
- if len(got) != 3 || got[1].Sn != "A1" || got[2].Sn != "A2" || got[2].HwVer != nil {
- t.Fatalf("devices = %+v", got)
- }
- }
|