minitest-cli 0.27.0__tar.gz → 0.27.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/PKG-INFO +5 -2
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/README.md +4 -1
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/pyproject.toml +1 -1
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/apps.py +3 -2
- minitest_cli-0.27.2/src/minitest_cli/commands/apps_get.py +43 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/apps_helpers.py +15 -2
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_apps_commands.py +98 -1
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/uv.lock +1 -1
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/.env.example +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/.github/workflows/ci.yml +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/.github/workflows/install-scripts.yml +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/.github/workflows/release.yml +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/.gitignore +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/.opencode/skill/release/SKILL.md +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/AGENTS.md +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/RELEASE.md +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/install.ps1 +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/install.sh +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/pyrightconfig.json +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/renovate.json +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/__init__.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/api/__init__.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/api/apps_manager_client.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/api/client.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/api/errors.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/assets/__init__.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/assets/callback.html +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/__init__.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/_response_errors.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/app_knowledge.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/app_knowledge_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/apps_dependencies.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/auth.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/auth_api_key.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/batch.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/batch_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/build.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/build_commit.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/build_fix_prompts.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/build_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/capabilities.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/commit_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/draft_feature.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/draft_feature_apply.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/draft_feature_conflicts.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/draft_feature_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/draft_feature_show.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/env.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/env_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/flow_types.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/flow_types_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/flow_types_write.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/init.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/init_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/init_playbook.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/issues.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/issues_fix.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/issues_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/issues_projection.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/issues_service.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/maintenance.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/maintenance_callbacks.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/maintenance_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/maintenance_state.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/run.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/run_commit.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/run_commit_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/run_display.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/run_feedback.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/run_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/run_targets.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/screens.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/screens_detail.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/screens_format.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/screens_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/screens_tree.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/skill.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/test_file.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/test_file_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/test_file_list.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/test_profile.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/test_profile_default.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/test_profile_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/test_profile_list.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/test_profile_update.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/upgrade.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_bindings.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_camera.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_create.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_criteria.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_criterion_edits.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_delete.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_device_count.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_modify.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_overrides.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_profiles.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_update.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/verdicts.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/verdicts_helpers.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/verdicts_projection.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/core/__init__.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/core/app_context.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/core/auth.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/core/config.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/core/credentials.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/core/oauth.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/core/tenants.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/core/token_exchange.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/main.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/__init__.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/app.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/app_env_vars.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/app_failure.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/app_screen.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/base.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/batch.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/build.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/commit_build.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/draft_feature.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/flow_type.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/issues.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/story_run.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/targets.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/models/user_story.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/utils/__init__.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/utils/confirm.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/utils/dependency_sim.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/utils/mermaid.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/utils/output.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/utils/skill_refresh.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/utils/update_check.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/__init__.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/_commit_transport.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_app_knowledge_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_apps_dependencies.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_auth.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_auth_api_key.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_auth_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_batch_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_build_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_build_fix_prompts.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_capabilities_command.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_channel_header.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_code_quality.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_commit_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_draft_feature_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_env.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_flow_types_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_init_command.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_issues.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_issues_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_mermaid.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_network_errors.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_response_errors.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_run_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_screens_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_skill_command.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_test_file_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_test_profile_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_upgrade_command.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_user_story_bindings_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_user_story_commands.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_verdicts.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_verdicts_actionable.py +0 -0
- {minitest_cli-0.27.0 → minitest_cli-0.27.2}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: minitest-cli
|
|
3
|
-
Version: 0.27.
|
|
3
|
+
Version: 0.27.2
|
|
4
4
|
Summary: Minitest CLI – command-line interface for the Minitest testing platform
|
|
5
5
|
Project-URL: Homepage, https://minitap.ai/
|
|
6
6
|
Project-URL: Source, https://github.com/minitap-ai/minitest-cli
|
|
@@ -91,6 +91,9 @@ minitest auth login
|
|
|
91
91
|
# List your apps
|
|
92
92
|
minitest apps list
|
|
93
93
|
|
|
94
|
+
# Inspect one app's full configuration
|
|
95
|
+
minitest apps get <app-id>
|
|
96
|
+
|
|
94
97
|
# Create a new app on your tenant
|
|
95
98
|
minitest apps create --name "My Mobile App" --platform ios --platform android
|
|
96
99
|
|
|
@@ -137,7 +140,7 @@ minitest --app <app-id> run all --ios-build <ios-build-id> --android-build <andr
|
|
|
137
140
|
| Command | Description |
|
|
138
141
|
| ---------------- | ------------------------- |
|
|
139
142
|
| `minitest auth` | Authentication management |
|
|
140
|
-
| `minitest apps` |
|
|
143
|
+
| `minitest apps` | List, inspect, and create apps |
|
|
141
144
|
| `minitest user-story` | User-story operations |
|
|
142
145
|
| `minitest df` | Draft features — branches of the test suite |
|
|
143
146
|
| `minitest flow-types` | List flow types, create/rename/delete custom ones |
|
|
@@ -58,6 +58,9 @@ minitest auth login
|
|
|
58
58
|
# List your apps
|
|
59
59
|
minitest apps list
|
|
60
60
|
|
|
61
|
+
# Inspect one app's full configuration
|
|
62
|
+
minitest apps get <app-id>
|
|
63
|
+
|
|
61
64
|
# Create a new app on your tenant
|
|
62
65
|
minitest apps create --name "My Mobile App" --platform ios --platform android
|
|
63
66
|
|
|
@@ -104,7 +107,7 @@ minitest --app <app-id> run all --ios-build <ios-build-id> --android-build <andr
|
|
|
104
107
|
| Command | Description |
|
|
105
108
|
| ---------------- | ------------------------- |
|
|
106
109
|
| `minitest auth` | Authentication management |
|
|
107
|
-
| `minitest apps` |
|
|
110
|
+
| `minitest apps` | List, inspect, and create apps |
|
|
108
111
|
| `minitest user-story` | User-story operations |
|
|
109
112
|
| `minitest df` | Draft features — branches of the test suite |
|
|
110
113
|
| `minitest flow-types` | List flow types, create/rename/delete custom ones |
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""App management commands: list, create, dependencies."""
|
|
1
|
+
"""App management commands: list, get, create, dependencies."""
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
from pathlib import Path
|
|
@@ -10,7 +10,7 @@ import typer
|
|
|
10
10
|
from minitest_cli.api.apps_manager_client import AppsManagerClient # noqa: F401 re-exported for tests
|
|
11
11
|
from minitest_cli.api.client import ApiClient
|
|
12
12
|
from minitest_cli.api.errors import format_network_error
|
|
13
|
-
from minitest_cli.commands import apps_dependencies
|
|
13
|
+
from minitest_cli.commands import apps_dependencies, apps_get
|
|
14
14
|
from minitest_cli.commands.apps_helpers import create_app_request
|
|
15
15
|
from minitest_cli.core.auth import require_auth
|
|
16
16
|
from minitest_cli.core.config import Settings
|
|
@@ -28,6 +28,7 @@ EXIT_NETWORK_ERROR = 3
|
|
|
28
28
|
|
|
29
29
|
app = typer.Typer(name="apps", help="App management.")
|
|
30
30
|
app.command(name="dependencies")(apps_dependencies.dependencies)
|
|
31
|
+
app.command(name="get")(apps_get.get_app)
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
@app.callback()
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from typing import Annotated
|
|
3
|
+
|
|
4
|
+
import httpx
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from minitest_cli.api.errors import format_network_error
|
|
8
|
+
from minitest_cli.commands.apps_helpers import get_app_request
|
|
9
|
+
from minitest_cli.commands.env_helpers import resolve_app_and_tenant
|
|
10
|
+
from minitest_cli.core.auth import require_auth
|
|
11
|
+
from minitest_cli.models.app import AppDetailResponse
|
|
12
|
+
from minitest_cli.utils.output import print_error, print_json
|
|
13
|
+
|
|
14
|
+
EXIT_NETWORK_ERROR = 3
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def get_app(
|
|
18
|
+
app_id: Annotated[str, typer.Argument(help="App ID.")],
|
|
19
|
+
) -> None:
|
|
20
|
+
settings = typer.Context.settings # type: ignore[attr-defined]
|
|
21
|
+
json_mode = typer.Context.json_mode # type: ignore[attr-defined]
|
|
22
|
+
require_auth(settings)
|
|
23
|
+
|
|
24
|
+
async def _run() -> AppDetailResponse:
|
|
25
|
+
resolved_app_id, tenant_id = await resolve_app_and_tenant(settings, app_id)
|
|
26
|
+
return await get_app_request(
|
|
27
|
+
settings,
|
|
28
|
+
tenant_id=tenant_id,
|
|
29
|
+
app_id=resolved_app_id,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
try:
|
|
33
|
+
detail = asyncio.run(_run())
|
|
34
|
+
except httpx.HTTPError as exc:
|
|
35
|
+
print_error(format_network_error(exc))
|
|
36
|
+
raise typer.Exit(code=EXIT_NETWORK_ERROR) from exc
|
|
37
|
+
|
|
38
|
+
payload = detail.model_dump(mode="json", by_alias=True)
|
|
39
|
+
if json_mode:
|
|
40
|
+
print_json(payload)
|
|
41
|
+
return
|
|
42
|
+
for key, value in payload.items():
|
|
43
|
+
print(f"{key}: {'-' if value is None else value}") # noqa: T201
|
|
@@ -33,7 +33,7 @@ def extract_backend_detail(resp: httpx.Response) -> str:
|
|
|
33
33
|
return resp.text or f"HTTP {resp.status_code}"
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
def
|
|
36
|
+
def handle_apps_manager_response_error(resp: httpx.Response) -> None:
|
|
37
37
|
"""Map a non-2xx apps-manager response to an exit code with a clean message."""
|
|
38
38
|
if resp.status_code < 400:
|
|
39
39
|
return
|
|
@@ -97,5 +97,18 @@ async def create_app_request(
|
|
|
97
97
|
if icon_handle is not None:
|
|
98
98
|
icon_handle.close()
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
handle_apps_manager_response_error(resp)
|
|
101
|
+
return AppDetailResponse.model_validate(resp.json())
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
async def get_app_request(
|
|
105
|
+
settings: Settings,
|
|
106
|
+
*,
|
|
107
|
+
tenant_id: str,
|
|
108
|
+
app_id: str,
|
|
109
|
+
) -> AppDetailResponse:
|
|
110
|
+
async with AppsManagerClient(settings) as client:
|
|
111
|
+
resp = await client.get(f"/api/v1/tenants/{tenant_id}/apps/{app_id}")
|
|
112
|
+
|
|
113
|
+
handle_apps_manager_response_error(resp)
|
|
101
114
|
return AppDetailResponse.model_validate(resp.json())
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Tests for minitest_cli.commands.apps — CLI commands list and create."""
|
|
1
|
+
"""Tests for minitest_cli.commands.apps — CLI commands list, get, and create."""
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
from datetime import UTC, datetime
|
|
@@ -199,6 +199,103 @@ class TestListApps:
|
|
|
199
199
|
assert "—" in result.output
|
|
200
200
|
|
|
201
201
|
|
|
202
|
+
class TestGetApp:
|
|
203
|
+
def test_json_output_fetches_full_record_from_apps_manager(self, tmp_path):
|
|
204
|
+
settings = _make_settings(tmp_path)
|
|
205
|
+
list_client = _mock_client(_mock_response(200, _APPS_DATA))
|
|
206
|
+
detail_client = _mock_client(_mock_response(200, _APP_RECORD))
|
|
207
|
+
|
|
208
|
+
with (
|
|
209
|
+
patch("minitest_cli.commands.env_helpers.ApiClient", return_value=list_client),
|
|
210
|
+
patch(
|
|
211
|
+
"minitest_cli.commands.apps_helpers.AppsManagerClient",
|
|
212
|
+
return_value=detail_client,
|
|
213
|
+
),
|
|
214
|
+
):
|
|
215
|
+
result = _run_with_context(["get", "aaa-111"], settings, json_mode=True)
|
|
216
|
+
|
|
217
|
+
assert result.exit_code == 0, result.output
|
|
218
|
+
payload = json.loads(result.output)
|
|
219
|
+
assert payload["id"] == "app-xyz"
|
|
220
|
+
assert payload["tenantId"] == "t-1"
|
|
221
|
+
assert payload["description"] == "A demo"
|
|
222
|
+
list_client.get.assert_called_once_with("/api/v1/apps")
|
|
223
|
+
detail_client.get.assert_called_once_with("/api/v1/tenants/t-1/apps/aaa-111")
|
|
224
|
+
|
|
225
|
+
def test_human_output_prints_app_details(self, tmp_path):
|
|
226
|
+
settings = _make_settings(tmp_path)
|
|
227
|
+
list_client = _mock_client(_mock_response(200, _APPS_DATA))
|
|
228
|
+
detail_client = _mock_client(_mock_response(200, _APP_RECORD))
|
|
229
|
+
|
|
230
|
+
with (
|
|
231
|
+
patch("minitest_cli.commands.env_helpers.ApiClient", return_value=list_client),
|
|
232
|
+
patch(
|
|
233
|
+
"minitest_cli.commands.apps_helpers.AppsManagerClient",
|
|
234
|
+
return_value=detail_client,
|
|
235
|
+
),
|
|
236
|
+
):
|
|
237
|
+
result = _run_with_context(["get", "aaa-111"], settings)
|
|
238
|
+
|
|
239
|
+
assert result.exit_code == 0, result.output
|
|
240
|
+
assert "name: Foo" in result.output
|
|
241
|
+
assert "tenantId: t-1" in result.output
|
|
242
|
+
assert "description: A demo" in result.output
|
|
243
|
+
|
|
244
|
+
def test_unknown_app_exits_not_found_without_calling_apps_manager(self, tmp_path):
|
|
245
|
+
settings = _make_settings(tmp_path)
|
|
246
|
+
list_client = _mock_client(_mock_response(200, _APPS_DATA))
|
|
247
|
+
detail_client = MagicMock()
|
|
248
|
+
|
|
249
|
+
with (
|
|
250
|
+
patch("minitest_cli.commands.env_helpers.ApiClient", return_value=list_client),
|
|
251
|
+
patch(
|
|
252
|
+
"minitest_cli.commands.apps_helpers.AppsManagerClient",
|
|
253
|
+
return_value=detail_client,
|
|
254
|
+
),
|
|
255
|
+
):
|
|
256
|
+
result = _run_with_context(["get", "missing"], settings)
|
|
257
|
+
|
|
258
|
+
assert result.exit_code == 4
|
|
259
|
+
assert "App not found" in result.output
|
|
260
|
+
detail_client.assert_not_called()
|
|
261
|
+
|
|
262
|
+
def test_apps_manager_not_found_exits_not_found(self, tmp_path):
|
|
263
|
+
settings = _make_settings(tmp_path)
|
|
264
|
+
list_client = _mock_client(_mock_response(200, _APPS_DATA))
|
|
265
|
+
detail_client = _mock_client(_mock_response(404, {"detail": "App not found"}))
|
|
266
|
+
|
|
267
|
+
with (
|
|
268
|
+
patch("minitest_cli.commands.env_helpers.ApiClient", return_value=list_client),
|
|
269
|
+
patch(
|
|
270
|
+
"minitest_cli.commands.apps_helpers.AppsManagerClient",
|
|
271
|
+
return_value=detail_client,
|
|
272
|
+
),
|
|
273
|
+
):
|
|
274
|
+
result = _run_with_context(["get", "aaa-111"], settings)
|
|
275
|
+
|
|
276
|
+
assert result.exit_code == 4
|
|
277
|
+
assert "App not found" in result.output
|
|
278
|
+
|
|
279
|
+
def test_network_error_exits_network_error(self, tmp_path):
|
|
280
|
+
settings = _make_settings(tmp_path)
|
|
281
|
+
list_client = _mock_client(_mock_response(200, _APPS_DATA))
|
|
282
|
+
detail_client = AsyncMock()
|
|
283
|
+
detail_client.__aenter__ = AsyncMock(return_value=detail_client)
|
|
284
|
+
detail_client.__aexit__ = AsyncMock(return_value=False)
|
|
285
|
+
detail_client.get = AsyncMock(side_effect=httpx.ConnectError("connection refused"))
|
|
286
|
+
|
|
287
|
+
with (
|
|
288
|
+
patch("minitest_cli.commands.env_helpers.ApiClient", return_value=list_client),
|
|
289
|
+
patch(
|
|
290
|
+
"minitest_cli.commands.apps_helpers.AppsManagerClient",
|
|
291
|
+
return_value=detail_client,
|
|
292
|
+
),
|
|
293
|
+
):
|
|
294
|
+
result = _run_with_context(["get", "aaa-111"], settings)
|
|
295
|
+
|
|
296
|
+
assert result.exit_code == 3
|
|
297
|
+
|
|
298
|
+
|
|
202
299
|
# ---------------------------------------------------------------------------
|
|
203
300
|
# `apps create` tests
|
|
204
301
|
# ---------------------------------------------------------------------------
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/app_knowledge_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/draft_feature_apply.py
RENAMED
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/draft_feature_conflicts.py
RENAMED
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/draft_feature_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/maintenance_callbacks.py
RENAMED
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/maintenance_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/test_profile_default.py
RENAMED
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/test_profile_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/test_profile_update.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_bindings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_criteria.py
RENAMED
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_criterion_edits.py
RENAMED
|
File without changes
|
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_device_count.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_overrides.py
RENAMED
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/user_story_profiles.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{minitest_cli-0.27.0 → minitest_cli-0.27.2}/src/minitest_cli/commands/verdicts_projection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|