lws 7.0.1 → 7.1.2
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 +4 -4
- data/bin/lwsconsole +5 -1
- data/lib/lws.rb +1 -1
- data/lib/lws/apps/digital_signage.rb +85 -88
- data/lib/lws/apps/generic.rb +72 -7
- data/lib/lws/apps/presence.rb +113 -2
- data/lib/lws/apps/resource.rb +20 -0
- data/lib/lws/version.rb +1 -1
- data/test/corporate_website_test.rb +5 -5
- data/test/digital_signage_test.rb +8 -62
- data/test/generic_test.rb +40 -4
- data/test/maps_test.rb +3 -3
- data/test/presence_test.rb +24 -1
- data/test/resource_test.rb +3 -3
- data/test/test_helper.rb +1 -1
- data/test/ticket_test.rb +2 -2
- metadata +18 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a6ddf096778ba5030a935df95f904a65776bbd8b2dd30602e3c9d912124fb5cd
|
4
|
+
data.tar.gz: 739154dc2c9598eef580f9a562cff9ddccde3a0828e985c55429ceed74f03a5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6f4e39e00a7277ed012c6d4a2a846dae249edf892db185d17c5a62efa012902bc388ed4e652a26e25eb30ea07e208fbe4ef08b19671c750a0e3f33aa719f8a5
|
7
|
+
data.tar.gz: 696ae43f1ed90d4674365f86d63d411fc21544cce16ba250079e0bcefef1143c9d908c6e01b18773b006fa9a704e45ebc85795ff044c28948bf16fb79f4da042
|
data/bin/lwsconsole
CHANGED
@@ -134,7 +134,11 @@ end
|
|
134
134
|
|
135
135
|
# Set up Pry
|
136
136
|
FileUtils.mkdir_p("#{ENV['HOME']}/.local/share/LeftClick")
|
137
|
-
Pry.config.
|
137
|
+
if Pry.config.history_file
|
138
|
+
Pry.config.history_file = "#{ENV['HOME']}/.local/share/LeftClick/lws_history"
|
139
|
+
else
|
140
|
+
Pry.config.history.file = "#{ENV['HOME']}/.local/share/LeftClick/lws_history"
|
141
|
+
end
|
138
142
|
Pry.config.prompt_name = PROG_NAME
|
139
143
|
|
140
144
|
# Print an LWS setup summary
|
data/lib/lws.rb
CHANGED
@@ -60,7 +60,7 @@ module LWS
|
|
60
60
|
# config.api_token_middleware = TokenAuthenticator
|
61
61
|
# config.caching_object = MyRedisCache.new
|
62
62
|
# config.environment = :development
|
63
|
-
# config.
|
63
|
+
# config.endpoints = { maps: "https://maps.leftclick.cloud" }
|
64
64
|
# config.http_debug = true
|
65
65
|
# config.json_debug = true
|
66
66
|
# config.logger = Rails.logger
|
@@ -78,6 +78,10 @@ module LWS::DigitalSignage
|
|
78
78
|
# @return [Array<Channel::Group>] the groups the channel is a member of
|
79
79
|
has_many :groups, class_name: "LWS::DigitalSignage::Channel::Group"
|
80
80
|
|
81
|
+
# @!attribute marquee_config
|
82
|
+
# @return [String] the marquee/ticker tape configuration (JSON) of the channel
|
83
|
+
attribute :marquee_config
|
84
|
+
|
81
85
|
# @!attribute name
|
82
86
|
# @return [String] the name of the channel
|
83
87
|
attribute :name
|
@@ -100,6 +104,10 @@ module LWS::DigitalSignage
|
|
100
104
|
# @return [Boolean] whether remote control is enabled for the channel
|
101
105
|
attribute :remote_control
|
102
106
|
|
107
|
+
# @!attribute slides
|
108
|
+
# @return [Array<Slide>] the slides schedules on the channel
|
109
|
+
has_many :slides, class_name: "LWS::DigitalSignage::Slide"
|
110
|
+
|
103
111
|
# @!attribute tags
|
104
112
|
# @return [Array<Channel::Tag>] the tags of the channel
|
105
113
|
has_many :tags, class_name: "LWS::DigitalSignage::Channel::Tag"
|
@@ -159,6 +167,10 @@ module LWS::DigitalSignage
|
|
159
167
|
# @return [Integer, nil] the ID of the parent group of the channel group
|
160
168
|
attribute :parent_id
|
161
169
|
|
170
|
+
# @!attribute slides
|
171
|
+
# @return [Array<Slide>] the slides schedules on the channel group
|
172
|
+
has_many :slides, class_name: "LWS::DigitalSignage::Slide"
|
173
|
+
|
162
174
|
#@!attribute tags
|
163
175
|
# @return [Array<Channel::Group::Tag>] the tags of the channel group
|
164
176
|
has_many :tags, class_name: "LWS::DigitalSignage::Channel::Group::Tag",
|
@@ -579,6 +591,10 @@ module LWS::DigitalSignage
|
|
579
591
|
# @!attribute name
|
580
592
|
# @return [String] the name of the layout category
|
581
593
|
attribute :name
|
594
|
+
|
595
|
+
# @!attribute translated_name
|
596
|
+
# @return [String] the translated name of the layout category
|
597
|
+
attribute :name
|
582
598
|
end
|
583
599
|
|
584
600
|
# = The layout element class
|
@@ -628,6 +644,10 @@ module LWS::DigitalSignage
|
|
628
644
|
# element
|
629
645
|
has_many :properties, class_name: "LWS::DigitalSignage::Layout::Element::Property"
|
630
646
|
|
647
|
+
# @!attribute title
|
648
|
+
# @return [String, nil] the title of the layout element
|
649
|
+
attribute :title
|
650
|
+
|
631
651
|
# @!attribute version
|
632
652
|
# @return [Layout::Verion] the layout version that contains the element
|
633
653
|
# FIXME: Missing endpoint in LWS
|
@@ -713,6 +733,10 @@ module LWS::DigitalSignage
|
|
713
733
|
# version
|
714
734
|
has_many :elements, class_name: "LWS::DigitalSignage::Layout::Element"
|
715
735
|
|
736
|
+
# @!attribute height
|
737
|
+
# @return [Integer] the intended height of the layout version
|
738
|
+
attribute :width
|
739
|
+
|
716
740
|
# @!attribute layout
|
717
741
|
# @return [Layout] the layout the layout version is for
|
718
742
|
belongs_to :layout
|
@@ -720,6 +744,28 @@ module LWS::DigitalSignage
|
|
720
744
|
# @!attribute layout_id
|
721
745
|
# @return [Integer] the ID of the layout the layout version is for
|
722
746
|
attribute :layout_id
|
747
|
+
|
748
|
+
# @!attribute rotation
|
749
|
+
# @return ["landscape", "portrait"] the rotation (orientation) of the
|
750
|
+
# layout version
|
751
|
+
attribute :rotation
|
752
|
+
|
753
|
+
# @!attribute rotation_angle
|
754
|
+
# @return [0, 90] the rotation angle of the layout version
|
755
|
+
attribute :rotation_angle
|
756
|
+
|
757
|
+
# @!attribute status [r]
|
758
|
+
# @return ["initializing", "creating_pack", "creating_thumbnail", "available", "archive"]
|
759
|
+
# the status of the layout version
|
760
|
+
attribute :status
|
761
|
+
|
762
|
+
# @!attribute thumbnail_url
|
763
|
+
# @return [String, nil] the URL of the thumbnail of the layout version
|
764
|
+
attribute :thumbnail_url
|
765
|
+
|
766
|
+
# @!attribute width
|
767
|
+
# @return [Integer] the intended width of the layout version
|
768
|
+
attribute :width
|
723
769
|
end
|
724
770
|
|
725
771
|
# = The player class
|
@@ -756,8 +802,12 @@ module LWS::DigitalSignage
|
|
756
802
|
attribute :configuration_id
|
757
803
|
|
758
804
|
# @!attribute feedbacks
|
759
|
-
# @return [
|
760
|
-
|
805
|
+
# @return [Hash{String=>String}] a mapping of player feedback key/values
|
806
|
+
attribute :feedbacks
|
807
|
+
|
808
|
+
# @!attribute [r] health_percentage
|
809
|
+
# @return [Fixnum] the health of the player (percentage)
|
810
|
+
attribute :health_percentage
|
761
811
|
|
762
812
|
# @!attribute [r] hostname
|
763
813
|
# @return [String] the hostname used by the player (for DHCP for example)
|
@@ -788,15 +838,27 @@ module LWS::DigitalSignage
|
|
788
838
|
# @return [Array<Player::Notification>] the notifications for the player
|
789
839
|
has_many :notifications, class_name: "LWS::DigitalSignage::Player::Notification"
|
790
840
|
|
791
|
-
# @!attribute
|
841
|
+
# @!attribute operational_hours [r]
|
842
|
+
# @return [String, nil] the number of hours the player has been operational
|
843
|
+
attribute :operational_hours
|
844
|
+
|
845
|
+
# @!attribute operational_since [r]
|
792
846
|
# @return [String, nil] the date/time when the player became operational
|
793
847
|
# for the first time
|
794
848
|
attribute :operational_since
|
795
849
|
|
850
|
+
# @!attribute os_release_version
|
851
|
+
# @return [String, nil] the OS version the player is using (if known)
|
852
|
+
attribute :os_release_version
|
853
|
+
|
796
854
|
# @!attribute parts
|
797
855
|
# @return [Array<Player::Component::Part>] the parts of the player
|
798
856
|
has_many :parts, class_name: "LWS::DigitalSignage::Player::Component::Part"
|
799
857
|
|
858
|
+
# @!attribute registration_locked
|
859
|
+
# @return [Boolean] whether registarion is locked for the player
|
860
|
+
attribute :registration_locked
|
861
|
+
|
800
862
|
# @!attribute release_channel
|
801
863
|
# @return [Player::Os::ReleaseChannel] the player OS release channel used
|
802
864
|
# by the player
|
@@ -809,7 +871,7 @@ module LWS::DigitalSignage
|
|
809
871
|
attribute :release_channel_id
|
810
872
|
|
811
873
|
# @!attribute requests
|
812
|
-
# @return [Array<Player::
|
874
|
+
# @return [Array<Player::Request>] the requests for the player
|
813
875
|
has_many :requests, class_name: "LWS::DigitalSignage::Player::Request"
|
814
876
|
|
815
877
|
# @!attribute screenshots
|
@@ -824,10 +886,14 @@ module LWS::DigitalSignage
|
|
824
886
|
# @return [Boolean] whether the player is being serviced/is in service
|
825
887
|
attribute :service
|
826
888
|
|
827
|
-
# @!attribute status
|
889
|
+
# @!attribute status [r]
|
828
890
|
# @return ["unknown", "good", "warning", "bad"] the player status
|
829
891
|
attribute :status
|
830
892
|
|
893
|
+
# @!attribute status_reason [r]
|
894
|
+
# @return [String] the reason for the current player status
|
895
|
+
attribute :status_reason
|
896
|
+
|
831
897
|
# @!attribute tags
|
832
898
|
# @return [Array<Player::Tag>] the tags of the player
|
833
899
|
has_many :tags, class_name: "LWS::DigitalSignage::Player::Tag"
|
@@ -978,75 +1044,6 @@ module LWS::DigitalSignage
|
|
978
1044
|
attribute :value
|
979
1045
|
end
|
980
1046
|
|
981
|
-
# = The player feedback class
|
982
|
-
#
|
983
|
-
# @note
|
984
|
-
# This class is only used within the context of the {Player} class.
|
985
|
-
class Player::Feedback < LWS::Generic::Model
|
986
|
-
use_api LWS::DigitalSignage.api
|
987
|
-
uri "players/:player_id/feedbacks(/:id)"
|
988
|
-
|
989
|
-
# @!attribute player
|
990
|
-
# @return [Player] the player the feedback is originating from
|
991
|
-
belongs_to :player, class_name: "LWS::DigitalSignage::Player"
|
992
|
-
|
993
|
-
# @!attribute player_id
|
994
|
-
# @return [Integer] the ID of the player the feedback is originating from
|
995
|
-
attribute :player_id
|
996
|
-
|
997
|
-
# @!attribute release
|
998
|
-
# @return [Player::Os::Branch::Release] the player OS branch release the
|
999
|
-
# feedback is related to
|
1000
|
-
# FIXME: Missing branch_id field in LWS
|
1001
|
-
belongs_to :release, class_name: "LWS::DigitalSignage::Player::Os::Branch::Release",
|
1002
|
-
uri: "player/os/branches/:branch_id/releases/:id"
|
1003
|
-
|
1004
|
-
# @!attribute release_id
|
1005
|
-
# @return [Integer] the ID of the player OS branch release the feedback
|
1006
|
-
# is related to
|
1007
|
-
|
1008
|
-
# @!attribute results
|
1009
|
-
# @return [Array<Player::Feedback::Result>] the results of the player feedback
|
1010
|
-
# FIXME: Chained associations don't work yet in Spyke (#89)
|
1011
|
-
has_many :results, class_name: "LWS::DigitalSignage::Player::Feedback::Result",
|
1012
|
-
uri: "players/:player_id/feedbacks/:feedback_id/results(/:id)"
|
1013
|
-
end
|
1014
|
-
|
1015
|
-
# = The player feedback result class
|
1016
|
-
#
|
1017
|
-
# @note
|
1018
|
-
# This class is only used within the context of the {Player::Feedback}
|
1019
|
-
# class.
|
1020
|
-
class Player::Feedback::Result < LWS::Generic::Model
|
1021
|
-
use_api LWS::DigitalSignage.api
|
1022
|
-
uri "players/:player_id/feedbacks/:feedback_id/results(/:id)"
|
1023
|
-
|
1024
|
-
# @!attribute feedback
|
1025
|
-
# @return [Player::Feedback] the player feedback the result is a part of
|
1026
|
-
belongs_to :feedback, class_name: "LWS::DigitalSignage::Player::Feedback",
|
1027
|
-
uri: "players/:player_id/feedbacks/:id"
|
1028
|
-
|
1029
|
-
# @!attribute feedback_id
|
1030
|
-
# @return [Player::Feedback] the ID of the player feedback the result is a part of
|
1031
|
-
attribute :feedback_id
|
1032
|
-
|
1033
|
-
# @!attribute key
|
1034
|
-
# @return [String] the key of the player feedback result
|
1035
|
-
attribute :key
|
1036
|
-
|
1037
|
-
# @!attribute player
|
1038
|
-
# @return [Player] the player the feedback result is for
|
1039
|
-
belongs_to :player, class_name: "LWS::DigitalSignage::Player"
|
1040
|
-
|
1041
|
-
# @!attribute player_id
|
1042
|
-
# @return [Integer] the ID of the player the feedback result is for
|
1043
|
-
attribute :player_id
|
1044
|
-
|
1045
|
-
# @!attribute value
|
1046
|
-
# @return [String] the value of the player feedback result
|
1047
|
-
attribute :value
|
1048
|
-
end
|
1049
|
-
|
1050
1047
|
# = The player log class
|
1051
1048
|
#
|
1052
1049
|
# @note
|
@@ -1570,20 +1567,6 @@ module LWS::DigitalSignage
|
|
1570
1567
|
# @return [String, nil] the optional argument for the player request
|
1571
1568
|
attribute :argument
|
1572
1569
|
|
1573
|
-
# @!attribute feedback
|
1574
|
-
# This field should be set once the action has been processed (see
|
1575
|
-
# {#processed}) and the action is +"send_feedback"+.
|
1576
|
-
#
|
1577
|
-
# @return [Player::Feedback, nil] the player feedback as a response to the
|
1578
|
-
# action request +"send_status"+
|
1579
|
-
belongs_to :feedback, class_name: "LWS::DigitalSignage::Player::Feedback",
|
1580
|
-
uri: "players/:player_id/feedbacks/:id"
|
1581
|
-
|
1582
|
-
# @!attribute feedback_id
|
1583
|
-
# @return [Integer, nil] the ID of the player feedback as a response to the
|
1584
|
-
# action request +"send_status"+
|
1585
|
-
attribute :feedback_id
|
1586
|
-
|
1587
1570
|
# @!attribute log
|
1588
1571
|
# This field should be set once the action has been processed (see
|
1589
1572
|
# {#processed}) and the action is +"send_logs"+.
|
@@ -1693,6 +1676,15 @@ module LWS::DigitalSignage
|
|
1693
1676
|
# @return [Integer] the ID of the account used for creating the slide
|
1694
1677
|
attribute :account_id
|
1695
1678
|
|
1679
|
+
# @!attribute channels
|
1680
|
+
# @return [Array<Channel>] the channels the slide is scheduled on
|
1681
|
+
has_many :channels, class_name: "LWS::DigitalSignage::Channel"
|
1682
|
+
|
1683
|
+
# @!attribute channel_groups
|
1684
|
+
# @return [Array<Channel::Group>] the channel group the slide is
|
1685
|
+
# scheduled on
|
1686
|
+
has_many :channel_groups, class_name: "LWS::DigitalSignage::Channel::Group"
|
1687
|
+
|
1696
1688
|
# @!attribute company
|
1697
1689
|
# @return [LWS::Auth::Company] the company the slide belongs to
|
1698
1690
|
belongs_to :company, class_name: "LWS::Auth::Company"
|
@@ -1721,6 +1713,11 @@ module LWS::DigitalSignage
|
|
1721
1713
|
# @return [Array<Schedule>] the slide schedules that apply for the slide
|
1722
1714
|
# FIXME: Missing endpoint in LWS
|
1723
1715
|
has_many :schedules, class_name: "LWS::DigitalSignage::Slide::Schedule"
|
1716
|
+
|
1717
|
+
# @!attribute status [r]
|
1718
|
+
# @return ["initializing", "waiting_content", "available", "error"]
|
1719
|
+
# the status of the slide
|
1720
|
+
attribute :status
|
1724
1721
|
end
|
1725
1722
|
|
1726
1723
|
# = The slide schedule class
|
data/lib/lws/apps/generic.rb
CHANGED
@@ -150,8 +150,9 @@ module LWS::Generic
|
|
150
150
|
result
|
151
151
|
end
|
152
152
|
|
153
|
-
# Extracts a nested attribute
|
153
|
+
# Extracts a nested attribute value specified by the sequence of attribute names
|
154
154
|
# by calling dig at each step, returning +nil+ if any intermediate step is +nil+.
|
155
|
+
# @return [Object, nil] the digged up value or +nil+
|
155
156
|
def dig(*attrs)
|
156
157
|
attr = attrs.shift
|
157
158
|
value = send(attr)
|
@@ -161,6 +162,20 @@ module LWS::Generic
|
|
161
162
|
value.dig(*attrs)
|
162
163
|
end
|
163
164
|
|
165
|
+
# Returns a deep copy of the model.
|
166
|
+
# @return [Model] a deep copy of the model
|
167
|
+
def deep_dup
|
168
|
+
dup_obj = super
|
169
|
+
dup_obj.instance_eval do
|
170
|
+
@changed_attributes = @changed_attributes.deep_dup
|
171
|
+
@previously_changed = @previously_changed.deep_dup
|
172
|
+
@scope = @scope.deep_dup
|
173
|
+
@spyke_attributes = @spyke_attributes.deep_dup
|
174
|
+
@uri_template = @uri_template.deep_dup
|
175
|
+
end
|
176
|
+
dup_obj
|
177
|
+
end
|
178
|
+
|
164
179
|
end
|
165
180
|
|
166
181
|
# = The configuration class
|
@@ -180,9 +195,11 @@ module LWS::Generic
|
|
180
195
|
class Storage
|
181
196
|
# @!visibility private
|
182
197
|
def self.use_api(api)
|
183
|
-
|
184
|
-
config = LWS.config
|
198
|
+
config = LWS.config
|
185
199
|
|
200
|
+
# A connection to Active Storage (with JSON request/response, but without
|
201
|
+
# token authentication and caching).
|
202
|
+
@as_connection = Faraday.new(url: api.url_prefix) do |c|
|
186
203
|
# Request
|
187
204
|
c.request :json
|
188
205
|
|
@@ -197,6 +214,36 @@ module LWS::Generic
|
|
197
214
|
c.adapter Faraday.default_adapter
|
198
215
|
end
|
199
216
|
end
|
217
|
+
|
218
|
+
# A plain file connection to LWS (with token autnentication and caching but without
|
219
|
+
# JSON request/response).
|
220
|
+
@lws_connection = Faraday.new(url: api.url_prefix) do |c|
|
221
|
+
# Request
|
222
|
+
if config.caching_object
|
223
|
+
c.use FaradayMiddleware::Caching, config.caching_object
|
224
|
+
end
|
225
|
+
c.use LWS::Middleware::RequestHeaders, config.api_token
|
226
|
+
c.use config.api_token_middleware if config.api_token_middleware.present?
|
227
|
+
|
228
|
+
# Response
|
229
|
+
c.use FaradayMiddleware::FollowRedirects, limit: 3
|
230
|
+
c.use LWS::HTTPLogger, config.logger, config.http_debug_headers if config.http_debug
|
231
|
+
|
232
|
+
# Adapter
|
233
|
+
if config.http_persistent
|
234
|
+
c.adapter :net_http_persistent
|
235
|
+
else
|
236
|
+
c.adapter Faraday.default_adapter
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
# (see .upload)
|
242
|
+
# @deprecated
|
243
|
+
# To have a consistent upload/download naming counterpart, this
|
244
|
+
# method has been deprecated. Use {.upload} instead.
|
245
|
+
def self.create(file_or_io, filename, content_type = "application/octet-stream")
|
246
|
+
upload(file_or_io, filename, content_type)
|
200
247
|
end
|
201
248
|
|
202
249
|
# Uploads a file (or IO object) to the storage of the app module.
|
@@ -208,7 +255,7 @@ module LWS::Generic
|
|
208
255
|
# @param filename [String] the filename to use for the uploaded file/IO object
|
209
256
|
# @param content_type [String] the content type of the uploaded file/IO object
|
210
257
|
# @return [String, nil] the storage ID (if successful)
|
211
|
-
def self.
|
258
|
+
def self.upload(file_or_io, filename, content_type = "application/octet-stream")
|
212
259
|
return nil if file_or_io.closed?
|
213
260
|
|
214
261
|
data = file_or_io.read
|
@@ -217,7 +264,7 @@ module LWS::Generic
|
|
217
264
|
content_type: content_type,
|
218
265
|
byte_size: data.length,
|
219
266
|
checksum: checksum } }
|
220
|
-
res = @
|
267
|
+
res = @as_connection.post do |req|
|
221
268
|
req.url "rails/active_storage/direct_uploads"
|
222
269
|
req.headers["Accept"] = "application/json"
|
223
270
|
req.headers["Content-Type"] = "application/json"
|
@@ -226,7 +273,7 @@ module LWS::Generic
|
|
226
273
|
|
227
274
|
if res.success?
|
228
275
|
result = JSON.parse(res.body)
|
229
|
-
res = @
|
276
|
+
res = @as_connection.put do |req|
|
230
277
|
req.url result.dig("direct_upload", "url")
|
231
278
|
result.dig("direct_upload", "headers").each do |hdr, val|
|
232
279
|
req.headers[hdr] = val
|
@@ -240,6 +287,24 @@ module LWS::Generic
|
|
240
287
|
nil
|
241
288
|
end
|
242
289
|
end
|
243
|
-
end
|
244
290
|
|
291
|
+
# Downloads a file at the provided URL from the storage using the
|
292
|
+
# appropriate API tokens.
|
293
|
+
#
|
294
|
+
# This method can be used to download images/assets/etc. from LWS using
|
295
|
+
# URLs provided by attributes that end with +_url+.
|
296
|
+
# @param url [String] the URL to download the file from
|
297
|
+
# @return [String] the contents of the file
|
298
|
+
def self.download(url)
|
299
|
+
return nil if url.nil?
|
300
|
+
|
301
|
+
unless url.start_with? @lws_connection.url_prefix.to_s
|
302
|
+
raise ArgumentError,
|
303
|
+
"URL does not belong to this LWS app (endpoint: #{@lws_connection.url_prefix})"
|
304
|
+
end
|
305
|
+
|
306
|
+
res = @lws_connection.get(url)
|
307
|
+
res.body
|
308
|
+
end
|
309
|
+
end
|
245
310
|
end
|
data/lib/lws/apps/presence.rb
CHANGED
@@ -88,6 +88,46 @@ module LWS::Presence
|
|
88
88
|
attribute :uuid
|
89
89
|
end
|
90
90
|
|
91
|
+
# = The journal (entry) class
|
92
|
+
#
|
93
|
+
# @note
|
94
|
+
# This class is only used within the context of the {Location} class.
|
95
|
+
class Journal < LWS::Generic::Model
|
96
|
+
use_api LWS::Presence.api
|
97
|
+
|
98
|
+
# @!attribute check_in
|
99
|
+
# @return [String] the timestamp of the check-in of this journal (entry)
|
100
|
+
attribute :check_in
|
101
|
+
|
102
|
+
# @!attribute check_out
|
103
|
+
# @return [String, nil] the timestamp of the check out of this journal (entry)
|
104
|
+
attribute :check_out
|
105
|
+
|
106
|
+
# @!attribute company
|
107
|
+
# @return [LWS::Auth::Company] the company the journal (entry) belongs to
|
108
|
+
belongs_to :company, class_name: "LWS::Auth::Company"
|
109
|
+
|
110
|
+
# @!attribute company_id
|
111
|
+
# @return [Integer] the ID of the company the journal (entry) belongs to
|
112
|
+
attribute :company_id
|
113
|
+
|
114
|
+
# @!attribute location
|
115
|
+
# @return [Location] the location the journal (entry) belongs to
|
116
|
+
belongs_to :location
|
117
|
+
|
118
|
+
# @!attribute location_id
|
119
|
+
# @return [Integer] the ID of the location the journal (entry) belongs to
|
120
|
+
attribute :location_id
|
121
|
+
|
122
|
+
# @!attribute person
|
123
|
+
# @return [Person] the person the journal (entry) belongs to
|
124
|
+
belongs_to :person
|
125
|
+
|
126
|
+
# @!attribute person_id
|
127
|
+
# @return [Integer] the ID of the person the journal (entry) belongs to
|
128
|
+
attribute :person_id
|
129
|
+
end
|
130
|
+
|
91
131
|
# = The location class
|
92
132
|
class Location < LWS::Generic::Model
|
93
133
|
use_api LWS::Presence.api
|
@@ -133,6 +173,14 @@ module LWS::Presence
|
|
133
173
|
# the presence status to set people to when checking in
|
134
174
|
attribute :checkin_status
|
135
175
|
|
176
|
+
# @!attribute checkout_alter_status
|
177
|
+
# @return ["available", "unavailable", "maintenance_cleaning",
|
178
|
+
# "maintenance_technical", "permanent_available",
|
179
|
+
# "permanent_unavailable", "permanent_maintenance_cleaning",
|
180
|
+
# "permanent_maintenance_technical", nil] the status to set the
|
181
|
+
# location to when someone checks out
|
182
|
+
attribute :checkout_alter_status
|
183
|
+
|
136
184
|
# @!attribute checkout_location
|
137
185
|
# @return [Location, nil] the location to move people to when they
|
138
186
|
# are checked out
|
@@ -157,13 +205,28 @@ module LWS::Presence
|
|
157
205
|
# @return [Array<Integer>] the IDs of the underlying locations of the location
|
158
206
|
attribute :descendant_ids
|
159
207
|
|
208
|
+
# @!attribute image_storage_id
|
209
|
+
# @return [String, nil] the storage ID of the image of the location
|
210
|
+
attribute :image_storage_id
|
211
|
+
|
212
|
+
# @!attribute image_url
|
213
|
+
# @note
|
214
|
+
# To be able retrieve this, the token needs to be passed via +X-Token+
|
215
|
+
# in the HTTP request headers!
|
216
|
+
# @return [String, nil] the URL of the image of the location
|
217
|
+
attribute :image_url
|
218
|
+
|
219
|
+
# @!attribute journals
|
220
|
+
# @return [Array<Journal>] the journal (entries) associated with the location
|
221
|
+
has_many :journals, class: "LWS::Presence::Journal"
|
222
|
+
|
160
223
|
# @!attribute lat
|
161
224
|
# @return [Float] the latitude of the location
|
162
225
|
attribute :lat
|
163
226
|
|
164
227
|
# @!attribute logoff_time
|
165
|
-
#
|
166
|
-
#
|
228
|
+
# The format of the time is +HH:MM+ and should be interpreted in the time zone
|
229
|
+
# of the location (see also {#time_zone}).
|
167
230
|
# @return [String] the time everybody is automatically logged off
|
168
231
|
attribute :logoff_time
|
169
232
|
|
@@ -221,6 +284,13 @@ module LWS::Presence
|
|
221
284
|
# @return [Array<Reader>] the (RFID/code/ID/...) readers linked to this location
|
222
285
|
has_many :readers
|
223
286
|
|
287
|
+
# @!attribute status
|
288
|
+
# @return ["available", "unavailable", "maintenance_cleaning",
|
289
|
+
# "maintenance_technical", "permanent_available",
|
290
|
+
# "permanent_unavailable", "permanent_maintenance_cleaning",
|
291
|
+
# "permanent_maintenance_technical"] the status of the location
|
292
|
+
attribute :status
|
293
|
+
|
224
294
|
# @!attribute time_zone
|
225
295
|
# @return [String] the time zone of the location
|
226
296
|
attribute :time_zone
|
@@ -238,6 +308,17 @@ module LWS::Presence
|
|
238
308
|
use_api LWS::Presence.api
|
239
309
|
uri "locations/:location_id/maps(/:id)"
|
240
310
|
|
311
|
+
# @!attribute image_storage_id
|
312
|
+
# @return [String, nil] the storage ID of the image of the map
|
313
|
+
attribute :image_storage_id
|
314
|
+
|
315
|
+
# @!attribute image_url
|
316
|
+
# @note
|
317
|
+
# To be able retrieve this, the token needs to be passed via +X-Token+
|
318
|
+
# in the HTTP request headers!
|
319
|
+
# @return [String, nil] the URL of the image of the map
|
320
|
+
attribute :image_url
|
321
|
+
|
241
322
|
# @!attribute location
|
242
323
|
# @return [Location] the location the map belongs to
|
243
324
|
belongs_to :location
|
@@ -251,6 +332,9 @@ module LWS::Presence
|
|
251
332
|
attribute :name
|
252
333
|
|
253
334
|
# @!attribute picture_url
|
335
|
+
# @deprecated
|
336
|
+
# Unauthenticated retrieval of the picture will not longer be supported
|
337
|
+
# in upcoming releases of LWS. Use {#image_url} instead!
|
254
338
|
# @return [String, nil] the URL of the picture of the map
|
255
339
|
attribute :picture_url
|
256
340
|
|
@@ -359,6 +443,17 @@ module LWS::Presence
|
|
359
443
|
# @return [Array<Appointment>] the appointments involving the person
|
360
444
|
has_many :appointments
|
361
445
|
|
446
|
+
# @!attribute avatar_storage_id
|
447
|
+
# @return [String, nil] the storage ID of the avatar of the person
|
448
|
+
attribute :avatar_storage_id
|
449
|
+
|
450
|
+
# @!attribute avatar_url
|
451
|
+
# @note
|
452
|
+
# To be able retrieve this, the token needs to be passed via +X-Token+
|
453
|
+
# in the HTTP request headers!
|
454
|
+
# @return [String, nil] the URL of the avatar of the person
|
455
|
+
attribute :avatar_url
|
456
|
+
|
362
457
|
# @!attribute company
|
363
458
|
# @return [LWS::Auth::Company] the company the person belongs to
|
364
459
|
belongs_to :company, class_name: "LWS::Auth::Company"
|
@@ -422,6 +517,14 @@ module LWS::Presence
|
|
422
517
|
# @return [Integer] the ID of the location the person is located at
|
423
518
|
attribute :location_id
|
424
519
|
|
520
|
+
# @!attribute location_status_change_permissions
|
521
|
+
# @return [Array<"available", "unavailable", "maintenance_cleaning",
|
522
|
+
# "maintenance_technical", "permanent_available",
|
523
|
+
# "permanent_unavailable", "permanent_maintenance_cleaning",
|
524
|
+
# "permanent_maintenance_technical">] the location statuses the person
|
525
|
+
# will clear to available on check-in
|
526
|
+
attribute :location_status_change_permissions
|
527
|
+
|
425
528
|
# @!attribute long
|
426
529
|
# @return [Float, nil] the exact longitude of the person's location
|
427
530
|
attribute :long
|
@@ -457,6 +560,9 @@ module LWS::Presence
|
|
457
560
|
attribute :phone_mobile
|
458
561
|
|
459
562
|
# @!attribute picture_url
|
563
|
+
# @deprecated
|
564
|
+
# Unauthenticated retrieval of the picture will not longer be supported
|
565
|
+
# in upcoming releases of LWS. Use {#avatar_url} instead!
|
460
566
|
# @return [String, nil] the URL of the picture of the person
|
461
567
|
attribute :picture_url
|
462
568
|
|
@@ -512,4 +618,9 @@ module LWS::Presence
|
|
512
618
|
attribute :node
|
513
619
|
end
|
514
620
|
|
621
|
+
# (see Generic::Storage)
|
622
|
+
class Storage < LWS::Generic::Storage
|
623
|
+
use_api LWS::Presence.api
|
624
|
+
end
|
625
|
+
|
515
626
|
end
|
data/lib/lws/apps/resource.rb
CHANGED
@@ -108,6 +108,11 @@ module LWS::Resource
|
|
108
108
|
# @return [String] the URL of a preview of the collection
|
109
109
|
attribute :preview_url
|
110
110
|
|
111
|
+
# @!attribute processing
|
112
|
+
# @return [Boolean] whether the collection is being processed (i.e. it is
|
113
|
+
# not ready for use)
|
114
|
+
attribute :processing
|
115
|
+
|
111
116
|
# @!attribute uuid
|
112
117
|
# @return [String] the UUID used for unique file name generation
|
113
118
|
attribute :uuid
|
@@ -537,6 +542,21 @@ module LWS::Resource
|
|
537
542
|
# @!attribute parent_id
|
538
543
|
# @return [Integer, nil] the ID of the parent folder of the folder
|
539
544
|
attribute :parent_id
|
545
|
+
|
546
|
+
# @!attribute permission
|
547
|
+
# A UNIX-style permission that indicates whether the folder is shared and
|
548
|
+
# who can read/write in it:
|
549
|
+
# * 700: not shared (the default), only readable/writable by the
|
550
|
+
# associated account
|
551
|
+
# * 740: readable by anyone in the company
|
552
|
+
# * 770: readable/writeable by anyone in the company
|
553
|
+
# @return ["700", "740", "770"] the (share) permission of the folder
|
554
|
+
attribute :permission
|
555
|
+
|
556
|
+
# @!attribute temporary
|
557
|
+
# @return [Boolean] whether the folder is temporary and thus will be
|
558
|
+
# deleted after some time
|
559
|
+
attribute :temporary
|
540
560
|
end
|
541
561
|
|
542
562
|
end
|
data/lib/lws/version.rb
CHANGED
@@ -16,7 +16,7 @@ class TestCorporateWebsiteArticle < MiniTest::Test
|
|
16
16
|
include LWS::CorporateWebsite
|
17
17
|
|
18
18
|
def setup
|
19
|
-
@page = Page.
|
19
|
+
@page = Page.find(1)
|
20
20
|
@article = @page.articles.first
|
21
21
|
end
|
22
22
|
|
@@ -38,7 +38,7 @@ class TestCorporateWebsiteOfficeTime < MiniTest::Test
|
|
38
38
|
include LWS::CorporateWebsite
|
39
39
|
|
40
40
|
def setup
|
41
|
-
@office_time = OfficeTime.
|
41
|
+
@office_time = OfficeTime.find(1)
|
42
42
|
end
|
43
43
|
|
44
44
|
def test_valid
|
@@ -54,7 +54,7 @@ class TestCorporateWebsitePage < MiniTest::Test
|
|
54
54
|
include LWS::CorporateWebsite
|
55
55
|
|
56
56
|
def setup
|
57
|
-
@page = Page.
|
57
|
+
@page = Page.find(1)
|
58
58
|
end
|
59
59
|
|
60
60
|
def test_valid
|
@@ -75,7 +75,7 @@ end
|
|
75
75
|
# include LWS::CorporateWebsite
|
76
76
|
#
|
77
77
|
# def setup
|
78
|
-
# @social_page = SocialPage.
|
78
|
+
# @social_page = SocialPage.find(1)
|
79
79
|
# end
|
80
80
|
#
|
81
81
|
# def test_valid
|
@@ -96,7 +96,7 @@ class TestCorporateWebsiteSocialPost < MiniTest::Test
|
|
96
96
|
include LWS::CorporateWebsite
|
97
97
|
|
98
98
|
def setup
|
99
|
-
@social_post = SocialPost.
|
99
|
+
@social_post = SocialPost.find(1)
|
100
100
|
end
|
101
101
|
|
102
102
|
def test_valid
|
@@ -30,6 +30,8 @@ class TestDigitalSignageChannel < MiniTest::Test
|
|
30
30
|
assert_instance_of(Display, @channel.display)
|
31
31
|
assert_instance_of(Channel::Group, @channel.groups.first)
|
32
32
|
assert_instance_of(Player, @channel.players.first)
|
33
|
+
# FIXME: Missing endpoint in LWS
|
34
|
+
#assert_instance_of(Slide, @channel.slides.first)
|
33
35
|
assert_instance_of(Channel::Tag, @channel.tags.first)
|
34
36
|
assert_instance_of(Channel::TimeSchedule, @channel.time_schedule)
|
35
37
|
assert_instance_of(Channel::TimeScheduleOverride, @channel.time_schedule_overrides.first)
|
@@ -55,6 +57,8 @@ class TestDigitalSignageChannelGroup < MiniTest::Test
|
|
55
57
|
assert_instance_of(Channel, @channel_group.channels.first)
|
56
58
|
assert_instance_of(LWS::Auth::Company, @channel_group.company)
|
57
59
|
assert_instance_of(Channel::Group, @channel_group.parent)
|
60
|
+
# FIXME: Missing endpoint in LWS
|
61
|
+
#assert_instance_of(Slide, @channel_group.slides.first)
|
58
62
|
assert_instance_of(Channel::Group::Tag, @channel_group.tags.first)
|
59
63
|
assert_instance_of(Channel::TimeScheduleOverride, @channel_group.time_schedule_overrides.first)
|
60
64
|
end
|
@@ -157,7 +161,7 @@ class TestDigitalSignageChannelTimeScheduleOverride < MiniTest::Test
|
|
157
161
|
include LWS::DigitalSignage
|
158
162
|
|
159
163
|
def setup
|
160
|
-
@channel_time_schedule_override = Channel::TimeScheduleOverride.
|
164
|
+
@channel_time_schedule_override = Channel::TimeScheduleOverride.find(1)
|
161
165
|
end
|
162
166
|
|
163
167
|
def test_valid
|
@@ -526,64 +530,6 @@ class TestDigitalSignagePlayerConfigurationSetting < MiniTest::Test
|
|
526
530
|
|
527
531
|
end
|
528
532
|
|
529
|
-
class TestDigitalSignagePlayerFeedback < MiniTest::Test
|
530
|
-
|
531
|
-
include LWS::DigitalSignage
|
532
|
-
|
533
|
-
def setup
|
534
|
-
@player = Player.find(1)
|
535
|
-
# Player feedbacks only exist as child objects of players
|
536
|
-
@player_feedback = @player.feedbacks.first
|
537
|
-
end
|
538
|
-
|
539
|
-
def test_valid
|
540
|
-
refute_nil(@player_feedback)
|
541
|
-
assert_instance_of(Player::Feedback, @player_feedback)
|
542
|
-
refute_nil(@player_feedback.id)
|
543
|
-
end
|
544
|
-
|
545
|
-
def test_valid_associations
|
546
|
-
assert_instance_of(Player, @player_feedback.player)
|
547
|
-
assert_equal(@player, @player_feedback.player)
|
548
|
-
# FIXME: Missing branch_id field in LWS
|
549
|
-
#assert_instance_of(Player::Os::Branch::Release, @player_feedback.release)
|
550
|
-
# FIXME: Chained associations don't work yet in Spyke (#89)
|
551
|
-
#assert_instance_of(Player::Feedback::Result, @player_feedback.results.first)
|
552
|
-
end
|
553
|
-
|
554
|
-
end
|
555
|
-
|
556
|
-
class TestDigitalSignagePlayerFeedbackResult < MiniTest::Test
|
557
|
-
|
558
|
-
include LWS::DigitalSignage
|
559
|
-
|
560
|
-
def setup
|
561
|
-
@player = Player.find(1)
|
562
|
-
# Player feedbacks only exist as decendant objects of players
|
563
|
-
@player_feedback = @player.feedbacks.all.first
|
564
|
-
# Player feedback results only exist as decendant objects of player
|
565
|
-
# feedbacks
|
566
|
-
# FIXME: Chained associations don't work yet in Spyke (#89)
|
567
|
-
#@player_feedback_result = @player_feedback.results.first
|
568
|
-
end
|
569
|
-
|
570
|
-
# FIXME: Chained associations don't work yet in Spyke (#89)
|
571
|
-
#def test_valid
|
572
|
-
# refute_nil(@player_feedback_result)
|
573
|
-
# assert_instance_of(Player::Feedback::Result, @player_feedback_result)
|
574
|
-
# refute_nil(@player_feedback_result.id)
|
575
|
-
#end
|
576
|
-
|
577
|
-
# FIXME: Chained associations don't work yet in Spyke (#89)
|
578
|
-
#def test_valid_associations
|
579
|
-
# assert_instance_of(Player, @player_feedback_result.player)
|
580
|
-
# assert_equal(@player, @player_feedback_result.player)
|
581
|
-
# assert_instance_of(Player::Feedback, @player_feedback_result.feedback)
|
582
|
-
# assert_equal(@player_feedback, @player_feedback_result.feedback)
|
583
|
-
#end
|
584
|
-
|
585
|
-
end
|
586
|
-
|
587
533
|
class TestDigitalSignagePlayerLog < MiniTest::Test
|
588
534
|
|
589
535
|
include LWS::DigitalSignage
|
@@ -926,9 +872,7 @@ class TestDigitalSignagePlayerRequest < MiniTest::Test
|
|
926
872
|
assert_equal(@player, @player_request.player)
|
927
873
|
# FIXME: Chained associations don't work yet in Spyke (#89)
|
928
874
|
#if @player_request.processed
|
929
|
-
# if @player_request.
|
930
|
-
# assert_instance_of(Player::Feedback, @player_request.feedback)
|
931
|
-
# elsif @player_request.log.present?
|
875
|
+
# if @player_request.log.present?
|
932
876
|
# assert_instance_of(Player::Log, @player_request.log)
|
933
877
|
# elsif @player_request.screenshot.present?
|
934
878
|
# assert_instance_of(Player::Screenshot, @player_request.screenshot)
|
@@ -1002,6 +946,8 @@ class TestDigitalSignageSlide < MiniTest::Test
|
|
1002
946
|
|
1003
947
|
def test_valid_associations
|
1004
948
|
assert_instance_of(LWS::Auth::Account, @slide.account)
|
949
|
+
assert_instance_of(Channel, @slide.channels.first)
|
950
|
+
assert_instance_of(Channel::Group, @slide.channel_groups.first)
|
1005
951
|
assert_instance_of(LWS::Auth::Company, @slide.company)
|
1006
952
|
assert_instance_of(Layout, @slide.layout)
|
1007
953
|
end
|
data/test/generic_test.rb
CHANGED
@@ -17,7 +17,7 @@ class TestGenericModel < MiniTest::Test
|
|
17
17
|
include LWS::Auth
|
18
18
|
|
19
19
|
def setup
|
20
|
-
@configuration = Configuration.
|
20
|
+
@configuration = Configuration.find(1)
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_her_compatibility
|
@@ -106,6 +106,20 @@ class TestGenericModel < MiniTest::Test
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
+
def test_deep_dup
|
110
|
+
company = LWS::Auth::Company.find(1)
|
111
|
+
company_dup = company.deep_dup
|
112
|
+
|
113
|
+
# The object itself
|
114
|
+
refute_equal(company.object_id, company_dup.object_id)
|
115
|
+
# An object as attribute value
|
116
|
+
refute_equal(company.address.object_id, company_dup.address.object_id)
|
117
|
+
# A related object
|
118
|
+
refute_equal(company.contact_person.object_id, company_dup.contact_person.object_id)
|
119
|
+
# An item in array of related objects
|
120
|
+
refute_equal(company.accounts.first.object_id, company_dup.accounts.first.object_id)
|
121
|
+
end
|
122
|
+
|
109
123
|
end
|
110
124
|
|
111
125
|
class TestGenericConfiguration < MiniTest::Test
|
@@ -114,7 +128,7 @@ class TestGenericConfiguration < MiniTest::Test
|
|
114
128
|
include LWS::Auth
|
115
129
|
|
116
130
|
def setup
|
117
|
-
@configuration = Configuration.
|
131
|
+
@configuration = Configuration.find(1)
|
118
132
|
end
|
119
133
|
|
120
134
|
def test_valid
|
@@ -128,15 +142,37 @@ end
|
|
128
142
|
class TestGenericStorage < MiniTest::Test
|
129
143
|
|
130
144
|
# Generic class needs to be accessed under some kind of app
|
131
|
-
include LWS::
|
145
|
+
include LWS::Presence
|
132
146
|
|
133
147
|
def test_upload
|
134
148
|
data = StringIO.new("some file contents\n")
|
149
|
+
refute_nil(Storage.upload(data, "test.txt", "text/plain"))
|
150
|
+
|
151
|
+
# Test the deprecated method (for now)
|
135
152
|
refute_nil(Storage.create(data, "test.txt", "text/plain"))
|
136
153
|
|
137
154
|
# Also test using the default HTTP adapter.
|
138
155
|
reconfigure(http_persistent: false)
|
139
156
|
data = StringIO.new("some more file contents\n")
|
140
|
-
refute_nil(Storage.
|
157
|
+
refute_nil(Storage.upload(data, "test2.txt", "text/plain"))
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_download
|
161
|
+
location = Location.find(1)
|
162
|
+
refute_nil(location.image_url)
|
163
|
+
|
164
|
+
data = Storage.download(location.image_url)
|
165
|
+
assert(data.size > 0)
|
166
|
+
|
167
|
+
assert_nil(Storage.download(nil))
|
168
|
+
|
169
|
+
assert_raises(ArgumentError) do
|
170
|
+
Storage.download("https://doesnot.exist.tld/some/file")
|
171
|
+
end
|
172
|
+
|
173
|
+
# Also test using the default HTTP adapter.
|
174
|
+
reconfigure(http_persistent: false)
|
175
|
+
data = Storage.download(location.image_url)
|
176
|
+
assert(data.size > 0)
|
141
177
|
end
|
142
178
|
end
|
data/test/maps_test.rb
CHANGED
@@ -16,7 +16,7 @@ class TestMapsMap < MiniTest::Test
|
|
16
16
|
include LWS::Maps
|
17
17
|
|
18
18
|
def setup
|
19
|
-
@map = Map.
|
19
|
+
@map = Map.find(1)
|
20
20
|
end
|
21
21
|
|
22
22
|
def test_valid_map
|
@@ -37,7 +37,7 @@ class TestMapsMarker < MiniTest::Test
|
|
37
37
|
include LWS::Maps
|
38
38
|
|
39
39
|
def setup
|
40
|
-
@map = Map.
|
40
|
+
@map = Map.find(1)
|
41
41
|
# Markers only exist as child objects of maps
|
42
42
|
@marker = @map.markers.first
|
43
43
|
end
|
@@ -60,7 +60,7 @@ class TestMapsSource < MiniTest::Test
|
|
60
60
|
include LWS::Maps
|
61
61
|
|
62
62
|
def setup
|
63
|
-
@source = Source.
|
63
|
+
@source = Source.find(1)
|
64
64
|
end
|
65
65
|
|
66
66
|
def test_valid_source
|
data/test/presence_test.rb
CHANGED
@@ -35,6 +35,29 @@ class TestPresenceAppointment < MiniTest::Test
|
|
35
35
|
|
36
36
|
end
|
37
37
|
|
38
|
+
class TestPresenceJournal < MiniTest::Test
|
39
|
+
include LWS::Presence
|
40
|
+
|
41
|
+
def setup
|
42
|
+
@location = Location.find(1)
|
43
|
+
# Journals only exist as child objects of a location
|
44
|
+
@journal = @location.journals.first
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_valid
|
48
|
+
refute_nil(@journal)
|
49
|
+
assert_instance_of(Journal, @journal)
|
50
|
+
refute_nil(@journal.id)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_valid_associations
|
54
|
+
assert_instance_of(LWS::Auth::Company, @journal.company)
|
55
|
+
assert_instance_of(Location, @journal.location)
|
56
|
+
assert_equal(@location, @journal.location)
|
57
|
+
assert_instance_of(Person, @journal.person)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
38
61
|
class TestPresenceLocation < MiniTest::Test
|
39
62
|
|
40
63
|
include LWS::Presence
|
@@ -165,7 +188,7 @@ class TestPresenceReader < MiniTest::Test
|
|
165
188
|
include LWS::Presence
|
166
189
|
|
167
190
|
def setup
|
168
|
-
@reader = Reader.
|
191
|
+
@reader = Reader.find(1)
|
169
192
|
end
|
170
193
|
|
171
194
|
def test_valid
|
data/test/resource_test.rb
CHANGED
@@ -25,7 +25,7 @@ class TestResourceCollection < MiniTest::Test
|
|
25
25
|
include LWS::Resource
|
26
26
|
|
27
27
|
def setup
|
28
|
-
@collection = Collection.
|
28
|
+
@collection = Collection.find(1)
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_valid
|
@@ -48,7 +48,7 @@ class TestResourceCollectionItem < MiniTest::Test
|
|
48
48
|
include LWS::Resource
|
49
49
|
|
50
50
|
def setup
|
51
|
-
@collection = Collection.where(includes: "items").
|
51
|
+
@collection = Collection.where(includes: "items").find(1)
|
52
52
|
@collection_item = @collection.items.first
|
53
53
|
end
|
54
54
|
|
@@ -70,7 +70,7 @@ class TestResourceFolder < MiniTest::Test
|
|
70
70
|
include LWS::Resource
|
71
71
|
|
72
72
|
def setup
|
73
|
-
@folder = Folder.
|
73
|
+
@folder = Folder.find(1)
|
74
74
|
end
|
75
75
|
|
76
76
|
def test_valid
|
data/test/test_helper.rb
CHANGED
@@ -23,7 +23,7 @@ SimpleCov.at_exit do
|
|
23
23
|
result.format!
|
24
24
|
simplecov_test_suites = ['minitest']
|
25
25
|
parallel_offset = ENV['PARALLEL_TEST_GROUPS'] ? ENV['PARALLEL_TEST_GROUPS'].to_i - 1 : 0
|
26
|
-
minimum_coverage =
|
26
|
+
minimum_coverage = 95
|
27
27
|
# Count the number of commas in the command name to figure out how many result groups were combined into this result
|
28
28
|
if result.command_name.scan(/,/).size + 1 >= simplecov_test_suites.size + (parallel_offset * 2) # two parallel suites
|
29
29
|
# We only want to enforce minimum coverage after all test suites finish
|
data/test/ticket_test.rb
CHANGED
@@ -40,7 +40,7 @@ class TestTicketGroup < MiniTest::Test
|
|
40
40
|
include LWS::Ticket
|
41
41
|
|
42
42
|
def setup
|
43
|
-
@group = Group.
|
43
|
+
@group = Group.find(1)
|
44
44
|
end
|
45
45
|
|
46
46
|
def test_valid
|
@@ -88,7 +88,7 @@ class TestTicketTag < MiniTest::Test
|
|
88
88
|
include LWS::Ticket
|
89
89
|
|
90
90
|
def setup
|
91
|
-
@tag = Tag.
|
91
|
+
@tag = Tag.find(1)
|
92
92
|
end
|
93
93
|
|
94
94
|
def test_valid_tag
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- LeftClick B.V.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday_middleware
|
@@ -296,27 +296,27 @@ signing_key:
|
|
296
296
|
specification_version: 4
|
297
297
|
summary: LeftClick web services library for Ruby
|
298
298
|
test_files:
|
299
|
+
- test/presence_test.rb
|
300
|
+
- test/fixtures/permissions.yml
|
301
|
+
- test/fixtures/auth.yml
|
302
|
+
- test/corporate_website_test.rb
|
303
|
+
- test/logger_test.rb
|
299
304
|
- test/support/with_env.rb
|
300
|
-
- test/json_parser_test.rb
|
301
|
-
- test/test_helper.rb
|
302
|
-
- test/setup_test.rb
|
303
|
-
- test/ticket_test.rb
|
304
|
-
- test/api_token_middleware_test.rb
|
305
305
|
- test/stubbing_test.rb
|
306
|
-
- test/
|
306
|
+
- test/ticket_test.rb
|
307
307
|
- test/digital_signage_test.rb
|
308
|
-
- test/
|
309
|
-
- test/logger_test.rb
|
308
|
+
- test/caching_test.rb
|
310
309
|
- test/auth_test.rb
|
311
|
-
- test/resource_test.rb
|
312
310
|
- test/maps_test.rb
|
313
|
-
- test/
|
314
|
-
- test/
|
315
|
-
- test/config/empty.yml
|
311
|
+
- test/json_parser_test.rb
|
312
|
+
- test/resource_test.rb
|
316
313
|
- test/config/endpoints.yml
|
317
|
-
- test/config/invalid.yml
|
318
314
|
- test/config/switch_env.yml
|
315
|
+
- test/config/invalid.yml
|
316
|
+
- test/config/empty.yml
|
317
|
+
- test/config/tokens.yml
|
319
318
|
- test/config/full.yml
|
320
|
-
- test/
|
321
|
-
- test/
|
322
|
-
- test/
|
319
|
+
- test/setup_test.rb
|
320
|
+
- test/api_token_middleware_test.rb
|
321
|
+
- test/generic_test.rb
|
322
|
+
- test/test_helper.rb
|