@@ -293,7 +293,7 @@ def test_token_endpoint_with_none_params(self, mock_get_parameters):
293293 server .token_endpoint ()
294294
295295 @patch ("rsconnect.api.get_parameters" )
296- def test_fmt_payload (self , mock_get_parameters ):
296+ def test_fmt_payload_jwt_uppercase (self , mock_get_parameters ):
297297 server = SPCSConnectServer ("https://spcs.example.com" , "test-api-key" , "example_connection" )
298298 mock_get_parameters .return_value = {
299299 "account" : "test_account" ,
@@ -315,6 +315,50 @@ def test_fmt_payload(self, mock_get_parameters):
315315 mock_get_parameters .assert_called_once_with ("example_connection" )
316316 mock_generate_jwt .assert_called_once_with ("example_connection" )
317317
318+ @patch ("rsconnect.api.get_parameters" )
319+ def test_fmt_payload_jwt_lowercase (self , mock_get_parameters ):
320+ server = SPCSConnectServer ("https://spcs.example.com" , "test-api-key" , "example_connection" )
321+ mock_get_parameters .return_value = {
322+ "account" : "test_account" ,
323+ "role" : "test_role" ,
324+ "authenticator" : "snowflake_jwt" ,
325+ }
326+
327+ with patch ("rsconnect.api.generate_jwt" ) as mock_generate_jwt :
328+ mock_generate_jwt .return_value = "mocked_jwt"
329+ payload = server .fmt_payload ()
330+
331+ assert (
332+ payload ["body" ]
333+ == "scope=session%3Arole%3Atest_role+spcs.example.com&assertion=mocked_jwt&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer" # noqa
334+ )
335+ assert payload ["headers" ] == {"Content-Type" : "application/x-www-form-urlencoded" }
336+ assert payload ["path" ] == "/oauth/token"
337+
338+ mock_get_parameters .assert_called_once_with ("example_connection" )
339+ mock_generate_jwt .assert_called_once_with ("example_connection" )
340+
341+ @patch ("rsconnect.api.get_parameters" )
342+ def test_fmt_payload_with_unsupported_authenticator (self , mock_get_parameters ):
343+ server = SPCSConnectServer ("https://spcs.example.com" , "test-api-key" , "example_connection" )
344+ mock_get_parameters .return_value = {
345+ "account" : "test_account" ,
346+ "role" : "test_role" ,
347+ "authenticator" : "unrecognized" ,
348+ }
349+ with pytest .raises (NotImplementedError , match = "Unsupported authenticator for SPCS Connect: unrecognized" ):
350+ server .fmt_payload ()
351+
352+ @patch ("rsconnect.api.get_parameters" )
353+ def test_fmt_payload_with_no_authenticator (self , mock_get_parameters ):
354+ server = SPCSConnectServer ("https://spcs.example.com" , "test-api-key" , "example_connection" )
355+ mock_get_parameters .return_value = {
356+ "account" : "test_account" ,
357+ "role" : "test_role" ,
358+ }
359+ with pytest .raises (NotImplementedError , match = "Snowflake connection does not declare an authenticator." ):
360+ server .fmt_payload ()
361+
318362 @patch ("rsconnect.api.get_parameters" )
319363 def test_fmt_payload_with_none_params (self , mock_get_parameters ):
320364 server = SPCSConnectServer ("https://spcs.example.com" , "test-api-key" , "example_connection" )
0 commit comments