github.com/amimof/huego@v1.2.1/group_test.go (about) 1 package huego 2 3 import ( 4 "image/color" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestGetGroups(t *testing.T) { 11 b := New(hostname, username) 12 groups, err := b.GetGroups() 13 if err != nil { 14 t.Fatal(err) 15 } 16 t.Logf("Found %d groups", len(groups)) 17 for i, g := range groups { 18 t.Logf("%d:", i) 19 t.Logf(" Name: %s", g.Name) 20 t.Logf(" Lights: %s", g.Lights) 21 t.Logf(" Type: %s", g.Type) 22 t.Logf(" GroupState:") 23 t.Logf(" AllOn: %t", g.GroupState.AllOn) 24 t.Logf(" AnyOn: %t", g.GroupState.AnyOn) 25 t.Logf(" Recycle: %t", g.Recycle) 26 t.Logf(" Class: %s", g.Class) 27 t.Logf(" State:") 28 t.Logf(" On: %t", g.State.On) 29 t.Logf(" Bri: %d", g.State.Bri) 30 t.Logf(" Hue: %d", g.State.Hue) 31 t.Logf(" Sat: %d", g.State.Sat) 32 t.Logf(" Xy: %b", g.State.Xy) 33 t.Logf(" Ct: %d", g.State.Ct) 34 t.Logf(" Alert: %s", g.State.Alert) 35 t.Logf(" Effect: %s", g.State.Effect) 36 t.Logf(" TransitionTime: %d", g.State.TransitionTime) 37 t.Logf(" BriInc: %d", g.State.BriInc) 38 t.Logf(" SatInc: %d", g.State.SatInc) 39 t.Logf(" HueInc: %d", g.State.HueInc) 40 t.Logf(" CtInc: %d", g.State.CtInc) 41 t.Logf(" XyInc: %d", g.State.XyInc) 42 t.Logf(" ColorMode: %s", g.State.ColorMode) 43 t.Logf(" Reachable: %t", g.State.Reachable) 44 t.Logf(" ID: %d", g.ID) 45 } 46 47 contains := func(name string, ss []Group) bool { 48 for _, s := range ss { 49 if s.Name == name { 50 return true 51 } 52 } 53 return false 54 } 55 56 assert.True(t, contains("Group 1", groups)) 57 assert.True(t, contains("Group 2", groups)) 58 59 b.Host = badHostname 60 _, err = b.GetGroups() 61 assert.NotNil(t, err) 62 } 63 64 func TestGetGroup(t *testing.T) { 65 b := New(hostname, username) 66 g, err := b.GetGroup(1) 67 if err != nil { 68 t.Fatal(err) 69 } 70 t.Logf("Name: %s", g.Name) 71 t.Logf("Lights: %s", g.Lights) 72 t.Logf("Type: %s", g.Type) 73 t.Logf("GroupState:") 74 t.Logf(" AllOn: %t", g.GroupState.AllOn) 75 t.Logf(" AnyOn: %t", g.GroupState.AnyOn) 76 t.Logf("Recycle: %t", g.Recycle) 77 t.Logf("Class: %s", g.Class) 78 t.Logf("State:") 79 t.Logf(" On: %t", g.State.On) 80 t.Logf(" Bri: %d", g.State.Bri) 81 t.Logf(" Hue: %d", g.State.Hue) 82 t.Logf(" Sat: %d", g.State.Sat) 83 t.Logf(" Xy: %b", g.State.Xy) 84 t.Logf(" Ct: %d", g.State.Ct) 85 t.Logf(" Alert: %s", g.State.Alert) 86 t.Logf(" Effect: %s", g.State.Effect) 87 t.Logf(" TransitionTime: %d", g.State.TransitionTime) 88 t.Logf(" BriInc: %d", g.State.BriInc) 89 t.Logf(" SatInc: %d", g.State.SatInc) 90 t.Logf(" HueInc: %d", g.State.HueInc) 91 t.Logf(" CtInc: %d", g.State.CtInc) 92 t.Logf(" XyInc: %d", g.State.XyInc) 93 t.Logf(" ColorMode: %s", g.State.ColorMode) 94 t.Logf(" Reachable: %t", g.State.Reachable) 95 t.Logf("ID: %d", g.ID) 96 97 b.Host = badHostname 98 _, err = b.GetGroup(1) 99 assert.NotNil(t, err) 100 } 101 102 func TestGetEntertainmentGroup(t *testing.T) { 103 b := New(hostname, username) 104 g, err := b.GetGroup(3) 105 if err != nil { 106 t.Fatal(err) 107 } 108 if g.Stream.Active() { 109 t.Fatal("group stream should be inactive") 110 } 111 if owner := g.Stream.Owner(); owner != "" { 112 t.Fatalf("group stream should have no owner. got: %s", owner) 113 } 114 115 b = New(hostname, username) 116 g, err = b.GetGroup(4) 117 if err != nil { 118 t.Fatal(err) 119 } 120 if !g.Stream.Active() { 121 t.Fatal("group stream should be active") 122 } 123 if want, owner := "QZTPWY1ADZDM8IG188LBVOB5YV5O5OPZNCKTQPQB", g.Stream.Owner(); owner != want { 124 t.Fatalf("group stream should have owner. got: %s, want :%s", owner, want) 125 } 126 127 b = New(hostname, username) 128 g, err = b.GetGroup(2) 129 if err != nil { 130 t.Fatal(err) 131 } 132 g.Stream = &Stream{} 133 if g.Stream.Active() { 134 t.Fatal("group stream should be inactive") 135 } 136 if owner := g.Stream.Owner(); owner != "" { 137 t.Fatalf("group stream should have no owner. got: %s", owner) 138 } 139 } 140 141 func TestCreateGroup(t *testing.T) { 142 b := New(hostname, username) 143 group := Group{ 144 Name: "TestGroup", 145 Type: "Room", 146 Class: "Office", 147 Lights: []string{}, 148 } 149 resp, err := b.CreateGroup(group) 150 if err != nil { 151 t.Fatal(err) 152 } else { 153 t.Logf("Group created") 154 for k, v := range resp.Success { 155 t.Logf("%v: %s", k, v) 156 } 157 } 158 159 b.Host = badHostname 160 _, err = b.CreateGroup(group) 161 assert.NotNil(t, err) 162 163 } 164 165 func TestUpdateGroup(t *testing.T) { 166 b := New(hostname, username) 167 id := 1 168 group := Group{ 169 Name: "TestGroup (Updated)", 170 Class: "Office", 171 } 172 resp, err := b.UpdateGroup(id, group) 173 if err != nil { 174 t.Fatal(err) 175 } else { 176 t.Logf("Updated group with id %d", id) 177 for k, v := range resp.Success { 178 t.Logf("%v: %s", k, v) 179 } 180 } 181 182 b.Host = badHostname 183 _, err = b.UpdateGroup(id, group) 184 assert.NotNil(t, err) 185 186 } 187 188 func TestSetGroupState(t *testing.T) { 189 b := New(hostname, username) 190 id := 1 191 state := State{ 192 On: true, 193 Bri: 150, 194 Sat: 210, 195 } 196 resp, err := b.SetGroupState(id, state) 197 if err != nil { 198 t.Fatal(err) 199 } else { 200 t.Logf("Group state set") 201 for k, v := range resp.Success { 202 t.Logf("%v: %s", k, v) 203 } 204 } 205 206 b.Host = badHostname 207 _, err = b.SetGroupState(id, state) 208 assert.NotNil(t, err) 209 } 210 211 func TestRenameGroup(t *testing.T) { 212 bridge := New(hostname, username) 213 id := 1 214 group, err := bridge.GetGroup(id) 215 if err != nil { 216 t.Fatal(err) 217 } 218 newName := "MyGroup (renamed)" 219 err = group.Rename(newName) 220 if err != nil { 221 t.Fatal(err) 222 } 223 t.Logf("Group renamed to %s", group.Name) 224 225 bridge.Host = badHostname 226 err = group.Rename(newName) 227 assert.NotNil(t, err) 228 229 } 230 231 func TestTurnOffGroup(t *testing.T) { 232 b := New(hostname, username) 233 id := 1 234 group, err := b.GetGroup(id) 235 if err != nil { 236 t.Fatal(err) 237 } 238 err = group.Off() 239 if err != nil { 240 t.Fatal(err) 241 } 242 t.Logf("Turned off group with id %d", group.ID) 243 t.Logf("Group IsOn: %t", group.State.On) 244 245 b.Host = badHostname 246 err = group.Off() 247 assert.NotNil(t, err) 248 249 } 250 251 func TestTurnOnGroup(t *testing.T) { 252 b := New(hostname, username) 253 id := 1 254 group, err := b.GetGroup(id) 255 if err != nil { 256 t.Fatal(err) 257 } 258 err = group.On() 259 if err != nil { 260 t.Fatal(err) 261 } 262 t.Logf("Turned on group with id %d", group.ID) 263 t.Logf("Group IsOn: %t", group.State.On) 264 265 b.Host = badHostname 266 err = group.On() 267 assert.NotNil(t, err) 268 } 269 270 func TestIfGroupIsOn(t *testing.T) { 271 b := New(hostname, username) 272 id := 1 273 group, err := b.GetGroup(id) 274 if err != nil { 275 t.Fatal(err) 276 } 277 t.Logf("Is group %d on?: %t", group.ID, group.IsOn()) 278 } 279 280 func TestSetGroupBri(t *testing.T) { 281 b := New(hostname, username) 282 id := 1 283 group, err := b.GetGroup(id) 284 if err != nil { 285 t.Fatal(err) 286 } 287 err = group.Bri(254) 288 if err != nil { 289 t.Fatal(err) 290 } 291 t.Logf("Brightness of group %d set to %d", group.ID, group.State.Bri) 292 293 b.Host = badHostname 294 err = group.Bri(254) 295 assert.NotNil(t, err) 296 } 297 298 func TestSetGroupHue(t *testing.T) { 299 b := New(hostname, username) 300 id := 1 301 group, err := b.GetGroup(id) 302 if err != nil { 303 t.Fatal(err) 304 } 305 err = group.Hue(65535) 306 if err != nil { 307 t.Fatal(err) 308 } 309 t.Logf("Hue of group %d set to %d", group.ID, group.State.Hue) 310 311 b.Host = badHostname 312 err = group.Hue(65535) 313 assert.NotNil(t, err) 314 } 315 316 func TestSetGroupSat(t *testing.T) { 317 b := New(hostname, username) 318 id := 1 319 group, err := b.GetGroup(id) 320 if err != nil { 321 t.Fatal(err) 322 } 323 err = group.Sat(254) 324 if err != nil { 325 t.Fatal(err) 326 } 327 t.Logf("Sat of group %d set to %d", group.ID, group.State.Sat) 328 329 b.Host = badHostname 330 err = group.Sat(254) 331 assert.NotNil(t, err) 332 } 333 334 func TestSetGroupXy(t *testing.T) { 335 b := New(hostname, username) 336 id := 1 337 group, err := b.GetGroup(id) 338 if err != nil { 339 t.Fatal(err) 340 } 341 xy := []float32{0.1, 0.5} 342 err = group.Xy(xy) 343 if err != nil { 344 t.Fatal(err) 345 } 346 t.Logf("Xy of group %d set to %v", group.ID, group.State.Xy) 347 348 b.Host = badHostname 349 err = group.Xy(xy) 350 assert.NotNil(t, err) 351 } 352 353 func TestSetGroupCol(t *testing.T) { 354 b := New(hostname, username) 355 id := 1 356 group, err := b.GetGroup(id) 357 if err != nil { 358 t.Fatal(err) 359 } 360 color := color.RGBA{R: 0xff, G: 0x00, B: 0x00, A: 0xFF} 361 err = group.Col(color) 362 if err != nil { 363 t.Fatal(err) 364 } 365 t.Logf("Col of group %d set to xy: %v", group.ID, group.State.Xy) 366 367 b.Host = badHostname 368 err = group.Col(color) 369 assert.NotNil(t, err) 370 } 371 372 func TestSetGroupCt(t *testing.T) { 373 b := New(hostname, username) 374 id := 1 375 group, err := b.GetGroup(id) 376 if err != nil { 377 t.Fatal(err) 378 } 379 err = group.Ct(16) 380 if err != nil { 381 t.Fatal(err) 382 } 383 t.Logf("Ct of group %d set to %d", group.ID, group.State.Ct) 384 385 b.Host = badHostname 386 err = group.Ct(16) 387 assert.NotNil(t, err) 388 } 389 390 func TestSetGroupScene(t *testing.T) { 391 b := New(hostname, username) 392 id := 1 393 group, err := b.GetGroup(id) 394 if err != nil { 395 t.Fatal(err) 396 } 397 scene := "2hgE1nGaITvy9VQ" 398 err = group.Scene(scene) 399 if err != nil { 400 t.Fatal(err) 401 } 402 t.Logf("Scene of group %d set to %s", group.ID, group.State.Scene) 403 404 b.Host = badHostname 405 err = group.Scene(scene) 406 assert.NotNil(t, err) 407 } 408 409 func TestSetGroupTransitionTime(t *testing.T) { 410 b := New(hostname, username) 411 id := 1 412 group, err := b.GetGroup(id) 413 if err != nil { 414 t.Fatal(err) 415 } 416 err = group.TransitionTime(10) 417 if err != nil { 418 t.Fatal(err) 419 } 420 t.Logf("TransitionTime of group %d set to %d", group.ID, group.State.TransitionTime) 421 422 b.Host = badHostname 423 err = group.TransitionTime(10) 424 assert.NotNil(t, err) 425 } 426 427 func TestSetGroupEffect(t *testing.T) { 428 b := New(hostname, username) 429 id := 1 430 group, err := b.GetGroup(id) 431 if err != nil { 432 t.Fatal(err) 433 } 434 err = group.Effect("colorloop") 435 if err != nil { 436 t.Fatal(err) 437 } 438 t.Logf("Effect of group %d set to %s", group.ID, group.State.Effect) 439 440 b.Host = badHostname 441 err = group.Effect("colorloop") 442 assert.NotNil(t, err) 443 } 444 445 func TestSetGroupAlert(t *testing.T) { 446 b := New(hostname, username) 447 id := 1 448 group, err := b.GetGroup(id) 449 if err != nil { 450 t.Fatal(err) 451 } 452 err = group.Alert("lselect") 453 if err != nil { 454 t.Fatal(err) 455 } 456 t.Logf("Alert of group %d set to %s", group.ID, group.State.Alert) 457 458 b.Host = badHostname 459 err = group.Alert("lselect") 460 assert.NotNil(t, err) 461 } 462 463 func TestSetStateGroup(t *testing.T) { 464 b := New(hostname, username) 465 id := 1 466 group, err := b.GetGroup(id) 467 if err != nil { 468 t.Fatal(err) 469 } 470 state := State{ 471 On: true, 472 Bri: 254, 473 } 474 err = group.SetState(state) 475 if err != nil { 476 t.Fatal(err) 477 } 478 t.Logf("State set successfully on group %d", id) 479 480 b.Host = badHostname 481 err = group.SetState(state) 482 assert.NotNil(t, err) 483 } 484 485 func TestDeleteGroup(t *testing.T) { 486 b := New(hostname, username) 487 id := 1 488 err := b.DeleteGroup(id) 489 if err != nil { 490 t.Fatal(err) 491 } else { 492 t.Logf("Deleted group with id: %d", id) 493 } 494 } 495 496 func TestEnableStreamingGroup(t *testing.T) { 497 bridge := New(hostname, username) 498 id := 3 499 group, err := bridge.GetGroup(id) 500 if err != nil { 501 t.Fatal(err) 502 } 503 err = group.EnableStreaming() 504 if err != nil { 505 t.Fatal(err) 506 } 507 508 id = 2 509 group, err = bridge.GetGroup(id) 510 if err != nil { 511 t.Fatal(err) 512 } 513 err = group.EnableStreaming() 514 if err == nil { 515 t.Fatal("error was nil") 516 } else if errString := err.Error(); errString != "must be an entertainment group to enable streaming" { 517 t.Fatalf("incorrect error: %s", errString) 518 } 519 520 id = 5 521 group, err = bridge.GetGroup(id) 522 if err != nil { 523 t.Fatal(err) 524 } 525 err = group.EnableStreaming() 526 if err == nil { 527 t.Fatal("error was nil") 528 } else if errString := err.Error(); errString != "ERROR 307 [/groups/5/stream/active]: \"Cannot claim stream ownership\"" { 529 t.Fatalf("incorrect error: %s", errString) 530 } 531 } 532 533 func TestDisableStreamingGroup(t *testing.T) { 534 bridge := New(hostname, username) 535 id := 3 536 group, err := bridge.GetGroup(id) 537 if err != nil { 538 t.Fatal(err) 539 } 540 err = group.DisableStreaming() 541 if err != nil { 542 t.Fatal(err) 543 } 544 545 id = 2 546 group, err = bridge.GetGroup(id) 547 if err != nil { 548 t.Fatal(err) 549 } 550 err = group.DisableStreaming() 551 if err == nil { 552 t.Fatal("error was nil") 553 } else if errString := err.Error(); errString != "must be an entertainment group to disable streaming" { 554 t.Fatalf("incorrect error %s", errString) 555 } 556 557 id = 6 558 group, err = bridge.GetGroup(id) 559 if err != nil { 560 t.Fatal(err) 561 } 562 err = group.DisableStreaming() 563 if err == nil { 564 t.Fatal("error was nil") 565 } else if errString := err.Error(); errString != "ERROR 999 [/groups/6/stream/active]: \"unspecified error\"" { 566 t.Fatalf("incorrect error %s", errString) 567 } 568 }