@@ -1268,14 +1268,76 @@ async def test_start_connect_account_calls_connect_and_builds_url(mocker):
12681268 mock_transaction_store = AsyncMock ()
12691269 mock_state_store = AsyncMock ()
12701270
1271+ client = ServerClient (
1272+ domain = "auth0.local" ,
1273+ client_id = "<client_id>" ,
1274+ client_secret = "<client_secret>" ,
1275+ state_store = mock_state_store ,
1276+ transaction_store = mock_transaction_store ,
1277+ secret = "some-secret"
1278+ )
1279+
1280+ mocker .patch .object (client , "get_access_token" , AsyncMock (return_value = "<access_token>" ))
1281+ mock_my_account_client = AsyncMock (MyAccountClient )
1282+ mocker .patch .object (client , "_my_account_client" , mock_my_account_client )
1283+ mock_my_account_client .connect_account .return_value = ConnectAccountResponse (
1284+ auth_session = "<auth_session>" ,
1285+ connect_uri = "http://auth0.local/connected_accounts/connect" ,
1286+ connect_params = ConnectParams (
1287+ ticket = "ticket123" ,
1288+ ),
1289+ expires_in = 300
1290+ )
1291+
1292+ mocker .patch .object (PKCE , "generate_random_string" , return_value = "<state>" )
1293+ mocker .patch .object (PKCE , "generate_code_verifier" , return_value = "<code_verifier>" )
1294+ mocker .patch .object (PKCE , "generate_code_challenge" , return_value = "<code_challenge>" )
1295+
1296+ # Act
1297+ url = await client .start_connect_account (
1298+ options = ConnectAccountOptions (
1299+ connection = "<connection>" ,
1300+ redirect_uri = "/test_redirect_uri"
1301+ )
1302+ )
1303+
1304+ # Assert
1305+ assert url == "http://auth0.local/connected_accounts/connect?ticket=ticket123"
1306+ mock_my_account_client .connect_account .assert_awaited_with (
1307+ access_token = "<access_token>" ,
1308+ request = ConnectAccountRequest (
1309+ connection = "<connection>" ,
1310+ redirect_uri = "/test_redirect_uri" ,
1311+ code_challenge_method = "S256" ,
1312+ code_challenge = "<code_challenge>" ,
1313+ state = "<state>"
1314+ )
1315+ )
1316+ mock_transaction_store .set .assert_awaited_with (
1317+ "_a0_tx:<state>" ,
1318+ TransactionData (
1319+ code_verifier = "<code_verifier>" ,
1320+ app_state = "<state>" ,
1321+ auth_session = "<auth_session>" ,
1322+ redirect_uri = "/test_redirect_uri"
1323+ ),
1324+ options = ANY
1325+ )
1326+
1327+ @pytest .mark .asyncio
1328+ async def test_start_connect_account_default_redirect_uri (mocker ):
1329+ # Setup
1330+ mock_transaction_store = AsyncMock ()
1331+ mock_state_store = AsyncMock ()
1332+
12711333 client = ServerClient (
12721334 domain = "auth0.local" ,
12731335 client_id = "<client_id>" ,
12741336 client_secret = "<client_secret>" ,
12751337 state_store = mock_state_store ,
12761338 transaction_store = mock_transaction_store ,
12771339 secret = "some-secret" ,
1278- redirect_uri = "/test_redirect_uri "
1340+ redirect_uri = "/default_redirect_uri "
12791341 )
12801342
12811343 mocker .patch .object (client , "get_access_token" , AsyncMock (return_value = "<access_token>" ))
@@ -1298,7 +1360,7 @@ async def test_start_connect_account_calls_connect_and_builds_url(mocker):
12981360 url = await client .start_connect_account (
12991361 options = ConnectAccountOptions (
13001362 connection = "<connection>"
1301- ),
1363+ )
13021364 )
13031365
13041366 # Assert
@@ -1307,7 +1369,7 @@ async def test_start_connect_account_calls_connect_and_builds_url(mocker):
13071369 access_token = "<access_token>" ,
13081370 request = ConnectAccountRequest (
13091371 connection = "<connection>" ,
1310- redirect_uri = "/test_redirect_uri " ,
1372+ redirect_uri = "/default_redirect_uri " ,
13111373 code_challenge_method = "S256" ,
13121374 code_challenge = "<code_challenge>" ,
13131375 state = "<state>"
@@ -1319,10 +1381,37 @@ async def test_start_connect_account_calls_connect_and_builds_url(mocker):
13191381 code_verifier = "<code_verifier>" ,
13201382 app_state = "<state>" ,
13211383 auth_session = "<auth_session>" ,
1384+ redirect_uri = "/default_redirect_uri"
13221385 ),
13231386 options = ANY
13241387 )
13251388
1389+ @pytest .mark .asyncio
1390+ async def test_start_connect_account_no_redirect_uri (mocker ):
1391+ # Setup
1392+ mock_transaction_store = AsyncMock ()
1393+ mock_state_store = AsyncMock ()
1394+
1395+ client = ServerClient (
1396+ domain = "auth0.local" ,
1397+ client_id = "<client_id>" ,
1398+ client_secret = "<client_secret>" ,
1399+ state_store = mock_state_store ,
1400+ transaction_store = mock_transaction_store ,
1401+ secret = "some-secret"
1402+ )
1403+
1404+ # Act
1405+ with pytest .raises (MissingRequiredArgumentError ) as exc :
1406+ await client .start_connect_account (
1407+ options = ConnectAccountOptions (
1408+ connection = "<connection>"
1409+ )
1410+ )
1411+
1412+ # Assert
1413+ assert "redirect_uri" in str (exc .value )
1414+
13261415@pytest .mark .asyncio
13271416async def test_complete_connect_account_calls_complete (mocker ):
13281417 # Setup
@@ -1347,6 +1436,7 @@ async def test_complete_connect_account_calls_complete(mocker):
13471436 code_verifier = "<code_verifier>" ,
13481437 app_state = "<state>" ,
13491438 auth_session = "<auth_session>" ,
1439+ redirect_uri = "/test_redirect_uri"
13501440 )
13511441
13521442 # Act
@@ -1366,7 +1456,6 @@ async def test_complete_connect_account_calls_complete(mocker):
13661456 )
13671457 )
13681458
1369-
13701459@pytest .mark .asyncio
13711460async def test_complete_connect_account_no_transactions (mocker ):
13721461 # Setup
0 commit comments