forked from bcurren/go-hue
-
Notifications
You must be signed in to change notification settings - Fork 2
/
client_test.go
99 lines (76 loc) · 2.89 KB
/
client_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package hue
import (
"testing"
)
func Test_NewHTTPClient(t *testing.T) {
client := NewHTTPClient("192.168.10.2")
httpServer, ok := client.conn.(*httpServer)
if !ok {
t.Fatal("Client doesn't have an httpServer")
}
assertEqual(t, "192.168.10.2", httpServer.addr, "httpServer.addr")
}
func Test_GetWithEmptyRequestBody(t *testing.T) {
c := NewStubClient("get/username1/lights.json")
var lights map[string]map[string]string
err := c.Get("/api/username1/lights", &lights)
if err != nil {
t.Fatal(err)
}
assertEqual(t, 2, len(lights), "Num lights returned.")
assertNotNil(t, lights["1"], "lights[1]")
assertEqual(t, "Bedroom", lights["1"]["name"], `lights["1"]["name"]`)
assertNotNil(t, lights["2"], "lights[2]")
assertEqual(t, "Kitchen", lights["2"]["name"], `lights["2"]["name"]`)
}
func Test_GetWithResponseError(t *testing.T) {
c := NewStubClient("errors/unauthorized_user.json")
var lights map[string]map[string]string
err := c.Get("/api/username1/lights", &lights)
apiError, ok := err.(*APIError)
if !ok {
t.Fatal("Should return an unauthorized user error.")
}
assertEqual(t, 1, len(apiError.Errors), "Num errors returned.")
assertEqual(t, 1, apiError.Errors[0].Type, "error.Type")
assertEqual(t, "/lights", apiError.Errors[0].Address, "error.Address")
assertEqual(t, "unauthorized user", apiError.Errors[0].Description, "error.Description")
}
func Test_SendNonGetAllSuccessResponse(t *testing.T) {
c := NewStubClient("post/username1/lights.json")
successes, err := c.Send("POST", "/api/username1/lights", nil)
if err != nil {
t.Fatal("Should be successful.")
}
assertEqual(t, 1, len(successes), "len(successes)")
assertEqual(t, "Searching for new devices", successes[0]["/lights"], "val of /lights")
}
func Test_SendNonGetAllErrorResponse(t *testing.T) {
c := NewStubClient("errors/unauthorized_user.json")
successes, err := c.Send("POST", "/api/username1/lights", nil)
apiError, ok := err.(*APIError)
if !ok {
t.Fatal("Error should be APIError.")
}
errors := apiError.Errors
assertEqual(t, 1, len(errors), "len(errors)")
assertEqual(t, "/lights", errors[0].Address, "errors[0].Address")
assertEqual(t, "unauthorized user", errors[0].Description, "errors[0].Description")
if successes != nil {
t.Error("Success should be nil when 0 are returned")
}
}
func Test_SendNonGetMixedSuccessAndErrorResponse(t *testing.T) {
c := NewStubClient("errors/mixed_errors.json")
successes, err := c.Send("POST", "/api/username1/lights", nil)
apiError, ok := err.(*APIError)
if !ok {
t.Fatal("Error should be APIError.")
}
assertEqual(t, 1, len(successes), "len(successes)")
assertEqual(t, true, successes[0]["/lights/light1/state/on"], "val of light on")
errors := apiError.Errors
assertEqual(t, 1, len(errors), "len(errors)")
assertEqual(t, "/fake", errors[0].Address, "errors[0].Address")
assertEqual(t, "link button not pressed", errors[0].Description, "errors[0].Description")
}