@@ -1364,6 +1364,32 @@ async def test_returns_update_or_create_action_on_conf_change(
13641364 assert response_json ["action" ] == action
13651365 assert response_json ["current_resource" ] == json .loads (run .json ())
13661366
1367+ @pytest .mark .asyncio
1368+ @pytest .mark .usefixtures ("test_db" )
1369+ async def test_generates_user_ssh_key (self , session : AsyncSession , client : AsyncClient ):
1370+ user = await create_user (
1371+ session = session , global_role = GlobalRole .USER , ssh_public_key = None , ssh_private_key = None
1372+ )
1373+ project = await create_project (session = session , owner = user )
1374+ await add_project_member (
1375+ session = session , project = project , user = user , project_role = ProjectRole .USER
1376+ )
1377+ repo = await create_repo (session = session , project_id = project .id )
1378+ run_spec = get_run_spec (run_name = "test-run" , repo_id = repo .name , ssh_key_pub = None )
1379+
1380+ response = await client .post (
1381+ f"/api/project/{ project .name } /runs/get_plan" ,
1382+ headers = get_auth_headers (user .token ),
1383+ json = {"run_spec" : run_spec .dict ()},
1384+ )
1385+
1386+ assert response .status_code == 200 , response .json ()
1387+ run_spec_ssh_public_key = response .json ()["effective_run_spec" ]["ssh_key_pub" ]
1388+ assert run_spec_ssh_public_key is not None
1389+ await session .refresh (user )
1390+ assert user .ssh_public_key == run_spec_ssh_public_key
1391+ assert user .ssh_private_key is not None
1392+
13671393
13681394class TestApplyPlan :
13691395 @pytest .mark .asyncio
@@ -1517,6 +1543,38 @@ async def test_creates_pending_run_if_run_is_scheduled(
15171543 assert run .status == RunStatus .PENDING
15181544 assert run .next_triggered_at == datetime (2023 , 1 , 2 , 3 , 10 , tzinfo = timezone .utc )
15191545
1546+ @pytest .mark .asyncio
1547+ @pytest .mark .usefixtures ("test_db" )
1548+ async def test_generates_user_ssh_key (self , session : AsyncSession , client : AsyncClient ):
1549+ user = await create_user (
1550+ session = session , global_role = GlobalRole .USER , ssh_public_key = None , ssh_private_key = None
1551+ )
1552+ project = await create_project (session = session , owner = user )
1553+ await add_project_member (
1554+ session = session , project = project , user = user , project_role = ProjectRole .USER
1555+ )
1556+ repo = await create_repo (session = session , project_id = project .id )
1557+ run_spec = get_run_spec (run_name = "test-run" , repo_id = repo .name , ssh_key_pub = None )
1558+
1559+ response = await client .post (
1560+ f"/api/project/{ project .name } /runs/apply" ,
1561+ headers = get_auth_headers (user .token ),
1562+ json = {
1563+ "plan" : {
1564+ "run_spec" : run_spec .dict (),
1565+ "current_resource" : None ,
1566+ },
1567+ "force" : False ,
1568+ },
1569+ )
1570+
1571+ assert response .status_code == 200 , response .json ()
1572+ run_spec_ssh_public_key = response .json ()["run_spec" ]["ssh_key_pub" ]
1573+ assert run_spec_ssh_public_key is not None
1574+ await session .refresh (user )
1575+ assert user .ssh_public_key == run_spec_ssh_public_key
1576+ assert user .ssh_private_key is not None
1577+
15201578
15211579class TestSubmitRun :
15221580 @pytest .mark .asyncio
0 commit comments