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:
phamnazage-jpg
2026-06-01 09:58:20 +08:00
parent c588a95c7d
commit 5fbac6ef0b
8 changed files with 2047 additions and 0 deletions

View File

@@ -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