test(frontend): add provider admin acceptance coverage
Add a dedicated acceptance script for providers.html, cover it in the local real-host script regression suite, and document the current frontend review baseline, closure audit, providers action matrix, and remediation task board. This keeps the frontend acceptance boundary explicit: providers.html now has a repeatable verification entry point for its page-level actions, while non-UI provider operations remain documented as backend-only capabilities.
This commit is contained in:
@@ -830,6 +830,131 @@ EOF
|
||||
assert_contains "$payloads" '"subscription_user_id": "36"'
|
||||
}
|
||||
|
||||
run_test_verify_provider_admin_actions_script() {
|
||||
local tmpdir fakebin artifact_dir state_dir stdout_file
|
||||
tmpdir="$(mktemp -d)"
|
||||
trap 'rm -rf "$tmpdir"' RETURN
|
||||
fakebin="$tmpdir/bin"
|
||||
artifact_dir="$tmpdir/artifacts"
|
||||
state_dir="$tmpdir/state"
|
||||
stdout_file="$tmpdir/verify_provider_admin_actions.stdout.txt"
|
||||
mkdir -p "$fakebin" "$artifact_dir" "$state_dir"
|
||||
|
||||
cat > "$fakebin/curl" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
method="GET"
|
||||
url=""
|
||||
payload=""
|
||||
output_file=""
|
||||
write_out=""
|
||||
prev=""
|
||||
for arg in "$@"; do
|
||||
case "$prev" in
|
||||
-X) method="$arg"; prev=""; continue ;;
|
||||
-d|--data) payload="$arg"; prev=""; continue ;;
|
||||
-o) output_file="$arg"; prev=""; continue ;;
|
||||
-w) write_out="$arg"; prev=""; continue ;;
|
||||
esac
|
||||
case "$arg" in
|
||||
-X|-d|--data|-o|-w) prev="$arg"; continue ;;
|
||||
http://*|https://*) url="$arg" ;;
|
||||
esac
|
||||
done
|
||||
state_dir="${FAKE_STATE_DIR:?missing FAKE_STATE_DIR}"
|
||||
write_body() {
|
||||
local body="$1"
|
||||
if [[ -n "$output_file" ]]; then
|
||||
printf '%s\n' "$body" > "$output_file"
|
||||
else
|
||||
printf '%s\n' "$body"
|
||||
fi
|
||||
}
|
||||
write_status() {
|
||||
local status="$1"
|
||||
if [[ -n "$write_out" ]]; then
|
||||
printf '%s' "$status"
|
||||
fi
|
||||
}
|
||||
case "$method $url" in
|
||||
"GET http://portal.example.com/providers.html")
|
||||
write_body '<html><title>Provider Admin</title><body>Provider Admin</body></html>'
|
||||
;;
|
||||
"GET http://crm.example.com/api/packs")
|
||||
write_body '{"packs":[{"pack_id":"openai-cn-pack","version":"1.1.9"}]}'
|
||||
;;
|
||||
"GET http://crm.example.com/api/hosts")
|
||||
write_body '{"hosts":[{"host_id":"remote43-current-host","base_url":"http://host.example.com","host_version":"0.1.129"}]}'
|
||||
;;
|
||||
"GET http://crm.example.com/api/packs/openai-cn-pack/providers")
|
||||
write_body '{"providers":[{"provider_id":"deepseek","display_name":"DeepSeek","platform":"openai","host_overlays":1}]}'
|
||||
;;
|
||||
"POST http://crm.example.com/api/providers/deepseek/preview-import")
|
||||
write_body '{"accepted_keys_count":1,"host_overlays":1,"names":["DeepSeek"],"decisions":[{"action":"accept"}]}'
|
||||
;;
|
||||
"POST http://crm.example.com/api/providers/deepseek/import")
|
||||
write_body '{"batch_id":321,"batch_status":"succeeded","provider_status":"ready","access_status":"self_service_ready","accepted_keys_count":1,"accounts_count":1,"host_overlays":1,"group":{"id":"g1"},"channel":{"id":"c1"},"plan":{"id":"p1"},"gateway":{"id":"gw1"}}'
|
||||
;;
|
||||
"POST http://crm.example.com/api/provider-drafts")
|
||||
if [[ "$payload" == *'provider-admin-publish-1700000003'* ]]; then
|
||||
printf '%s\n' present > "$state_dir/publish-draft.present"
|
||||
write_body '{"draft":{"draft_id":"draft_publish_001","pack_id":"openai-cn-pack","provider_id":"provider-admin-publish-1700000003","display_name":"Provider Admin Publish 1700000003","platform":"openai","base_url":"https://publish-1700000003.example.com/v1","smoke_test_model":"provider-admin-publish-1700000003","supported_models":["provider-admin-publish-1700000003"]}}'
|
||||
else
|
||||
printf '%s\n' present > "$state_dir/crud-draft.present"
|
||||
write_body '{"draft":{"draft_id":"draft_crud_001","pack_id":"openai-cn-pack","provider_id":"provider-admin-draft-1700000003","display_name":"Provider Admin Draft 1700000003","platform":"openai","base_url":"https://draft-1700000003.example.com/v1","smoke_test_model":"provider-admin-draft-1700000003","supported_models":["provider-admin-draft-1700000003","provider-admin-draft-mini-1700000003"]}}'
|
||||
fi
|
||||
;;
|
||||
"GET http://crm.example.com/api/provider-drafts?pack_id=openai-cn-pack")
|
||||
if [[ -f "$state_dir/crud-draft.present" ]]; then
|
||||
write_body '{"provider_drafts":[{"draft_id":"draft_crud_001","pack_id":"openai-cn-pack","provider_id":"provider-admin-draft-1700000003","display_name":"Provider Admin Draft 1700000003","platform":"openai"}]}'
|
||||
else
|
||||
write_body '{"provider_drafts":[]}'
|
||||
fi
|
||||
;;
|
||||
"GET http://crm.example.com/api/provider-drafts/draft_crud_001")
|
||||
write_body '{"draft":{"draft_id":"draft_crud_001","pack_id":"openai-cn-pack","provider_id":"provider-admin-draft-1700000003","display_name":"Provider Admin Draft 1700000003","platform":"openai","base_url":"https://draft-1700000003.example.com/v1","smoke_test_model":"provider-admin-draft-1700000003","supported_models":["provider-admin-draft-1700000003","provider-admin-draft-mini-1700000003"]}}'
|
||||
;;
|
||||
"PUT http://crm.example.com/api/provider-drafts/draft_crud_001")
|
||||
write_body '{"draft":{"draft_id":"draft_crud_001","pack_id":"openai-cn-pack","provider_id":"provider-admin-draft-1700000003","display_name":"Provider Admin Draft Updated 1700000003","platform":"openai","base_url":"https://draft-updated-1700000003.example.com/v1","smoke_test_model":"provider-admin-draft-updated-1700000003","supported_models":["provider-admin-draft-updated-1700000003"]}}'
|
||||
;;
|
||||
"DELETE http://crm.example.com/api/provider-drafts/draft_crud_001")
|
||||
rm -f "$state_dir/crud-draft.present"
|
||||
write_status "204"
|
||||
;;
|
||||
"POST http://crm.example.com/api/provider-drafts/draft_publish_001/publish")
|
||||
write_body '{"publish":{"draft_id":"draft_publish_001","pack_id":"openai-cn-pack","provider_id":"provider-admin-publish-1700000003","provider_path":"packs/openai-cn-pack/providers/provider-admin-publish-1700000003.json","pack_version_before":"1.1.9","pack_version_after":"1.1.10","publish_mode":"created","commit_message":"feat(pack): publish provider admin draft provider-admin-publish-1700000003","commit_sha":"abc1234","repo_root":"/srv/sub2api-cn-relay-manager"}}'
|
||||
;;
|
||||
*)
|
||||
echo "unexpected curl request: $method $url payload=$payload" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
EOF
|
||||
chmod +x "$fakebin/curl"
|
||||
|
||||
PATH="$fakebin:$PATH" \
|
||||
FAKE_STATE_DIR="$state_dir" \
|
||||
CRM_BASE="http://crm.example.com" \
|
||||
CRM_ADMIN_TOKEN="token" \
|
||||
PROVIDER_ADMIN_PAGE_URL="http://portal.example.com/providers.html" \
|
||||
TS="1700000003" \
|
||||
ACCESS_API_KEY="sk-access" \
|
||||
PROVIDER_KEYS="sk-provider-1" \
|
||||
VERIFY_PUBLISH="1" \
|
||||
ARTIFACT_DIR="$artifact_dir" \
|
||||
bash "$ROOT_DIR/scripts/acceptance/verify_provider_admin_actions.sh" >"$stdout_file"
|
||||
|
||||
local summary
|
||||
summary="$(cat "$artifact_dir/99-summary.json")"
|
||||
assert_contains "$summary" '"page_title_seen": true'
|
||||
assert_contains "$summary" '"provider_id": "deepseek"'
|
||||
assert_contains "$summary" '"preview_accepted_keys_count": 1'
|
||||
assert_contains "$summary" '"import_batch_id": 321'
|
||||
assert_contains "$summary" '"crud_delete_status": "204"'
|
||||
assert_contains "$summary" '"publish_verified": true'
|
||||
assert_contains "$summary" '"publish_commit_sha": "abc1234"'
|
||||
}
|
||||
|
||||
run_test_verify_route_health_ui_script() {
|
||||
local tmpdir fakebin artifact_dir stdout_file
|
||||
tmpdir="$(mktemp -d)"
|
||||
@@ -1056,6 +1181,7 @@ run_test_import_remote43_provider_subscription_prep
|
||||
run_test_migrate_historical_artifacts
|
||||
run_test_verify_route_control_plane_script
|
||||
run_test_verify_route_data_plane_script
|
||||
run_test_verify_provider_admin_actions_script
|
||||
run_test_verify_route_health_ui_script
|
||||
run_test_remote43_patched_stack_renderers
|
||||
run_test_setup_remote43_patched_stack_dry_run
|
||||
|
||||
Reference in New Issue
Block a user