github.com/stampzilla/stampzilla-go@v2.0.0-rc9+incompatible/nodes/stampzilla-server/models/devices/device_test.go (about) 1 package devices 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/sirupsen/logrus" 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func testDevice(id string) *Device { 12 return &Device{ 13 Type: "type", 14 //Node: "node", 15 ID: ID{ 16 ID: id, 17 Node: "node", 18 }, 19 Name: "name", 20 Online: true, 21 State: State{ 22 "on": true, 23 }, 24 Traits: []string{"onoff"}, 25 } 26 } 27 28 func TestCopyDevice(t *testing.T) { 29 d := testDevice("id") 30 31 newD := d.Copy() 32 33 d.Type = "0" 34 //d.Node = "0" 35 d.ID = ID{ 36 ID: "0", 37 Node: "0", 38 } 39 d.Name = "0" 40 d.Online = false 41 d.State["on"] = false 42 d.State["off"] = true 43 d.Traits = append(d.Traits, "0") 44 45 assert.Equal(t, "type", newD.Type) 46 assert.Equal(t, "0", d.Type) 47 assert.Equal(t, "node", newD.ID.Node) 48 assert.Equal(t, "id", newD.ID.ID) 49 assert.Equal(t, "name", newD.Name) 50 assert.Equal(t, true, newD.Online) 51 assert.Equal(t, true, newD.State["on"]) 52 53 assert.Len(t, newD.Traits, 1) 54 assert.Len(t, newD.State, 1) 55 assert.Len(t, d.Traits, 2) 56 assert.Len(t, d.State, 2) 57 58 } 59 60 func TestCopyDevices(t *testing.T) { 61 d := testDevice("id") 62 devices := NewList() 63 devices.Add(d) 64 newD := devices.Copy() 65 devices.Add(testDevice("id2")) 66 67 assert.Len(t, newD.devices, 1) 68 assert.Len(t, devices.devices, 2) 69 } 70 71 func TestFlatten(t *testing.T) { 72 d := testDevice("id") 73 d.State["temperature"] = 10 74 devices := NewList() 75 devices.Add(d) 76 f := devices.Flatten() 77 t.Log(f) 78 tests := []struct { 79 key string 80 expected interface{} 81 }{ 82 {key: "node.id.on", expected: true}, 83 {key: "node.id.temperature", expected: 10}, 84 } 85 for _, v := range tests { 86 assert.Contains(t, f, v.key) 87 assert.Equal(t, v.expected, f[v.key]) 88 } 89 } 90 91 func TestStateDiff(t *testing.T) { 92 ds1 := State{ 93 "on": true, 94 "temperature": 10, 95 "test": 1, 96 } 97 ds2 := State{ 98 "on": false, 99 "temperature": 10, 100 "asdf": 10, 101 } 102 diff := ds1.Diff(ds2) 103 assert.Len(t, diff, 2) 104 //spew.Dump(diff) 105 assert.Equal(t, false, diff["on"]) 106 assert.Equal(t, 10, diff["asdf"]) 107 assert.Equal(t, nil, diff["temperature"]) 108 } 109 110 func TestJSONMarshalDevices(t *testing.T) { 111 d := NewList() 112 113 d.Add(testDevice("devid")) 114 115 b, err := json.MarshalIndent(d, "", "\t") 116 if err != nil { 117 logrus.Error("error marshal json", err) 118 } 119 120 assert.Contains(t, string(b), `"node.devid": {`) 121 assert.NoError(t, err) 122 123 } 124 func TestJSONUnMarshalDevices(t *testing.T) { 125 126 j := `{ 127 "node.devid": { 128 "type": "type", 129 "id": "node.devid", 130 "name": "name", 131 "online": true, 132 "state": { 133 "on": true 134 }, 135 "traits": [ 136 "onoff" 137 ] 138 }}` 139 d := NewList() 140 141 err := json.Unmarshal([]byte(j), d) 142 143 assert.NoError(t, err) 144 assert.Equal(t, "devid", d.Get(ID{ID: "devid", Node: "node"}).ID.ID) 145 assert.Equal(t, "node", d.Get(ID{ID: "devid", Node: "node"}).ID.Node) 146 assert.Len(t, d.All(), 1) 147 148 }