@@ -22,6 +22,7 @@ module PlaceOS::Api
2222 item2_id = item2.id.as(String )
2323
2424 revision.items = [item1_id, item2_id]
25+ revision.approved = true
2526 revision.save!
2627 playlist = revision.playlist.as(Model ::Playlist )
2728 playlist_id = playlist.id.as(String )
@@ -67,6 +68,7 @@ module PlaceOS::Api
6768 item2_id = item2.id.as(String )
6869
6970 revision.items = [item1_id, item2_id]
71+ revision.approved = true
7072 revision.save!
7173 playlist = revision.playlist.as(Model ::Playlist )
7274 playlist_id = playlist.id.as(String )
@@ -106,6 +108,74 @@ module PlaceOS::Api
106108 item2.reload!
107109 item2.play_count.should eq 2
108110 end
111+
112+ it " can approve digital signage playlists" do
113+ revision = Model ::Generator .revision
114+
115+ item = Model ::Generator .item
116+ item.save!
117+ item1_id = item.id.as(String )
118+ item2 = Model ::Generator .item
119+ item2.save!
120+ item2_id = item2.id.as(String )
121+
122+ revision.items = [item1_id, item2_id]
123+ revision.save!
124+ revision.approved.should be_false
125+ playlist = revision.playlist.as(Model ::Playlist )
126+ playlist_id = playlist.id.as(String )
127+
128+ system = Model ::Generator .control_system
129+ system.signage = true
130+ system.playlists = [playlist_id]
131+ system.save!
132+ system_id = system.id.as(String )
133+
134+ headers = Spec ::Authentication .headers
135+
136+ result = client.get(
137+ path: " #{ Signage .base_route} /#{ system_id } " ,
138+ headers: headers,
139+ )
140+
141+ json = JSON .parse result.body
142+ json[" playlist_mappings" ].should eq({system_id => [playlist_id]})
143+ json[" playlist_config" ][playlist_id][0 ][" id" ].should eq playlist_id
144+ json[" playlist_config" ][playlist_id][1 ].should eq [] of String
145+
146+ # skip forward a moment to avoid a 304
147+ sleep 1
148+
149+ # we should now approve the playlist
150+ approved = client.post(
151+ path: " #{ Signage .base_route} /playlists/#{ playlist_id } /approve" ,
152+ headers: Spec ::Authentication .headers,
153+ )
154+ approved.status_code.should eq 200
155+
156+ # revision timestamp should have changed
157+ updated_at = revision.updated_at
158+ revision.reload!
159+ revision.approved.should be_true
160+ revision.updated_at.should_not eq updated_at
161+
162+ system.playlists_last_updated.should eq revision.updated_at
163+
164+ # the route should have modified
165+ headers[" If-Modified-Since" ] = result.headers[" Last-Modified" ]
166+ result = client.get(
167+ path: " #{ Signage .base_route} /#{ system_id } " ,
168+ headers: headers,
169+ )
170+ result.status_code.should_not eq 304
171+
172+ json = JSON .parse result.body
173+ json[" playlist_mappings" ].should eq({system_id => [playlist_id]})
174+ json[" playlist_config" ][playlist_id][0 ][" id" ].should eq playlist_id
175+ json[" playlist_config" ][playlist_id][1 ].should eq [item1_id, item2_id]
176+ json[" playlist_media" ][0 ][" id" ].should eq item1_id
177+ json[" playlist_media" ][1 ][" id" ].should eq item2_id
178+ end
109179 end
110180 end
111181end
0 commit comments