@@ -4,6 +4,7 @@ defmodule NervesHubWeb.DeviceChannelTest do
44
55 import TrackerHelper
66
7+ alias NervesHub.Devices
78 alias NervesHub.Fixtures
89 alias NervesHubWeb.DeviceChannel
910 alias NervesHubWeb.DeviceSocket
@@ -130,6 +131,63 @@ defmodule NervesHubWeb.DeviceChannelTest do
130131 assert device . latest_connection . metadata [ "connection_types" ] == [ "ethernet" , "wifi" ]
131132 end
132133
134+ test "deployment information is updated when the deployment is cleared" do
135+ user = Fixtures . user_fixture ( )
136+ { device , _firmware , deployment } = device_fixture ( user , % { identifier: "123" } )
137+ Devices . update_deployment ( device , deployment )
138+
139+ % { db_cert: certificate , cert: _cert } = Fixtures . device_certificate_fixture ( device )
140+
141+ { :ok , socket } =
142+ connect ( DeviceSocket , % { } , connect_info: % { peer_data: % { ssl_cert: certificate . der } } )
143+
144+ { :ok , _join_reply , socket } =
145+ subscribe_and_join ( socket , DeviceChannel , "device" )
146+
147+ refute is_nil ( socket . assigns . device . deployment_id )
148+ refute is_nil ( socket . assigns . deployment_channel )
149+
150+ Devices . clear_deployment ( device )
151+
152+ # we need to let the channel process all messages before we can
153+ # check the state of the device's connection types
154+ socket = :sys . get_state ( socket . channel_pid )
155+
156+ assert is_nil ( socket . assigns . device . deployment_id )
157+ assert is_nil ( socket . assigns . deployment_channel )
158+ end
159+
160+ test "deployment information is updated when the device joins a new deployment" do
161+ user = Fixtures . user_fixture ( )
162+ { device , firmware , deployment } = device_fixture ( user , % { identifier: "123" } )
163+ Devices . update_deployment ( device , deployment )
164+
165+ % { db_cert: certificate , cert: _cert } = Fixtures . device_certificate_fixture ( device )
166+
167+ { :ok , socket } =
168+ connect ( DeviceSocket , % { } , connect_info: % { peer_data: % { ssl_cert: certificate . der } } )
169+
170+ { :ok , _join_reply , socket } =
171+ subscribe_and_join ( socket , DeviceChannel , "device" )
172+
173+ assert socket . assigns . device . deployment_id == deployment . id
174+ refute is_nil ( socket . assigns . deployment_channel )
175+
176+ device = NervesHub.Repo . preload ( device , :org )
177+
178+ new_deployment =
179+ Fixtures . deployment_fixture ( device . org , firmware , % { name: "Super Deployment" } )
180+
181+ Devices . update_deployment ( device , new_deployment )
182+
183+ # we need to let the channel process all messages before we can
184+ # check the state of the device's connection types
185+ socket = :sys . get_state ( socket . channel_pid )
186+
187+ assert socket . assigns . device . deployment_id == new_deployment . id
188+ refute is_nil ( socket . assigns . deployment_channel )
189+ end
190+
133191 describe "unhandled messages are caught" do
134192 test "handle_info" do
135193 user = Fixtures . user_fixture ( )
0 commit comments