@@ -76,4 +76,77 @@ describe('SageMaker URI handler', function () {
7676 assert . ok ( deeplinkConnectStub . calledOnce )
7777 assert . deepStrictEqual ( deeplinkConnectStub . firstCall . args [ 6 ] , undefined )
7878 } )
79+
80+ it ( 'properly encodes cell-number with spaces and special characters' , async function ( ) {
81+ const params = {
82+ connection_identifier : 'abc123' ,
83+ domain : 'my-domain' ,
84+ user_profile : 'me' ,
85+ session : 'sess-xyz' ,
86+ ws_url : 'wss://example.com' ,
87+ 'cell-number' : 'test/data with spaces' ,
88+ token : 'my-token' ,
89+ }
90+
91+ const uri = createConnectUri ( params )
92+ await handler . handleUri ( uri )
93+
94+ assert . ok ( deeplinkConnectStub . calledOnce )
95+ // Verify cell-number is properly encoded
96+ const expectedUrl = 'wss://example.com&cell-number=test%2Fdata%20with%20spaces'
97+ assert . deepStrictEqual ( deeplinkConnectStub . firstCall . args [ 3 ] , expectedUrl )
98+ } )
99+
100+ it ( 'includes AMZ headers in WebSocket URL when provided' , async function ( ) {
101+ const params = {
102+ connection_identifier : 'abc123' ,
103+ domain : 'my-domain' ,
104+ user_profile : 'me' ,
105+ session : 'sess-xyz' ,
106+ ws_url : 'wss://example.com' ,
107+ 'cell-number' : 'test123' ,
108+ token : 'my-token' ,
109+ 'X-Amz-Security-Token' : 'fake/token+with=special' ,
110+ 'X-Amz-Algorithm' : 'AWS4-HMAC-SHA256' ,
111+ 'X-Amz-Date' : '20240101T120000Z' ,
112+ 'X-Amz-SignedHeaders' : 'host' ,
113+ 'X-Amz-Credential' : 'AKIATEST/20240101/us-west-2/ssmmessages/aws4_request' ,
114+ 'X-Amz-Expires' : '60' ,
115+ 'X-Amz-Signature' : 'fakesignature123' ,
116+ }
117+
118+ const uri = createConnectUri ( params )
119+ await handler . handleUri ( uri )
120+
121+ assert . ok ( deeplinkConnectStub . calledOnce )
122+ const actualUrl = deeplinkConnectStub . firstCall . args [ 3 ]
123+
124+ // Verify all AMZ headers are included and properly encoded
125+ assert . ok ( actualUrl . includes ( 'cell-number=test123' ) )
126+ assert . ok ( actualUrl . includes ( 'X-Amz-Security-Token=fake%2Ftoken%2Bwith%3Dspecial' ) )
127+ assert . ok ( actualUrl . includes ( 'X-Amz-Algorithm=AWS4-HMAC-SHA256' ) )
128+ assert . ok ( actualUrl . includes ( 'X-Amz-Date=20240101T120000Z' ) )
129+ assert . ok ( actualUrl . includes ( 'X-Amz-SignedHeaders=host' ) )
130+ assert . ok ( actualUrl . includes ( 'X-Amz-Credential=AKIATEST%2F20240101%2Fus-west-2%2Fssmmessages%2Faws4_request' ) )
131+ assert . ok ( actualUrl . includes ( 'X-Amz-Expires=60' ) )
132+ assert . ok ( actualUrl . includes ( 'X-Amz-Signature=fakesignature123' ) )
133+ } )
134+
135+ it ( 'works without AMZ headers' , async function ( ) {
136+ const params = {
137+ connection_identifier : 'abc123' ,
138+ domain : 'my-domain' ,
139+ user_profile : 'me' ,
140+ session : 'sess-xyz' ,
141+ ws_url : 'wss://example.com' ,
142+ 'cell-number' : 'simple' ,
143+ token : 'my-token' ,
144+ }
145+
146+ const uri = createConnectUri ( params )
147+ await handler . handleUri ( uri )
148+
149+ assert . ok ( deeplinkConnectStub . calledOnce )
150+ assert . deepStrictEqual ( deeplinkConnectStub . firstCall . args [ 3 ] , 'wss://example.com&cell-number=simple' )
151+ } )
79152} )
0 commit comments