Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:
permissions:
contents: read
pull-requests: write
issues: write

jobs:
test:
Expand Down
14 changes: 8 additions & 6 deletions src/workato_platform/cli/utils/config/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,16 +245,18 @@ async def _setup_profile(self) -> str:
sys.exit(1)

if answers["profile_choice"] == "Create new profile":
profile_name = click.prompt("Enter new profile name", type=str).strip()
profile_name = (
await click.prompt("Enter new profile name", type=str)
).strip()
if not profile_name:
click.echo("❌ Profile name cannot be empty")
sys.exit(1)
await self._create_new_profile(profile_name)
else:
profile_name = answers["profile_choice"]
else:
profile_name = click.prompt(
"Enter profile name", default="default", type=str
profile_name = (
await click.prompt("Enter profile name", default="default", type=str)
).strip()
if not profile_name:
click.echo("❌ Profile name cannot be empty")
Expand Down Expand Up @@ -301,7 +303,7 @@ async def _create_new_profile(self, profile_name: str) -> None:

# Handle custom URL
if selected_region.region == "custom":
custom_url = click.prompt(
custom_url = await click.prompt(
"Enter your custom Workato base URL",
type=str,
default="https://www.workato.com",
Expand All @@ -312,7 +314,7 @@ async def _create_new_profile(self, profile_name: str) -> None:

# Get API token
click.echo("🔐 Enter your API token")
token = click.prompt("Enter your Workato API token", hide_input=True)
token = await click.prompt("Enter your Workato API token", hide_input=True)
if not token.strip():
click.echo("❌ No token provided")
sys.exit(1)
Expand Down Expand Up @@ -412,7 +414,7 @@ async def _setup_project(self, profile_name: str, workspace_root: Path) -> None:
selected_project = None

if answers["project"] == "Create new project":
project_name = click.prompt("Enter project name", type=str)
project_name = await click.prompt("Enter project name", type=str)
if not project_name or not project_name.strip():
click.echo("❌ Project name cannot be empty")
sys.exit(1)
Expand Down
46 changes: 32 additions & 14 deletions tests/unit/config/test_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -1224,7 +1224,7 @@ async def test_setup_profile_and_project_new_flow(
"Enter project name": ["DemoProject"],
}

def fake_prompt(message: str, **_: object) -> str:
async def fake_prompt(message: str, **_: object) -> str:
values = prompt_answers.get(message)
assert values, f"Unexpected prompt: {message}"
return values.pop(0)
Expand Down Expand Up @@ -1316,9 +1316,12 @@ async def test_setup_profile_rejects_blank_new_profile(
lambda _questions: {"profile_choice": "Create new profile"},
)

async def mock_prompt(message: str, **_: Any) -> str:
return " " if "profile name" in message else "value"

monkeypatch.setattr(
ConfigManager.__module__ + ".click.prompt",
lambda message, **_: " " if "profile name" in message else "value",
mock_prompt,
)

with pytest.raises(SystemExit):
Expand All @@ -1336,9 +1339,13 @@ async def test_setup_profile_requires_nonempty_first_prompt(
ConfigManager.__module__ + ".inquirer.prompt",
lambda _questions: None,
)

async def mock_prompt2(message: str, **_: Any) -> str:
return " " if "Enter profile name" in message else "value"

monkeypatch.setattr(
ConfigManager.__module__ + ".click.prompt",
lambda message, **_: " " if "Enter profile name" in message else "value",
mock_prompt2,
)

with pytest.raises(SystemExit):
Expand Down Expand Up @@ -1410,7 +1417,7 @@ async def test_create_new_profile_custom_region(
"Enter your Workato API token": ["custom-token"],
}

def fake_prompt(message: str, **_: Any) -> str:
async def fake_prompt(message: str, **_: Any) -> str:
values = prompt_answers.get(message)
assert values, f"Unexpected prompt: {message}"
return values.pop(0)
Expand Down Expand Up @@ -1479,7 +1486,7 @@ async def test_create_new_profile_requires_token(
lambda _questions: {"region": "US Data Center (https://www.workato.com)"},
)

def fake_prompt(message: str, **_: Any) -> str:
async def fake_prompt(message: str, **_: Any) -> str:
if "API token" in message:
return " "
return "unused"
Expand Down Expand Up @@ -1515,9 +1522,13 @@ async def test_setup_profile_existing_create_new_success(
ConfigManager.__module__ + ".inquirer.prompt",
lambda _questions: {"profile_choice": "Create new profile"},
)

async def mock_prompt3(message: str, **_: Any) -> str:
return "newprofile" if "profile name" in message else "value"

monkeypatch.setattr(
ConfigManager.__module__ + ".click.prompt",
lambda message, **_: "newprofile" if "profile name" in message else "value",
mock_prompt3,
)

create_mock = AsyncMock(return_value=None)
Expand Down Expand Up @@ -1723,11 +1734,13 @@ async def test_setup_project_in_subdirectory(
ConfigManager.__module__ + ".inquirer.prompt",
lambda qs: answers[qs[0].message],
)

async def mock_prompt4(message: str, **_: Any) -> str:
return "NestedProj" if message == "Enter project name" else "token"

monkeypatch.setattr(
ConfigManager.__module__ + ".click.prompt",
lambda message, **_: "NestedProj"
if message == "Enter project name"
else "token",
mock_prompt4,
)

manager = ConfigManager(config_dir=workspace_root, skip_validation=True)
Expand Down Expand Up @@ -2066,7 +2079,7 @@ async def test_setup_project_path_validation_failure(
def fake_prompt(questions: list[Any]) -> dict[str, str]:
return answers[questions[0].message]

def fake_click_prompt(message: str, **_: object) -> str:
async def fake_click_prompt(message: str, **_: object) -> str:
if message == "Enter project name":
return "NewProj"
if "API token" in message:
Expand Down Expand Up @@ -2143,11 +2156,13 @@ async def test_setup_project_blocks_non_empty_directory(
ConfigManager.__module__ + ".inquirer.prompt",
lambda qs: answers[qs[0].message],
)

async def mock_prompt5(message: str, **_: Any) -> str:
return "NewProj" if message == "Enter project name" else "token"

monkeypatch.setattr(
ConfigManager.__module__ + ".click.prompt",
lambda message, **_: "NewProj"
if message == "Enter project name"
else "token",
mock_prompt5,
)

manager = ConfigManager(config_dir=workspace_root, skip_validation=True)
Expand Down Expand Up @@ -2175,9 +2190,12 @@ async def test_setup_project_requires_project_name(
StubProjectManager,
)

async def mock_prompt6(message: str, **_: Any) -> str:
return " " if message == "Enter project name" else "token"

monkeypatch.setattr(
ConfigManager.__module__ + ".click.prompt",
lambda message, **_: " " if message == "Enter project name" else "token",
mock_prompt6,
)

def prompt_create_new(questions: list[Any]) -> dict[str, str]:
Expand Down
Loading