From f0bf58d33639cf27b92698f1f6dba3226f54da64 Mon Sep 17 00:00:00 2001 From: chan Date: Fri, 3 Apr 2026 09:46:26 +0900 Subject: [PATCH] fix(ci): update Node 24 and playwright workers, fix user detail queries on create --- .gitea/workflows/code_check.yml | 61 ++- adminfront/i18n-scan-output.txt | 474 ++++++++++++++++++ .../src/features/users/UserDetailPage.tsx | 4 +- adminfront/tests/users.spec.ts | 19 + adminfront/tests/users_schema.spec.ts | 20 + 5 files changed, 572 insertions(+), 6 deletions(-) create mode 100644 adminfront/i18n-scan-output.txt diff --git a/.gitea/workflows/code_check.yml b/.gitea/workflows/code_check.yml index b63c88c7..df49d094 100644 --- a/.gitea/workflows/code_check.yml +++ b/.gitea/workflows/code_check.yml @@ -51,7 +51,11 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "20" + node-version: "24" + cache: "npm" + cache-dependency-path: | + adminfront/package-lock.json + devfront/package-lock.json - name: i18n resource check run: | @@ -308,10 +312,25 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "20" + node-version: "24" cache: "npm" cache-dependency-path: userfront-e2e/package-lock.json + - name: Get Playwright version + id: playwright-version + run: | + cd userfront-e2e + echo "version=$(npm list @playwright/test | grep @playwright/test | awk -F@ '{print $NF}')" >> "$GITHUB_OUTPUT" + + - name: Cache Playwright Browsers + uses: actions/cache@v4 + id: playwright-cache + with: + path: ~/.cache/ms-playwright + key: ${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.version }} + restore-keys: | + ${{ runner.os }}-playwright- + - name: Setup Flutter uses: subosito/flutter-action@v2 with: @@ -524,11 +543,28 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "20" + node-version: "24" cache: "npm" cache-dependency-path: adminfront/package-lock.json + - name: Get Playwright version + id: playwright-version + run: | + cd adminfront + echo "version=$(npm list @playwright/test | grep @playwright/test | awk -F@ '{print $NF}')" >> "$GITHUB_OUTPUT" + + - name: Cache Playwright Browsers + uses: actions/cache@v4 + id: playwright-cache + with: + path: ~/.cache/ms-playwright + key: ${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.version }} + restore-keys: | + ${{ runner.os }}-playwright- + - name: Run adminfront tests + env: + PLAYWRIGHT_WORKERS: 2 run: | scripts/run_adminfront_ci_tests.sh adminfront-tests @@ -602,10 +638,25 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "20" + node-version: "24" cache: "npm" cache-dependency-path: devfront/package-lock.json + - name: Get Playwright version + id: playwright-version + run: | + cd devfront + echo "version=$(npm list @playwright/test | grep @playwright/test | awk -F@ '{print $NF}')" >> "$GITHUB_OUTPUT" + + - name: Cache Playwright Browsers + uses: actions/cache@v4 + id: playwright-cache + with: + path: ~/.cache/ms-playwright + key: ${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.version }} + restore-keys: | + ${{ runner.os }}-playwright- + - name: Install devfront dependencies run: | mkdir -p reports @@ -666,6 +717,8 @@ jobs: fi - name: Run devfront tests + env: + PLAYWRIGHT_WORKERS: 2 run: | mkdir -p reports set +e diff --git a/adminfront/i18n-scan-output.txt b/adminfront/i18n-scan-output.txt new file mode 100644 index 00000000..d89397ed --- /dev/null +++ b/adminfront/i18n-scan-output.txt @@ -0,0 +1,474 @@ + +> adminfront@0.0.0 i18n-scan +> cd .. && node tools/i18n-scanner/index.js && node tools/i18n-scanner/report.js + + +ko.toml에 없는 키 +- ui.admin.users.list.table.msg.admin.users.detail.history_desc +- ui.admin.users.list.table.msg.admin.users.detail.no_history +- ui.admin.users.list.table.msg.admin.users.detail.no_tenants +- ui.admin.users.list.table.msg.admin.users.detail.reset_auto_desc +- ui.admin.users.list.table.msg.admin.users.detail.security_desc +- ui.admin.users.list.table.msg.admin.users.detail.tenant_slug_help +- ui.admin.users.list.table.msg.admin.users.detail.tenants_desc +- ui.admin.users.list.table.msg.common.copied +- ui.admin.users.list.table.msg.dev.clients.general.public_key.allowed_algorithms_tooltip +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.missing_algorithm_badge +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.missing_algorithm_reason +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.missing_algorithms_help +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.missing_algorithms_title +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.parsed_keys_empty +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.parsed_keys_help +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.unsupported_algorithm_reason +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.unsupported_algorithms_help +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.unsupported_algorithms_title +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_empty +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_help +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_refresh_failed +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_refreshed +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_revoke_confirm +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_revoke_failed +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_revoked +- ui.admin.users.list.table.msg.dev.clients.general.public_key.validation.missing_parsed_algorithms +- ui.admin.users.list.table.msg.dev.clients.general.public_key.validation.unsupported_parsed_algorithms +- ui.admin.users.list.table.ui.admin.users.create.form.is_login_id +- ui.admin.users.list.table.ui.admin.users.detail.form.email +- ui.admin.users.list.table.ui.admin.users.detail.form.is_login_id +- ui.admin.users.list.table.ui.admin.users.detail.form.role_rp_admin +- ui.admin.users.list.table.ui.admin.users.detail.form.tenant_slug +- ui.admin.users.list.table.ui.admin.users.detail.generate_button +- ui.admin.users.list.table.ui.admin.users.detail.history_title +- ui.admin.users.list.table.ui.admin.users.detail.manual_confirm +- ui.admin.users.list.table.ui.admin.users.detail.manual_password +- ui.admin.users.list.table.ui.admin.users.detail.password_done +- ui.admin.users.list.table.ui.admin.users.detail.reset_auto +- ui.admin.users.list.table.ui.admin.users.detail.reset_execute +- ui.admin.users.list.table.ui.admin.users.detail.reset_manual +- ui.admin.users.list.table.ui.admin.users.detail.save_tenants +- ui.admin.users.list.table.ui.admin.users.detail.tabs.info +- ui.admin.users.list.table.ui.admin.users.detail.tabs.security +- ui.admin.users.list.table.ui.admin.users.detail.tabs.tenants +- ui.admin.users.list.table.ui.admin.users.detail.updated_at +- ui.admin.users.list.table.ui.common.generate +- ui.admin.users.list.table.ui.common.status.blocked +- ui.admin.users.list.table.ui.dev.clients.general.public_key.allowed_algorithms_info +- ui.admin.users.list.table.ui.dev.clients.general.public_key.auth_method +- ui.admin.users.list.table.ui.dev.clients.general.public_key.auth_method_client_secret_basic +- ui.admin.users.list.table.ui.dev.clients.general.public_key.auth_method_none +- ui.admin.users.list.table.ui.dev.clients.general.public_key.auth_method_private_key_jwt +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.cached_at +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.error +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.expires_at +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.failures +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.kids +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.last_checked_at +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.last_success +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.parsed_key_n +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.parsed_keys +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.status +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.title +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.uri +- ui.admin.users.list.table.ui.dev.clients.general.public_key.guide_toggle +- ui.admin.users.list.table.ui.dev.clients.general.public_key.headless_disabled +- ui.admin.users.list.table.ui.dev.clients.general.public_key.headless_enabled +- ui.admin.users.list.table.ui.dev.clients.general.public_key.jwks_inline +- ui.admin.users.list.table.ui.dev.clients.general.public_key.jwks_inline_placeholder +- ui.admin.users.list.table.ui.dev.clients.general.public_key.request_object_alg +- ui.admin.users.list.table.ui.dev.clients.general.public_key.request_object_alg_placeholder +- ui.admin.users.list.table.ui.dev.clients.general.public_key.revoke_cache +- ui.admin.users.list.table.ui.dev.clients.general.public_key.source +- ui.admin.users.list.table.ui.dev.clients.general.public_key.source_uri +- ui.admin.users.list.table.ui.dev.clients.general.security.trusted_rp_enable +- ui.admin.users.list.table.ui.dev.clients.general.security.trusted_rp_enable_help +- ui.admin.users.list.table.ui.dev.clients.help.docs_body +- ui.admin.users.list.table.ui.dev.clients.help.subtitle +- ui.admin.users.list.table.ui.dev.clients.registry.description +- ui.admin.users.list.table.ui.dev.clients.scopes.email +- ui.admin.users.list.table.ui.dev.clients.scopes.openid +- ui.admin.users.list.table.ui.dev.clients.scopes.profile +- ui.admin.users.list.table.ui.dev.session.refresh +- ui.admin.users.list.table.ui.dev.session.refreshing + +en.toml에 없는 키 +- ui.admin.users.list.table.msg.admin.users.detail.history_desc +- ui.admin.users.list.table.msg.admin.users.detail.no_history +- ui.admin.users.list.table.msg.admin.users.detail.no_tenants +- ui.admin.users.list.table.msg.admin.users.detail.reset_auto_desc +- ui.admin.users.list.table.msg.admin.users.detail.security_desc +- ui.admin.users.list.table.msg.admin.users.detail.tenant_slug_help +- ui.admin.users.list.table.msg.admin.users.detail.tenants_desc +- ui.admin.users.list.table.msg.common.copied +- ui.admin.users.list.table.msg.dev.clients.general.public_key.allowed_algorithms_tooltip +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.missing_algorithm_badge +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.missing_algorithm_reason +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.missing_algorithms_help +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.missing_algorithms_title +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.parsed_keys_empty +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.parsed_keys_help +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.unsupported_algorithm_reason +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.unsupported_algorithms_help +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.unsupported_algorithms_title +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_empty +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_help +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_refresh_failed +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_refreshed +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_revoke_confirm +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_revoke_failed +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_revoked +- ui.admin.users.list.table.msg.dev.clients.general.public_key.validation.missing_parsed_algorithms +- ui.admin.users.list.table.msg.dev.clients.general.public_key.validation.unsupported_parsed_algorithms +- ui.admin.users.list.table.ui.admin.users.create.form.is_login_id +- ui.admin.users.list.table.ui.admin.users.detail.form.email +- ui.admin.users.list.table.ui.admin.users.detail.form.is_login_id +- ui.admin.users.list.table.ui.admin.users.detail.form.role_rp_admin +- ui.admin.users.list.table.ui.admin.users.detail.form.tenant_slug +- ui.admin.users.list.table.ui.admin.users.detail.generate_button +- ui.admin.users.list.table.ui.admin.users.detail.history_title +- ui.admin.users.list.table.ui.admin.users.detail.manual_confirm +- ui.admin.users.list.table.ui.admin.users.detail.manual_password +- ui.admin.users.list.table.ui.admin.users.detail.password_done +- ui.admin.users.list.table.ui.admin.users.detail.reset_auto +- ui.admin.users.list.table.ui.admin.users.detail.reset_execute +- ui.admin.users.list.table.ui.admin.users.detail.reset_manual +- ui.admin.users.list.table.ui.admin.users.detail.save_tenants +- ui.admin.users.list.table.ui.admin.users.detail.tabs.info +- ui.admin.users.list.table.ui.admin.users.detail.tabs.security +- ui.admin.users.list.table.ui.admin.users.detail.tabs.tenants +- ui.admin.users.list.table.ui.admin.users.detail.updated_at +- ui.admin.users.list.table.ui.common.generate +- ui.admin.users.list.table.ui.common.status.blocked +- ui.admin.users.list.table.ui.dev.clients.general.public_key.allowed_algorithms_info +- ui.admin.users.list.table.ui.dev.clients.general.public_key.auth_method +- ui.admin.users.list.table.ui.dev.clients.general.public_key.auth_method_client_secret_basic +- ui.admin.users.list.table.ui.dev.clients.general.public_key.auth_method_none +- ui.admin.users.list.table.ui.dev.clients.general.public_key.auth_method_private_key_jwt +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.cached_at +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.error +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.expires_at +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.failures +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.kids +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.last_checked_at +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.last_success +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.parsed_key_n +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.parsed_keys +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.status +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.title +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.uri +- ui.admin.users.list.table.ui.dev.clients.general.public_key.guide_toggle +- ui.admin.users.list.table.ui.dev.clients.general.public_key.headless_disabled +- ui.admin.users.list.table.ui.dev.clients.general.public_key.headless_enabled +- ui.admin.users.list.table.ui.dev.clients.general.public_key.jwks_inline +- ui.admin.users.list.table.ui.dev.clients.general.public_key.jwks_inline_placeholder +- ui.admin.users.list.table.ui.dev.clients.general.public_key.request_object_alg +- ui.admin.users.list.table.ui.dev.clients.general.public_key.request_object_alg_placeholder +- ui.admin.users.list.table.ui.dev.clients.general.public_key.revoke_cache +- ui.admin.users.list.table.ui.dev.clients.general.public_key.source +- ui.admin.users.list.table.ui.dev.clients.general.public_key.source_uri +- ui.admin.users.list.table.ui.dev.clients.general.security.trusted_rp_enable +- ui.admin.users.list.table.ui.dev.clients.general.security.trusted_rp_enable_help +- ui.admin.users.list.table.ui.dev.clients.help.docs_body +- ui.admin.users.list.table.ui.dev.clients.help.subtitle +- ui.admin.users.list.table.ui.dev.clients.registry.description +- ui.admin.users.list.table.ui.dev.clients.scopes.email +- ui.admin.users.list.table.ui.dev.clients.scopes.openid +- ui.admin.users.list.table.ui.dev.clients.scopes.profile +- ui.admin.users.list.table.ui.dev.session.refresh +- ui.admin.users.list.table.ui.dev.session.refreshing + +template.toml에 없는 코드 사용 키 +- msg.admin.users.detail.history_desc +- msg.admin.users.detail.no_history +- msg.admin.users.detail.no_tenants +- msg.admin.users.detail.reset_auto_desc +- msg.admin.users.detail.security_desc +- msg.admin.users.detail.tenant_slug_help +- msg.admin.users.detail.tenants_desc +- msg.common.copied +- msg.dev.clients.general.public_key.allowed_algorithms_tooltip +- msg.dev.clients.general.public_key.cache.missing_algorithm_badge +- msg.dev.clients.general.public_key.cache.missing_algorithm_reason +- msg.dev.clients.general.public_key.cache.missing_algorithms_help +- msg.dev.clients.general.public_key.cache.missing_algorithms_title +- msg.dev.clients.general.public_key.cache.parsed_keys_empty +- msg.dev.clients.general.public_key.cache.parsed_keys_help +- msg.dev.clients.general.public_key.cache.unsupported_algorithm_reason +- msg.dev.clients.general.public_key.cache.unsupported_algorithms_help +- msg.dev.clients.general.public_key.cache.unsupported_algorithms_title +- msg.dev.clients.general.public_key.cache_empty +- msg.dev.clients.general.public_key.cache_help +- msg.dev.clients.general.public_key.cache_refresh_failed +- msg.dev.clients.general.public_key.cache_refreshed +- msg.dev.clients.general.public_key.cache_revoke_confirm +- msg.dev.clients.general.public_key.cache_revoke_failed +- msg.dev.clients.general.public_key.cache_revoked +- msg.dev.clients.general.public_key.validation.missing_parsed_algorithms +- msg.dev.clients.general.public_key.validation.unsupported_parsed_algorithms +- ui.admin.users.create.form.is_login_id +- ui.admin.users.detail.form.email +- ui.admin.users.detail.form.is_login_id +- ui.admin.users.detail.form.role_rp_admin +- ui.admin.users.detail.form.tenant_slug +- ui.admin.users.detail.generate_button +- ui.admin.users.detail.history_title +- ui.admin.users.detail.manual_confirm +- ui.admin.users.detail.manual_password +- ui.admin.users.detail.password_done +- ui.admin.users.detail.reset_auto +- ui.admin.users.detail.reset_execute +- ui.admin.users.detail.reset_manual +- ui.admin.users.detail.save_tenants +- ui.admin.users.detail.tabs.info +- ui.admin.users.detail.tabs.security +- ui.admin.users.detail.tabs.tenants +- ui.admin.users.detail.updated_at +- ui.dev.clients.general.public_key.allowed_algorithms_info +- ui.dev.clients.general.public_key.cache.cached_at +- ui.dev.clients.general.public_key.cache.error +- ui.dev.clients.general.public_key.cache.expires_at +- ui.dev.clients.general.public_key.cache.failures +- ui.dev.clients.general.public_key.cache.kids +- ui.dev.clients.general.public_key.cache.last_checked_at +- ui.dev.clients.general.public_key.cache.last_success +- ui.dev.clients.general.public_key.cache.parsed_key_n +- ui.dev.clients.general.public_key.cache.parsed_keys +- ui.dev.clients.general.public_key.cache.status +- ui.dev.clients.general.public_key.cache.title +- ui.dev.clients.general.public_key.cache.uri +- ui.dev.clients.general.public_key.revoke_cache + +코드에서 사용되지 않는 키 +- err.backend.authorization_pending +- err.backend.bad_request +- err.backend.conflict +- err.backend.expired_token +- err.backend.forbidden +- err.backend.internal_error +- err.backend.invalid_code +- err.backend.invalid_or_expired_code +- err.backend.invalid_session +- err.backend.invalid_session_reference +- err.backend.not_found +- err.backend.not_supported +- err.backend.password_or_email_mismatch +- err.backend.rate_limited +- err.backend.service_unavailable +- err.backend.slow_down +- msg.admin.groups.create.description +- msg.admin.groups.create.title +- msg.admin.groups.list.import_error +- msg.admin.groups.list.import_success +- msg.admin.header.subtitle +- msg.admin.idp_env_prod +- msg.admin.notice.idp_policy +- msg.admin.notice.scope +- msg.admin.overview.idp_fallback +- msg.admin.overview.idp_primary +- msg.admin.overview.playbook.description +- msg.admin.overview.playbook.idp_body +- msg.admin.overview.playbook.idp_title +- msg.admin.overview.playbook.tenant_body +- msg.admin.overview.playbook.tenant_title +- msg.admin.overview.quick_links.description +- msg.admin.overview.summary.audit_events_24h +- msg.admin.overview.summary.oidc_clients +- msg.admin.overview.summary.policy_gate +- msg.admin.overview.summary.total_tenants +- msg.admin.scope_admin +- msg.admin.session_ttl +- msg.admin.tenant_headers +- msg.admin.users.create.form.login_id_help +- msg.admin.users.detail.delete_error +- msg.admin.users.detail.password_generated_help +- msg.admin.users.detail.reset_password_confirm +- msg.admin.users.detail.security.password_hint +- msg.admin.users.detail.update_success +- msg.common.copied_to_clipboard +- msg.dev.audit.forbidden +- msg.dev.clients.general.public_key.auth_method_client_secret_basic_help +- msg.dev.clients.general.public_key.auth_method_none_help +- msg.dev.clients.general.public_key.auth_method_private_key_jwt_help +- msg.dev.clients.general.public_key.guide_example +- msg.dev.clients.general.public_key.guide_intro +- msg.dev.clients.general.public_key.guide_step_1 +- msg.dev.clients.general.public_key.guide_step_2 +- msg.dev.clients.general.public_key.guide_step_3 +- msg.dev.clients.general.public_key.jwks_inline_help +- msg.dev.clients.general.public_key.request_object_alg_help +- msg.dev.clients.general.public_key.source_help +- msg.dev.clients.general.public_key.validation.headless_requires_alg +- msg.dev.clients.general.public_key.validation.headless_requires_private_key_jwt +- msg.dev.clients.general.public_key.validation.headless_requires_public_key +- msg.dev.clients.general.public_key.validation.invalid_jwks_inline +- msg.dev.clients.general.public_key.validation.missing_jwks_inline +- msg.dev.clients.general.public_key.validation.private_key_jwt_requires_public_key +- msg.userfront.signup.privacy_full +- msg.userfront.signup.tos_full +- non.existent.key +- test.key +- ui.admin.api_keys.list.breadcrumb.list +- ui.admin.api_keys.list.breadcrumb.section +- ui.admin.audit.breadcrumb.logs +- ui.admin.audit.breadcrumb.section +- ui.admin.groups.import_csv +- ui.admin.overview.kicker +- ui.admin.overview.playbook.title +- ui.admin.overview.quick_links.add_tenant +- ui.admin.overview.quick_links.api_key_management +- ui.admin.overview.quick_links.user_management +- ui.admin.overview.quick_links.view_audit_logs +- ui.admin.tenants.breadcrumb.list +- ui.admin.tenants.breadcrumb.section +- ui.admin.tenants.create.breadcrumb.action +- ui.admin.tenants.create.breadcrumb.section +- ui.admin.tenants.detail.breadcrumb_list +- ui.admin.tenants.detail.title +- ui.admin.users.create.breadcrumb.new +- ui.admin.users.create.breadcrumb.section +- ui.admin.users.create.form.login_id +- ui.admin.users.create.form.login_id_placeholder +- ui.admin.users.detail.breadcrumb.section +- ui.admin.users.detail.contact_title +- ui.admin.users.detail.form.department_placeholder +- ui.admin.users.detail.form.job_title_placeholder +- ui.admin.users.detail.form.login_id +- ui.admin.users.detail.form.login_id_placeholder +- ui.admin.users.detail.form.name_placeholder +- ui.admin.users.detail.form.phone_placeholder +- ui.admin.users.detail.form.position_placeholder +- ui.admin.users.detail.form.status_active +- ui.admin.users.detail.form.status_inactive +- ui.admin.users.detail.generate_password +- ui.admin.users.detail.password_mode_generated +- ui.admin.users.detail.password_mode_manual +- ui.admin.users.detail.password_result_title +- ui.admin.users.detail.reset_password_apply +- ui.admin.users.detail.security.password +- ui.admin.users.detail.security.password_placeholder +- ui.admin.users.detail.security.title +- ui.admin.users.detail.status_title +- ui.admin.users.detail.tenants_section.additional +- ui.admin.users.detail.tenants_section.primary +- ui.admin.users.detail.tenants_section.title +- ui.admin.users.detail.title +- ui.admin.users.detail.toggle_password_visibility +- ui.admin.users.list.breadcrumb.list +- ui.admin.users.list.breadcrumb.section +- ui.admin.users.list.empty +- ui.admin.users.list.fetch_error +- ui.admin.users.list.registry.count +- ui.admin.users.list.subtitle +- ui.admin.users.list.table.login_id +- ui.admin.users.list.table.msg.admin.users.detail.history_desc +- ui.admin.users.list.table.msg.admin.users.detail.no_history +- ui.admin.users.list.table.msg.admin.users.detail.no_tenants +- ui.admin.users.list.table.msg.admin.users.detail.reset_auto_desc +- ui.admin.users.list.table.msg.admin.users.detail.security_desc +- ui.admin.users.list.table.msg.admin.users.detail.tenant_slug_help +- ui.admin.users.list.table.msg.admin.users.detail.tenants_desc +- ui.admin.users.list.table.msg.common.copied +- ui.admin.users.list.table.msg.dev.clients.general.public_key.allowed_algorithms_tooltip +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.missing_algorithm_badge +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.missing_algorithm_reason +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.missing_algorithms_help +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.missing_algorithms_title +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.parsed_keys_empty +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.parsed_keys_help +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.unsupported_algorithm_reason +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.unsupported_algorithms_help +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache.unsupported_algorithms_title +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_empty +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_help +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_refresh_failed +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_refreshed +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_revoke_confirm +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_revoke_failed +- ui.admin.users.list.table.msg.dev.clients.general.public_key.cache_revoked +- ui.admin.users.list.table.msg.dev.clients.general.public_key.validation.missing_parsed_algorithms +- ui.admin.users.list.table.msg.dev.clients.general.public_key.validation.unsupported_parsed_algorithms +- ui.admin.users.list.table.ui.admin.users.create.form.is_login_id +- ui.admin.users.list.table.ui.admin.users.detail.form.email +- ui.admin.users.list.table.ui.admin.users.detail.form.is_login_id +- ui.admin.users.list.table.ui.admin.users.detail.form.role_rp_admin +- ui.admin.users.list.table.ui.admin.users.detail.form.tenant_slug +- ui.admin.users.list.table.ui.admin.users.detail.generate_button +- ui.admin.users.list.table.ui.admin.users.detail.history_title +- ui.admin.users.list.table.ui.admin.users.detail.manual_confirm +- ui.admin.users.list.table.ui.admin.users.detail.manual_password +- ui.admin.users.list.table.ui.admin.users.detail.password_done +- ui.admin.users.list.table.ui.admin.users.detail.reset_auto +- ui.admin.users.list.table.ui.admin.users.detail.reset_execute +- ui.admin.users.list.table.ui.admin.users.detail.reset_manual +- ui.admin.users.list.table.ui.admin.users.detail.save_tenants +- ui.admin.users.list.table.ui.admin.users.detail.tabs.info +- ui.admin.users.list.table.ui.admin.users.detail.tabs.security +- ui.admin.users.list.table.ui.admin.users.detail.tabs.tenants +- ui.admin.users.list.table.ui.admin.users.detail.updated_at +- ui.admin.users.list.table.ui.common.generate +- ui.admin.users.list.table.ui.common.status.blocked +- ui.admin.users.list.table.ui.dev.clients.general.public_key.allowed_algorithms_info +- ui.admin.users.list.table.ui.dev.clients.general.public_key.auth_method +- ui.admin.users.list.table.ui.dev.clients.general.public_key.auth_method_client_secret_basic +- ui.admin.users.list.table.ui.dev.clients.general.public_key.auth_method_none +- ui.admin.users.list.table.ui.dev.clients.general.public_key.auth_method_private_key_jwt +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.cached_at +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.error +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.expires_at +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.failures +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.kids +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.last_checked_at +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.last_success +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.parsed_key_n +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.parsed_keys +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.status +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.title +- ui.admin.users.list.table.ui.dev.clients.general.public_key.cache.uri +- ui.admin.users.list.table.ui.dev.clients.general.public_key.guide_toggle +- ui.admin.users.list.table.ui.dev.clients.general.public_key.headless_disabled +- ui.admin.users.list.table.ui.dev.clients.general.public_key.headless_enabled +- ui.admin.users.list.table.ui.dev.clients.general.public_key.jwks_inline +- ui.admin.users.list.table.ui.dev.clients.general.public_key.jwks_inline_placeholder +- ui.admin.users.list.table.ui.dev.clients.general.public_key.request_object_alg +- ui.admin.users.list.table.ui.dev.clients.general.public_key.request_object_alg_placeholder +- ui.admin.users.list.table.ui.dev.clients.general.public_key.revoke_cache +- ui.admin.users.list.table.ui.dev.clients.general.public_key.source +- ui.admin.users.list.table.ui.dev.clients.general.public_key.source_uri +- ui.admin.users.list.table.ui.dev.clients.general.security.trusted_rp_enable +- ui.admin.users.list.table.ui.dev.clients.general.security.trusted_rp_enable_help +- ui.admin.users.list.table.ui.dev.clients.help.docs_body +- ui.admin.users.list.table.ui.dev.clients.help.subtitle +- ui.admin.users.list.table.ui.dev.clients.registry.description +- ui.admin.users.list.table.ui.dev.clients.scopes.email +- ui.admin.users.list.table.ui.dev.clients.scopes.openid +- ui.admin.users.list.table.ui.dev.clients.scopes.profile +- ui.admin.users.list.table.ui.dev.session.refresh +- ui.admin.users.list.table.ui.dev.session.refreshing +- ui.common.generate +- ui.common.status.blocked +- ui.dev.clients.general.public_key.auth_method +- ui.dev.clients.general.public_key.auth_method_client_secret_basic +- ui.dev.clients.general.public_key.auth_method_none +- ui.dev.clients.general.public_key.auth_method_private_key_jwt +- ui.dev.clients.general.public_key.guide_toggle +- ui.dev.clients.general.public_key.headless_disabled +- ui.dev.clients.general.public_key.headless_enabled +- ui.dev.clients.general.public_key.jwks_inline +- ui.dev.clients.general.public_key.jwks_inline_placeholder +- ui.dev.clients.general.public_key.request_object_alg +- ui.dev.clients.general.public_key.request_object_alg_placeholder +- ui.dev.clients.general.public_key.source +- ui.dev.clients.general.public_key.source_uri +- ui.dev.clients.general.security.trusted_rp_enable +- ui.dev.clients.general.security.trusted_rp_enable_help +- ui.dev.clients.help.docs_body +- ui.dev.clients.help.subtitle +- ui.dev.clients.registry.description +- ui.dev.clients.scopes.email +- ui.dev.clients.scopes.openid +- ui.dev.clients.scopes.profile +- ui.dev.session.refresh +- ui.dev.session.refreshing + +요약 +- [Sync Error] ko.toml 누락 키 84개 +- [Sync Error] en.toml 누락 키 84개 +- [Missing Key] template.toml 누락 키 59개 diff --git a/adminfront/src/features/users/UserDetailPage.tsx b/adminfront/src/features/users/UserDetailPage.tsx index f6caf2d9..bcecc5ab 100644 --- a/adminfront/src/features/users/UserDetailPage.tsx +++ b/adminfront/src/features/users/UserDetailPage.tsx @@ -276,7 +276,7 @@ function UserDetailPage() { } = useQuery({ queryKey: ["user", userId], queryFn: () => fetchUser(userId), - enabled: userId.length > 0, + enabled: userId.length > 0 && userId !== "new", }); const { data: tenantsData } = useQuery({ @@ -288,7 +288,7 @@ function UserDetailPage() { const rpHistoryQuery = useQuery({ queryKey: ["user-rp-history", userId], queryFn: () => fetchUserRpHistory(userId), - enabled: !!userId, + enabled: !!userId && userId !== "new", }); const { data: passwordPolicy } = useQuery({ diff --git a/adminfront/tests/users.spec.ts b/adminfront/tests/users.spec.ts index 386fd464..656f3730 100644 --- a/adminfront/tests/users.spec.ts +++ b/adminfront/tests/users.spec.ts @@ -90,10 +90,29 @@ test.describe("User Management", () => { tenantSlug: "test-tenant", role: "user", status: "active", + metadata: {}, }, }); } + if (url.includes("/password/policy")) { + return route.fulfill({ + json: { + minLength: 12, + lowercase: true, + uppercase: true, + number: true, + nonAlphanumeric: true, + }, + }); + } + + if (url.includes("/rp-history")) { + return route.fulfill({ + json: [], + }); + } + if (url.includes("/admin/users") && method === "POST") { // Parse request payload to simulate validation checks const postData = route.request().postDataJSON(); diff --git a/adminfront/tests/users_schema.spec.ts b/adminfront/tests/users_schema.spec.ts index 23108bcf..a975dc24 100644 --- a/adminfront/tests/users_schema.spec.ts +++ b/adminfront/tests/users_schema.spec.ts @@ -107,6 +107,26 @@ test.describe("User Schema Dynamic Form", () => { }); } + if (url.includes("/password/policy")) { + console.log("Mocking /password/policy"); + return route.fulfill({ + json: { + minLength: 12, + lowercase: true, + uppercase: true, + number: true, + nonAlphanumeric: true, + }, + }); + } + + if (url.includes("/rp-history")) { + console.log("Mocking /rp-history"); + return route.fulfill({ + json: [], + }); + } + if (url.includes("/admin/tenants")) { console.log("Mocking /admin/tenants"); return route.fulfill({