rzwaveway 0.0.11 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ module RZWaveWay
4
+ describe Event do
5
+ describe '#new' do
6
+ it 'enforces a non-nil argument' do
7
+ expect { Event.new(nil) }
8
+ .to raise_error ArgumentError
9
+ end
10
+
11
+ it 'requires a device id' do
12
+ expect { Event.new(foo: 'bar') }
13
+ .to raise_error ArgumentError
14
+ end
15
+
16
+ it 'adds a time if none is provided' do
17
+ event = AliveDevice.new(device_id: 123)
18
+ expect(event[:time]).not_to be_nil
19
+ end
20
+
21
+ it 'keeps the existing time if provided' do
22
+ event = Event.new(device_id: 123, time: 1472373723)
23
+ expect(event[:time]).to eq 1472373723
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+ module RZWaveWay
4
+ describe Property do
5
+ let(:property) { Property.new(value: 123, update_time: 0) }
6
+
7
+ describe '#changed?' do
8
+ it 'returns false when no change is performed on property' do
9
+ expect(property.changed?).to eq false
10
+
11
+ property.update(123, 10)
12
+ expect(property.changed?).to eq false
13
+ end
14
+
15
+ it 'returns true when the value is changed' do
16
+ property.update(456, 0)
17
+ expect(property.changed?).to eq true
18
+ end
19
+ end
20
+
21
+ describe '#read_only?' do
22
+ it 'is false when not specified' do
23
+ expect(property.read_only?).to eq false
24
+ end
25
+
26
+ it 'is true when specified to true' do
27
+ special_property = Property.new(value: 456, update_time: 0, read_only: true)
28
+ expect(special_property.read_only?).to eq true
29
+ end
30
+ end
31
+
32
+ describe '#save' do
33
+ it '"applies/persists" the value update' do
34
+ property.update(456, 10)
35
+ property.save
36
+ expect(property.changed?).to eq false
37
+ end
38
+ end
39
+
40
+ describe '#to_hash' do
41
+ it 'returns a hash with value, update time and read-only' do
42
+ hash = property.to_hash
43
+ expect(hash.class).to eq Hash
44
+ expect(hash.keys).to include(:value, :read_only, :update_time)
45
+ end
46
+ end
47
+
48
+ describe '#update' do
49
+ it 'updates the value and update time' do
50
+ property.update(456, 10)
51
+ expect(property.value).to eq 456
52
+ expect(property.update_time).to eq 10
53
+ end
54
+
55
+ it 'updates the update time' do
56
+ property.update(123, 10)
57
+ expect(property.update_time).to eq 10
58
+ end
59
+
60
+ it 'does not update with a past value' do
61
+ property.update(0, -10)
62
+ expect(property.value).to eq 123
63
+ expect(property.update_time).to eq 0
64
+ end
65
+
66
+ it 'does not update the value and time' do
67
+ property.update(123, 0)
68
+ expect(property.value).to eq 123
69
+ expect(property.update_time).to eq 0
70
+ end
71
+
72
+ it 'returns true when the value is changed' do
73
+ result = property.update(456, 10)
74
+ expect(result).to eq true
75
+ end
76
+
77
+ it 'returns false when the value is unchanged' do
78
+ result = property.update(123, 10)
79
+ expect(result).to eq false
80
+ end
81
+ end
82
+ end
83
+ end
@@ -1,3 +1,4 @@
1
+ require 'pry-byebug'
1
2
  require 'rzwaveway'
2
3
  require 'securerandom'
3
4
 
@@ -10,9 +11,19 @@ module SpecHelpers
10
11
  {
11
12
  'data' => {
12
13
  'givenName' => {
13
- 'value' => 'device name'
14
- },
14
+ 'value' => 'device name',
15
+ 'updateTime' => 0
16
+ },
17
+ 'failureCount' => {
18
+ 'value' => 0,
19
+ 'updateTime' => 0
20
+ },
21
+ 'isFailed' => {
22
+ 'value' => false,
23
+ 'updateTime' => 0
24
+ },
15
25
  'lastReceived' => {
26
+ 'value' => 0,
16
27
  'updateTime' => last_contact_time
17
28
  },
18
29
  'lastSend' => {
@@ -2,7 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  module RZWaveWay
4
4
  describe ZWaveDevice do
5
- let(:now) { Time.now }
6
5
  let(:device) do
7
6
  ZWaveDevice.new(create_id,
8
7
  create_device_data({CommandClass::WAKEUP =>
@@ -15,6 +14,7 @@ module RZWaveWay
15
14
  }
16
15
  }))
17
16
  end
17
+ let(:ac_powered_device) { ZWaveDevice.new(create_id, create_device_data({}, 1390252000)) }
18
18
 
19
19
  describe '#new' do
20
20
  it 'sets last contact time from data (wake up command class)' do
@@ -34,37 +34,20 @@ module RZWaveWay
34
34
  expect(battery_device.last_contact_time).to eq 1390252000
35
35
  end
36
36
 
37
- it 'sets the last contact time from data (device data)' do
38
- ac_powered_device = ZWaveDevice.new(create_id, create_device_data({}, 1390252000))
39
- expect(ac_powered_device.last_contact_time).to eq 1390252000
37
+ it 'sets the failure count' do
38
+ expect(ac_powered_device.failure_count).to eq 0
40
39
  end
41
40
 
42
- it 'sets the name from data' do
43
- expect(device.name).to eq 'device name'
41
+ it 'sets the is failed flag' do
42
+ expect(ac_powered_device.is_failed).to eq false
44
43
  end
45
- end
46
-
47
- describe '#add_property' do
48
- it 'stores a property' do
49
- property = { name: 'prop1', value: 123, update_time: Time.now.to_i, read_only: true }
50
- device.add_property(property)
51
44
 
52
- expect(device.get_property('prop1')).not_to be_nil
53
- end
54
- end
55
-
56
- describe '#properties' do
57
- it 'returns the name and value of all properties' do
58
- device.add_property({ name: 'prop1', value: 123, update_time: 1390252000 })
59
- device.add_property({ name: 'prop2', value: 456, update_time: 1390252000 })
60
-
61
- expect(device.properties).to eq( 'prop1' => { value: 123, update_time: 1390252000, read_only: true },
62
- 'prop2' => { value: 456, update_time: 1390252000, read_only: true })
45
+ it 'sets the last contact time from data (device data)' do
46
+ expect(ac_powered_device.last_contact_time).to eq 1390252000
63
47
  end
64
48
 
65
- it 'does not include internal properties' do
66
- device.add_property({ name: 'prop1', value: 123, update_time: 1390252000, internal: true })
67
- expect(device.properties).to be_empty
49
+ it 'sets the name from data' do
50
+ expect(device.name).to eq 'device name'
68
51
  end
69
52
  end
70
53
 
@@ -110,131 +93,11 @@ module RZWaveWay
110
93
  device.process(updates)
111
94
  expect(device.last_contact_time).to eq 1409490977
112
95
  end
113
-
114
- it 'updates the last contact time (from lastSend)' do
115
- updates = {
116
- 'data.lastSend' => {
117
- 'name' => 'lastSend',
118
- 'value' => 176428709,
119
- 'type' => 'int',
120
- 'invalidateTime' => 1390251561,
121
- 'updateTime' => 1409490970
122
- }
123
- }
124
- device.process(updates)
125
- expect(device.last_contact_time).to eq 1409490970
126
- end
127
-
128
- it 'updates the last contact time' do
129
- updates = {
130
- 'data.lastReceived' => {
131
- 'name' => 'lastReceived',
132
- 'value' => 176428709,
133
- 'type' => 'int',
134
- 'invalidateTime' => 1390251561,
135
- 'updateTime' => 1409490977
136
- },
137
- 'data.lastSend' => {
138
- 'name' => 'lastSend',
139
- 'value' => 176428709,
140
- 'type' => 'int',
141
- 'invalidateTime' => 1390251561,
142
- 'updateTime' => 1409490970
143
- }
144
- }
145
- device.process(updates)
146
- expect(device.last_contact_time).to eq 1409490977
147
- end
148
-
149
- it 'generates an AliveEvent when last contact time got updated' do
150
- device.notify_contacted(now)
151
- updates = {
152
- 'data.lastReceived' => {
153
- 'name' => 'lastReceived',
154
- 'value' => 176428709,
155
- 'type' => 'int',
156
- 'invalidateTime' => 1390251561,
157
- 'updateTime' => now+100
158
- },
159
- 'data.lastSend' => {
160
- 'name' => 'lastSend',
161
- 'value' => 176428709,
162
- 'type' => 'int',
163
- 'invalidateTime' => 1390251561,
164
- 'updateTime' => now+100
165
- }
166
- }
167
- events = device.process(updates)
168
- expect(events.size).to eq 1
169
- event = events.first
170
- expect(event.class).to be AliveEvent
171
- expect(event.device_id).to eq device.id
172
- expect(event.time).to eq (now+100)
173
- end
174
-
175
- it 'does not generate an AliveEvent when last contact time is not updated' do
176
- device.notify_contacted(now)
177
- updates = {
178
- 'data.lastReceived' => {
179
- 'name' => 'lastReceived',
180
- 'value' => 176428709,
181
- 'type' => 'int',
182
- 'invalidateTime' => 1390251561,
183
- 'updateTime' => 1409490970
184
- },
185
- 'data.lastSend' => {
186
- 'name' => 'lastSend',
187
- 'value' => 176428709,
188
- 'type' => 'int',
189
- 'invalidateTime' => 1390251561,
190
- 'updateTime' => 1409490970
191
- }
192
- }
193
- events = device.process(updates)
194
- expect(events.size).to eq 0
195
- end
196
- end
197
-
198
- describe '#process_alive_check' do
199
- it 'generates no event' do
200
- device.notify_contacted(now)
201
- event = device.process_alive_check
202
- expect(event).to be_nil
203
- end
204
-
205
- it 'generates a NotAliveEvent' do
206
- device.notify_contacted(now - 600)
207
- event = device.process_alive_check
208
- expect(event.class).to be NotAliveEvent
209
- expect(event.device_id).to eq device.id
210
- end
211
-
212
- it 'does not generate a NotAliveEvent at each check' do
213
- device.notify_contacted(now - 600)
214
- event = device.process_alive_check
215
- event = device.process_alive_check
216
- expect(event).to be_nil
217
- end
218
-
219
- it 'generates a DeadEvent' do
220
- device.notify_contacted(now - 6000)
221
- event = device.process_alive_check
222
- expect(event.class).to be DeadEvent
223
- expect(event.device_id).to eq device.id
224
- end
225
-
226
- it 'does not generate a DeadEvent multiple times' do
227
- device.notify_contacted(now - 6000)
228
- event = device.process_alive_check
229
- event = device.process_alive_check
230
- expect(event).to be_nil
231
- end
232
96
  end
233
97
 
234
- describe '#to_json' do
235
- it 'returns json' do
236
- json = device.to_json
237
- expect(json.size).not_to eq 0
98
+ describe '#to_hash' do
99
+ it 'returns a Hash' do
100
+ expect(device.to_hash.class).to eq Hash
238
101
  end
239
102
  end
240
103
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rzwaveway
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vincent Touchard
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 3.0.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry-byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: A Ruby API to use the Razberry ZWave ZWay interface
84
98
  email: touchardv@yahoo.com
85
99
  executables: []
@@ -93,6 +107,8 @@ files:
93
107
  - lib/rzwaveway.rb
94
108
  - lib/rzwaveway/command_class.rb
95
109
  - lib/rzwaveway/command_classes.rb
110
+ - lib/rzwaveway/command_classes/alarm.rb
111
+ - lib/rzwaveway/command_classes/alarm_sensor.rb
96
112
  - lib/rzwaveway/command_classes/battery.rb
97
113
  - lib/rzwaveway/command_classes/sensor_binary.rb
98
114
  - lib/rzwaveway/command_classes/switch_binary.rb
@@ -103,19 +119,26 @@ files:
103
119
  - lib/rzwaveway/extensions/fibaro_smoke_sensor.rb
104
120
  - lib/rzwaveway/extensions/ssa_siren_strobe_alarm.rb
105
121
  - lib/rzwaveway/logger.rb
122
+ - lib/rzwaveway/properties_cache.rb
123
+ - lib/rzwaveway/property.rb
106
124
  - lib/rzwaveway/version.rb
107
125
  - lib/rzwaveway/zwave_device.rb
108
126
  - lib/rzwaveway/zway.rb
109
127
  - rzwaveway.gemspec
128
+ - spec/command_classes/alarm_spec.rb
110
129
  - spec/command_classes/battery_spec.rb
111
130
  - spec/command_classes/sensor_binary_spec.rb
112
131
  - spec/command_classes/switch_binary_spec.rb
113
132
  - spec/command_classes/switch_multi_level_spec.rb
114
133
  - spec/command_classes/wake_up_spec.rb
134
+ - spec/data/alarm.json
135
+ - spec/data/alarm_v1.json
115
136
  - spec/data/battery_get.txt
116
137
  - spec/data/sensor_level.txt
117
138
  - spec/data/switch_multi_level_get.txt
118
139
  - spec/data/wake_up.txt
140
+ - spec/events_spec.rb
141
+ - spec/property_spec.rb
119
142
  - spec/spec_helper.rb
120
143
  - spec/zwave_device_spec.rb
121
144
  - spec/zway_spec.rb
@@ -138,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
161
  version: '0'
139
162
  requirements: []
140
163
  rubyforge_project:
141
- rubygems_version: 2.2.2
164
+ rubygems_version: 2.6.13
142
165
  signing_key:
143
166
  specification_version: 4
144
167
  summary: ZWave API for ZWay