github.com/amimof/huego@v1.2.1/light_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 TestGetLights(t *testing.T) {
    11  	b := New(hostname, username)
    12  	lights, err := b.GetLights()
    13  	if err != nil {
    14  		t.Fatal(err)
    15  	}
    16  	t.Logf("Found %d lights", len(lights))
    17  	for _, l := range lights {
    18  		t.Logf("ID: %d", l.ID)
    19  		t.Logf("  Type: %s", l.Type)
    20  		t.Logf("  Name: %s", l.Name)
    21  		t.Logf("  ModelID: %s", l.ModelID)
    22  		t.Logf("  ManufacturerName: %s", l.ManufacturerName)
    23  		t.Logf("  UniqueID: %s", l.UniqueID)
    24  		t.Logf("  SwVersion: %s", l.SwVersion)
    25  		t.Logf("  SwConfigID: %s", l.SwConfigID)
    26  		t.Logf("  ProductName: %s", l.ProductName)
    27  	}
    28  	contains := func(name string, ss []Light) bool {
    29  		for _, s := range ss {
    30  			if s.Name == name {
    31  				return true
    32  			}
    33  		}
    34  		return false
    35  	}
    36  
    37  	assert.True(t, contains("Huecolorlamp7", lights))
    38  	assert.True(t, contains("Huelightstripplus1", lights))
    39  
    40  	b.Host = badHostname
    41  	_, err = b.GetLights()
    42  	assert.NotNil(t, err)
    43  }
    44  
    45  func TestGetLight(t *testing.T) {
    46  	b := New(hostname, username)
    47  	l, err := b.GetLight(1)
    48  	if err != nil {
    49  		t.Fatal(err)
    50  	} else {
    51  		t.Logf("ID: %d", l.ID)
    52  		t.Logf("Type: %s", l.Type)
    53  		t.Logf("Name: %s", l.Name)
    54  		t.Logf("ModelID: %s", l.ModelID)
    55  		t.Logf("ManufacturerName: %s", l.ManufacturerName)
    56  		t.Logf("UniqueID: %s", l.UniqueID)
    57  		t.Logf("SwVersion: %s", l.SwVersion)
    58  		t.Logf("SwConfigID: %s", l.SwConfigID)
    59  		t.Logf("ProductName: %s", l.ProductName)
    60  		t.Logf("State:")
    61  		t.Logf("  On: %t", l.State.On)
    62  		t.Logf("  Bri: %d", l.State.Bri)
    63  		t.Logf("  Hue: %d", l.State.Hue)
    64  		t.Logf("  Sat: %d", l.State.Sat)
    65  		t.Logf("  Xy: %b", l.State.Xy)
    66  		t.Logf("  Ct: %d", l.State.Ct)
    67  		t.Logf("  Alert: %s", l.State.Alert)
    68  		t.Logf("  Effect: %s", l.State.Effect)
    69  		t.Logf("  TransitionTime: %d", l.State.TransitionTime)
    70  		t.Logf("  BriInc: %d", l.State.BriInc)
    71  		t.Logf("  SatInc: %d", l.State.SatInc)
    72  		t.Logf("  HueInc: %d", l.State.HueInc)
    73  		t.Logf("  CtInc: %d", l.State.CtInc)
    74  		t.Logf("  XyInc: %d", l.State.XyInc)
    75  		t.Logf("  ColorMode: %s", l.State.ColorMode)
    76  		t.Logf("  Reachable: %t", l.State.Reachable)
    77  	}
    78  
    79  	b.Host = badHostname
    80  	_, err = b.GetLight(1)
    81  	assert.NotNil(t, err)
    82  
    83  }
    84  
    85  func TestIdentifyLight(t *testing.T) {
    86  	b := New(hostname, username)
    87  	id := 2
    88  	resp, err := b.IdentifyLight(id)
    89  	if err != nil {
    90  		t.Fatal(err)
    91  	} else {
    92  		t.Logf("Light %d identified", id)
    93  		for k, v := range resp.Success {
    94  			t.Logf("%v: %s", k, v)
    95  		}
    96  	}
    97  
    98  	b.Host = badHostname
    99  	_, err = b.IdentifyLight(id)
   100  	assert.NotNil(t, err)
   101  }
   102  
   103  func TestSetLight(t *testing.T) {
   104  	b := New(hostname, username)
   105  	id := 1
   106  	state := State{
   107  		On:  true,
   108  		Bri: 254,
   109  	}
   110  	resp, err := b.SetLightState(id, state)
   111  	if err != nil {
   112  		t.Fatal(err)
   113  	} else {
   114  		t.Logf("Light %d state updated", id)
   115  		for k, v := range resp.Success {
   116  			t.Logf("%v: %s", k, v)
   117  		}
   118  	}
   119  
   120  	b.Host = badHostname
   121  	_, err = b.SetLightState(id, state)
   122  	assert.NotNil(t, err)
   123  }
   124  
   125  func TestFindLights(t *testing.T) {
   126  	b := New(hostname, username)
   127  	resp, err := b.FindLights()
   128  	if err != nil {
   129  		t.Fatal(err)
   130  	} else {
   131  		for k, v := range resp.Success {
   132  			t.Logf("%v: %s", k, v)
   133  		}
   134  	}
   135  
   136  	b.Host = badHostname
   137  	_, err = b.FindLights()
   138  	assert.NotNil(t, err)
   139  }
   140  
   141  func TestUpdateLight(t *testing.T) {
   142  	b := New(hostname, username)
   143  	id := 1
   144  	light := Light{
   145  		Name: "New Light",
   146  	}
   147  	resp, err := b.UpdateLight(id, light)
   148  	if err != nil {
   149  		t.Fatal(err)
   150  	} else {
   151  		t.Logf("Light %d updated", id)
   152  		for k, v := range resp.Success {
   153  			t.Logf("%v: %s", k, v)
   154  		}
   155  	}
   156  	b.Host = badHostname
   157  	_, err = b.UpdateLight(id, light)
   158  	assert.NotNil(t, err)
   159  }
   160  
   161  func TestTurnOffLight(t *testing.T) {
   162  	b := New(hostname, username)
   163  	id := 1
   164  	light, err := b.GetLight(id)
   165  	if err != nil {
   166  		t.Fatal(err)
   167  	}
   168  	err = light.Off()
   169  	if err != nil {
   170  		t.Fatal(err)
   171  	}
   172  	assert.False(t, light.IsOn())
   173  	t.Logf("Turned off light with id %d", light.ID)
   174  
   175  	b.Host = badHostname
   176  	err = light.Off()
   177  	assert.NotNil(t, err)
   178  }
   179  
   180  func TestTurnOnLight(t *testing.T) {
   181  	b := New(hostname, username)
   182  	id := 1
   183  	light, err := b.GetLight(id)
   184  	if err != nil {
   185  		t.Fatal(err)
   186  	}
   187  	err = light.On()
   188  	if err != nil {
   189  		t.Fatal(err)
   190  	}
   191  	assert.True(t, light.IsOn())
   192  	t.Logf("Turned on light with id %d", light.ID)
   193  
   194  	b.Host = badHostname
   195  	err = light.On()
   196  	assert.NotNil(t, err)
   197  }
   198  
   199  func TestIfLightIsOn(t *testing.T) {
   200  	b := New(hostname, username)
   201  	id := 1
   202  	light, err := b.GetLight(id)
   203  	if err != nil {
   204  		t.Fatal(err)
   205  	}
   206  	t.Logf("Is light %d on?: %t", light.ID, light.IsOn())
   207  }
   208  
   209  func TestRenameLight(t *testing.T) {
   210  	b := New(hostname, username)
   211  	id := 1
   212  	light, err := b.GetLight(id)
   213  	if err != nil {
   214  		t.Fatal(err)
   215  	}
   216  	name := "Color Lamp 1"
   217  	err = light.Rename(name)
   218  	if err != nil {
   219  		t.Fatal(err)
   220  	}
   221  	t.Logf("Renamed light to '%s'", light.Name)
   222  
   223  	b.Host = badHostname
   224  	err = light.Rename(name)
   225  	assert.NotNil(t, err)
   226  }
   227  
   228  func TestSetLightBri(t *testing.T) {
   229  	b := New(hostname, username)
   230  	id := 1
   231  	light, err := b.GetLight(id)
   232  	if err != nil {
   233  		t.Fatal(err)
   234  	}
   235  	err = light.Bri(254)
   236  	if err != nil {
   237  		t.Fatal(err)
   238  	}
   239  	assert.True(t, light.IsOn())
   240  	t.Logf("Brightness of light %d set to %d", light.ID, light.State.Bri)
   241  
   242  	b.Host = badHostname
   243  	err = light.Bri(254)
   244  	assert.NotNil(t, err)
   245  }
   246  
   247  func TestSetLightHue(t *testing.T) {
   248  	b := New(hostname, username)
   249  	id := 1
   250  	light, err := b.GetLight(id)
   251  	if err != nil {
   252  		t.Fatal(err)
   253  	}
   254  	err = light.Hue(65535)
   255  	if err != nil {
   256  		t.Fatal(err)
   257  	}
   258  	assert.True(t, light.IsOn())
   259  	t.Logf("Hue of light %d set to %d", light.ID, light.State.Hue)
   260  
   261  	b.Host = badHostname
   262  	err = light.Hue(65535)
   263  	assert.NotNil(t, err)
   264  }
   265  
   266  func TestSetLightSat(t *testing.T) {
   267  	b := New(hostname, username)
   268  	id := 1
   269  	light, err := b.GetLight(id)
   270  	if err != nil {
   271  		t.Fatal(err)
   272  	}
   273  	err = light.Sat(254)
   274  	if err != nil {
   275  		t.Fatal(err)
   276  	}
   277  	assert.True(t, light.IsOn())
   278  	t.Logf("Sat of light %d set to %d", light.ID, light.State.Sat)
   279  
   280  	b.Host = badHostname
   281  	err = light.Sat(254)
   282  	assert.NotNil(t, err)
   283  }
   284  
   285  func TestSetLightXy(t *testing.T) {
   286  	b := New(hostname, username)
   287  	id := 1
   288  	light, err := b.GetLight(id)
   289  	if err != nil {
   290  		t.Fatal(err)
   291  	}
   292  	xy := []float32{0.1, 0.5}
   293  	err = light.Xy(xy)
   294  	if err != nil {
   295  		t.Fatal(err)
   296  	}
   297  	assert.True(t, light.IsOn())
   298  	t.Logf("Xy of light %d set to %+v", light.ID, light.State.Xy)
   299  
   300  	b.Host = badHostname
   301  	err = light.Xy(xy)
   302  	assert.NotNil(t, err)
   303  }
   304  
   305  func TestSetLightCt(t *testing.T) {
   306  	b := New(hostname, username)
   307  	id := 1
   308  	light, err := b.GetLight(id)
   309  	if err != nil {
   310  		t.Fatal(err)
   311  	}
   312  	err = light.Ct(16)
   313  	if err != nil {
   314  		t.Fatal(err)
   315  	}
   316  	assert.True(t, light.IsOn())
   317  	t.Logf("Ct of light %d set to %d", light.ID, light.State.Ct)
   318  
   319  	b.Host = badHostname
   320  	err = light.Ct(16)
   321  	assert.NotNil(t, err)
   322  }
   323  
   324  func TestSetLightColor(t *testing.T) {
   325  	b := New(hostname, username)
   326  	id := 1
   327  	light, err := b.GetLight(id)
   328  	if err != nil {
   329  		t.Fatal(err)
   330  	}
   331  	color := color.RGBA{R: 0xff, G: 0x00, B: 0x00, A: 0xFF}
   332  	err = light.Col(color)
   333  	if err != nil {
   334  		t.Fatal(err)
   335  	}
   336  	assert.True(t, light.IsOn())
   337  	t.Logf("Col of light %d set to xy: %+v", light.ID, light.State.Xy)
   338  
   339  	b.Host = badHostname
   340  	err = light.Col(color)
   341  	assert.NotNil(t, err)
   342  }
   343  
   344  func TestSetLightTransitionTime(t *testing.T) {
   345  	b := New(hostname, username)
   346  	id := 1
   347  	light, err := b.GetLight(id)
   348  	if err != nil {
   349  		t.Fatal(err)
   350  	}
   351  	err = light.TransitionTime(10)
   352  	if err != nil {
   353  		t.Fatal(err)
   354  	}
   355  	t.Logf("TransitionTime of light %d set to %d", light.ID, light.State.TransitionTime)
   356  
   357  	b.Host = badHostname
   358  	err = light.TransitionTime(10)
   359  	assert.NotNil(t, err)
   360  }
   361  
   362  func TestSetLightEffect(t *testing.T) {
   363  	b := New(hostname, username)
   364  	id := 1
   365  	light, err := b.GetLight(id)
   366  	if err != nil {
   367  		t.Fatal(err)
   368  	}
   369  	err = light.Effect("colorloop")
   370  	if err != nil {
   371  		t.Fatal(err)
   372  	}
   373  	assert.True(t, light.IsOn())
   374  	t.Logf("Effect of light %d set to %s", light.ID, light.State.Effect)
   375  
   376  	b.Host = badHostname
   377  	err = light.Effect("colorloop")
   378  	assert.NotNil(t, err)
   379  }
   380  
   381  func TestSetLightAlert(t *testing.T) {
   382  	b := New(hostname, username)
   383  	id := 1
   384  	light, err := b.GetLight(id)
   385  	if err != nil {
   386  		t.Fatal(err)
   387  	}
   388  	err = light.Alert("lselect")
   389  	if err != nil {
   390  		t.Fatal(err)
   391  	}
   392  	assert.True(t, light.IsOn())
   393  	t.Logf("Alert of light %d set to %s", light.ID, light.State.Alert)
   394  
   395  	b.Host = badHostname
   396  	err = light.Alert("lselect")
   397  	assert.NotNil(t, err)
   398  }
   399  
   400  func TestSetStateLight(t *testing.T) {
   401  	b := New(hostname, username)
   402  	id := 1
   403  	light, err := b.GetLight(id)
   404  	if err != nil {
   405  		t.Fatal(err)
   406  	}
   407  	state := State{
   408  		On:  true,
   409  		Bri: 254,
   410  	}
   411  	err = light.SetState(state)
   412  	if err != nil {
   413  		t.Fatal(err)
   414  	}
   415  	t.Logf("State set successfully on light %d", id)
   416  
   417  	b.Host = badHostname
   418  	err = light.SetState(state)
   419  	assert.NotNil(t, err)
   420  }
   421  
   422  func TestConvertRGBToXY(t *testing.T) {
   423  	color := color.RGBA{R: 0xff, G: 0x00, B: 0x00, A: 0xFF}
   424  	xy, brightness := ConvertRGBToXy(color)
   425  
   426  	assert.Greater(t, xy[0], float32(0))
   427  	assert.Greater(t, xy[1], float32(0))
   428  	assert.Greater(t, brightness, uint8(0))
   429  
   430  	t.Logf("Xy of light %+v set to xy: %+v, bright: %d ", color, xy, brightness)
   431  }