github.com/amimof/huego@v1.2.1/rule_test.go (about)

     1  package huego
     2  
     3  import (
     4  	"github.com/stretchr/testify/assert"
     5  	"testing"
     6  )
     7  
     8  func TestGetRules(t *testing.T) {
     9  	b := New(hostname, username)
    10  	rules, err := b.GetRules()
    11  	if err != nil {
    12  		t.Fatal(err)
    13  	}
    14  	t.Logf("Found %d rules", len(rules))
    15  	for _, rule := range rules {
    16  		t.Log(rule)
    17  	}
    18  
    19  	contains := func(name string, ss []*Rule) bool {
    20  		for _, s := range ss {
    21  			if s.Name == name {
    22  				return true
    23  			}
    24  		}
    25  		return false
    26  	}
    27  
    28  	assert.True(t, contains("Wall Switch Rule", rules))
    29  	assert.True(t, contains("Wall Switch Rule 2", rules))
    30  
    31  	b.Host = badHostname
    32  	_, err = b.GetRules()
    33  	assert.NotNil(t, err)
    34  }
    35  
    36  func TestGetRule(t *testing.T) {
    37  	b := New(hostname, username)
    38  	l, err := b.GetRule(1)
    39  	if err != nil {
    40  		t.Fatal(err)
    41  	} else {
    42  		t.Log(l)
    43  	}
    44  
    45  	b.Host = badHostname
    46  	_, err = b.GetRule(1)
    47  	assert.NotNil(t, err)
    48  }
    49  
    50  func TestCreateRule(t *testing.T) {
    51  	b := New(hostname, username)
    52  	conditions := []*Condition{
    53  		{
    54  			Address:  "/sensors/2/state/buttonevent",
    55  			Operator: "eq",
    56  			Value:    "16",
    57  		},
    58  	}
    59  	actions := []*RuleAction{
    60  		{
    61  			Address: "/groups/0/action",
    62  			Method:  "PUT",
    63  			Body:    &State{On: true},
    64  		},
    65  	}
    66  	rule := &Rule{
    67  		Name:       "Huego Test Rule",
    68  		Conditions: conditions,
    69  		Actions:    actions,
    70  	}
    71  	resp, err := b.CreateRule(rule)
    72  	if err != nil {
    73  		t.Fatal(err)
    74  	} else {
    75  		t.Logf("Rule created")
    76  		for k, v := range resp.Success {
    77  			t.Logf("%v: %s", k, v)
    78  		}
    79  	}
    80  
    81  	b.Host = badHostname
    82  	_, err = b.CreateRule(rule)
    83  	assert.NotNil(t, err)
    84  }
    85  
    86  func TestUpdateRule(t *testing.T) {
    87  	b := New(hostname, username)
    88  	id := 1
    89  	rule := &Rule{
    90  		Actions: []*RuleAction{
    91  			{
    92  				Address: "/groups/1/action",
    93  				Method:  "PUT",
    94  				Body:    &State{On: true},
    95  			},
    96  		},
    97  	}
    98  	resp, err := b.UpdateRule(id, rule)
    99  	if err != nil {
   100  		t.Fatal(err)
   101  	} else {
   102  		t.Logf("Rule %d updated", id)
   103  		for k, v := range resp.Success {
   104  			t.Logf("%v: %s", k, v)
   105  		}
   106  	}
   107  	b.Host = badHostname
   108  	_, err = b.UpdateRule(id, rule)
   109  	assert.NotNil(t, err)
   110  }
   111  
   112  func TestDeleteRule(t *testing.T) {
   113  	b := New(hostname, username)
   114  	id := 1
   115  	err := b.DeleteRule(id)
   116  	if err != nil {
   117  		t.Fatal(err)
   118  	} else {
   119  		t.Logf("Rule %d deleted", id)
   120  	}
   121  }