rspec-openhab-scripting 0.0.13-java → 0.0.16-java

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 66498207277243867a72d4dceb321643f804b5464682a220aa0239eae17d3376
4
- data.tar.gz: f277b25e8dc7759511c2bfa3adbd6664802d271cb8e4268d65e537750fe12144
3
+ metadata.gz: a5dd7ea9915aa3edecf86f75d7331bfe77ad3fbbbee4c278fd130895e4bc1e6c
4
+ data.tar.gz: 489db2879bf94009c027fcbb87572ae5b3834d31fab17f473cddc2fdecfebdfd
5
5
  SHA512:
6
- metadata.gz: d5b3d43560e314ab820bde6efc5f74d12ee7bbcea3f35ea9b3d760fe2e073a19505fc06031f60197b48f7658e3228f035b477f7e276919515b9c846866c45ca3
7
- data.tar.gz: fc7a6a2a340f0b59e165ed3397ab6e94d404f8710d85b0b03d01fbe9fb60db2e5fd9339a2be8a00be11998177a3a20c272e4d89475ab5bd16a01848138c5eafc
6
+ metadata.gz: 967d33cd26a809179324637df7ebb9243ec901ae6c75aaa97a1615a6f699082bb83050727502c326bcf85732f86521f93ce253877306d8e6cf86b4ed84030708
7
+ data.tar.gz: 375c3ebb1c64176b3da00a8489b8b9574e5636d767a2cb981100dc3b6b3128cbf23fc8b7ab9998ed3b7154a9d0754be6f349d3711ef326e7714ec360cac89732
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ class ItemProxy
6
+ @proxies = {}
7
+
8
+ class << self
9
+ # ensure each item only has a single proxy, so that
10
+ # expect(item).to receive(:method) works
11
+ def new(item)
12
+ @proxies.fetch(item.name) do
13
+ @proxies[item.name] = super
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,144 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RSpec
4
+ module OpenHAB
5
+ module Core
6
+ module Mocks
7
+ class PersistenceService
8
+ include org.openhab.core.persistence.ModifiablePersistenceService
9
+ include Singleton
10
+
11
+ class HistoricItem
12
+ include org.openhab.core.persistence.HistoricItem
13
+
14
+ attr_reader :timestamp, :state, :name
15
+
16
+ def initialize(timestamp, state, name)
17
+ @timestamp = timestamp
18
+ @state = state
19
+ @name = name
20
+ end
21
+ end
22
+
23
+ attr_reader :id
24
+
25
+ def initialize
26
+ @id = "default"
27
+ reset
28
+ end
29
+
30
+ def reset
31
+ @data = Hash.new { |h, k| h[k] = [] }
32
+ end
33
+
34
+ def store(item, date = nil, state = nil)
35
+ date = nil if date.is_a?(String) # alias overload
36
+ state ||= item.state
37
+ date ||= ZonedDateTime.now
38
+
39
+ new_item = HistoricItem.new(date, state, item.name)
40
+
41
+ item_history = @data[item.name]
42
+
43
+ insert_index = item_history.bsearch_index do |i|
44
+ i.timestamp.compare_to(date).positive?
45
+ end
46
+
47
+ return item_history << new_item unless insert_index
48
+
49
+ return item_history[insert_index].state = state if item_history[insert_index].timestamp == date
50
+
51
+ item_history.insert(insert_index, new_item)
52
+ end
53
+
54
+ def remove(filter)
55
+ query_internal(filter) do |item_history, index|
56
+ historic_item = item_history.delete_at(index)
57
+ @data.delete(historic_item.name) if item_history.empty?
58
+ end
59
+ end
60
+
61
+ def query(filter)
62
+ result = []
63
+
64
+ query_internal(filter) do |item_history, index|
65
+ result << item_history[index]
66
+
67
+ return result if filter.page_number.zero? && result.length == filter.page_size && filter.item_name
68
+ end
69
+
70
+ result.sort_by! { |hi| hi.timestamp.to_instant.to_epoch_milli } unless filter.item_name
71
+
72
+ unless filter.page_number.zero?
73
+ result = result.slice(filter.page_number * filter.page_size, filter.page_size)
74
+ end
75
+
76
+ result
77
+ end
78
+
79
+ def get_item_info # rubocop:disable Naming/AccessorMethodName must match Java interface
80
+ @data.map do |(n, entries)|
81
+ [n, entries.length, entries.first.timestamp, entries.last.timestamp]
82
+ end.to_set
83
+ end
84
+
85
+ def get_default_strategies # rubocop:disable Naming/AccessorMethodName must match Java interface
86
+ [org.openhab.core.persistence.strategy.PersistenceStrategy::Globals::CHANGE]
87
+ end
88
+
89
+ private
90
+
91
+ def query_internal(filter, &block)
92
+ if filter.item_name
93
+ return unless @data.key?(filter.item_name)
94
+
95
+ query_item_internal(@data[filter.item_name], filter, &block)
96
+ else
97
+ @data.each_value do |item_history|
98
+ query_item_internal(item_history, filter, &block)
99
+ end
100
+ end
101
+ end
102
+
103
+ def query_item_internal(item_history, filter)
104
+ first_index = 0
105
+ last_index = item_history.length
106
+
107
+ if filter.begin_date
108
+ first_index = item_history.bsearch_index do |i|
109
+ i.timestamp.compare_to(filter.begin_date).positive?
110
+ end
111
+ return if first_index.nil?
112
+ end
113
+
114
+ if filter.end_date
115
+ last_index = item_history.bsearch_index do |i|
116
+ i.timestamp.compare_to(filter.end_date).positive?
117
+ end
118
+ return if last_index.zero?
119
+
120
+ last_index ||= item_history.length
121
+ end
122
+
123
+ range = first_index...last_index
124
+
125
+ operator = filter.operator.symbol
126
+ operator = "==" if operator == "="
127
+
128
+ block = lambda do |i|
129
+ next if filter.state && !item_history[i].state.send(operator, filter.state)
130
+
131
+ yield(item_history, i)
132
+ end
133
+
134
+ if filter.ordering == filter.class::Ordering::DESCENDING
135
+ range.reverse_each(&block)
136
+ else
137
+ range.each(&block)
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
@@ -400,6 +400,17 @@ module OpenHAB
400
400
  el = org.openhab.core.io.monitor.internal.EventLogger.new(rs)
401
401
  em.add_event_subscriber(el)
402
402
  el.on_ready_marker_added(nil)
403
+
404
+ # set up persistence
405
+ psr = org.openhab.core.persistence.internal.PersistenceServiceRegistryImpl.new
406
+ org.openhab.core.persistence.extensions.PersistenceExtensions.new(psr)
407
+ psr.activate("default" => "default")
408
+ ps = RSpec::OpenHAB::Core::Mocks::PersistenceService.instance
409
+ psr.add_persistence_service(ps)
410
+
411
+ pm = org.openhab.core.persistence.internal.PersistenceManagerImpl.new(nil, ir, sc, rs)
412
+ pm.add_persistence_service(ps)
413
+ pm.on_ready_marker_added(nil)
403
414
  end
404
415
  end
405
416
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module DSL
5
+ module Rules
6
+ module Triggers
7
+ def watch(path, glob: "*", for: %i[created deleted modified], attach: nil); end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -10,9 +10,11 @@ RSpec.configure do |config|
10
10
  end
11
11
  end
12
12
  end
13
+
13
14
  config.after do
14
15
  OpenHAB::DSL::Timers.timer_manager.cancel_all
15
16
  Timecop.return
16
17
  restore_autoupdate_items
18
+ RSpec::OpenHAB::Core::Mocks::PersistenceService.instance.reset
17
19
  end
18
20
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module OpenHAB
5
- VERSION = "0.0.13"
5
+ VERSION = "0.0.16"
6
6
  end
7
7
  end
@@ -42,9 +42,11 @@ maven_require do
42
42
  require "jar org.openhab.core.bundles, org.openhab.core.model.core, #{openhab_version}"
43
43
  require "jar org.openhab.core.bundles, org.openhab.core.model.item, #{openhab_version}"
44
44
  require "jar org.openhab.core.bundles, org.openhab.core.model.script, #{openhab_version}"
45
+ require "jar org.openhab.core.bundles, org.openhab.core.persistence, #{openhab_version}"
45
46
  require "jar org.openhab.core.bundles, org.openhab.core.semantics, #{openhab_version}"
46
47
  require "jar org.openhab.core.bundles, org.openhab.core.thing, #{openhab_version}"
47
48
  end
49
+ java_import org.openhab.core.persistence.extensions.PersistenceExtensions
48
50
 
49
51
  require "openhab/version"
50
52
 
@@ -64,6 +66,7 @@ require "rspec/openhab/core/logger"
64
66
  # during testing, we don't want "regular" output from rules
65
67
  OpenHAB::Log.logger("org.openhab.automation.jruby.runtime").level = :warn
66
68
  OpenHAB::Log.logger("org.openhab.automation.jruby.logger").level = :warn
69
+ require "rspec/openhab/core/mocks/persistence_service"
67
70
  require "openhab/dsl/imports"
68
71
  OpenHAB::DSL::Imports.api = api
69
72
  OpenHAB::DSL::Imports.import_presets
@@ -73,8 +76,10 @@ require "openhab"
73
76
  require "rspec/openhab/actions"
74
77
  require "rspec/openhab/core/cron_scheduler"
75
78
 
76
- # override several timer methods
79
+ # override several openhab-scripting methods
80
+ require_relative "rspec/openhab/core/item_proxy"
77
81
  require_relative "rspec/openhab/dsl/timers/timer"
82
+ require_relative "rspec/openhab/dsl/rules/triggers/watch"
78
83
 
79
84
  # RSpec additions
80
85
  require "rspec/core"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-openhab-scripting
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.16
5
5
  platform: java
6
6
  authors:
7
7
  - Cody Cutrer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-03 00:00:00.000000000 Z
11
+ date: 2022-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -189,12 +189,15 @@ files:
189
189
  - lib/rspec/openhab/actions.rb
190
190
  - lib/rspec/openhab/api.rb
191
191
  - lib/rspec/openhab/core/cron_scheduler.rb
192
+ - lib/rspec/openhab/core/item_proxy.rb
192
193
  - lib/rspec/openhab/core/load_path.rb
193
194
  - lib/rspec/openhab/core/logger.rb
195
+ - lib/rspec/openhab/core/mocks/persistence_service.rb
194
196
  - lib/rspec/openhab/core/openhab_setup.rb
195
197
  - lib/rspec/openhab/core/osgi.rb
196
198
  - lib/rspec/openhab/core/script_handling.rb
197
199
  - lib/rspec/openhab/dsl/imports.rb
200
+ - lib/rspec/openhab/dsl/rules/triggers/watch.rb
198
201
  - lib/rspec/openhab/dsl/timers/timer.rb
199
202
  - lib/rspec/openhab/helpers.rb
200
203
  - lib/rspec/openhab/hooks.rb
@@ -242,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
242
245
  version: '0'
243
246
  requirements:
244
247
  - jar ch.qos.logback, logback-classic, 1.2.9
245
- rubygems_version: 3.3.17
248
+ rubygems_version: 3.2.29
246
249
  signing_key:
247
250
  specification_version: 4
248
251
  summary: Library testing OpenHAB ruby rules with rspec.