rzwaveway 0.0.11 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -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