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  }