chore: implement NPM/JSON import routes and fix SMTP persistence

Phase 3 of skipped tests remediation - enables 7 previously skipped E2E tests

Backend:

Add NPM import handler with session-based upload/commit/cancel
Add JSON import handler with Charon/NPM format support
Fix SMTP SaveSMTPConfig using transaction-based upsert
Add comprehensive unit tests for new handlers
Frontend:

Add ImportNPM page component following ImportCaddy pattern
Add ImportJSON page component with format detection
Add useNPMImport and useJSONImport React Query hooks
Add API clients for npm/json import endpoints
Register routes in App.tsx and navigation in Layout.tsx
Add i18n keys for new import pages
Tests:

7 E2E tests now enabled and passing
Backend coverage: 86.8%
Reduced total skipped tests from 98 to 91
Closes: Phase 3 of skipped-tests-remediation plan
This commit is contained in:
GitHub Actions
2026-01-22 21:10:01 +00:00
parent b60e0be5fb
commit bc15e976b2
21 changed files with 3771 additions and 476 deletions
+34
View File
@@ -69,6 +69,8 @@
"accountManagement": "Account Management",
"import": "Import",
"caddyfile": "Caddyfile",
"importNPM": "Import NPM",
"importJSON": "Import JSON",
"backups": "Backups",
"logs": "Logs",
"securityHeaders": "Security Headers",
@@ -761,6 +763,38 @@
"creatingBackup": "Creating backup...",
"importing": "Importing CrowdSec..."
},
"importNPM": {
"title": "Import from NPM",
"description": "Import proxy hosts from Nginx Proxy Manager export",
"enterContent": "Please paste NPM export JSON",
"invalidJSON": "Invalid JSON format",
"upload": "Upload & Preview",
"import": "Import",
"success": "Import completed successfully",
"previewTitle": "Preview Import",
"conflict": "Conflict",
"new": "New",
"skip": "Skip",
"keep": "Keep Existing",
"replace": "Replace",
"cancelConfirm": "Are you sure you want to cancel this import?"
},
"importJSON": {
"title": "Import from JSON",
"description": "Import configuration from JSON export",
"enterContent": "Please paste JSON configuration",
"invalidJSON": "Invalid JSON format",
"upload": "Upload & Preview",
"import": "Import",
"success": "Import completed successfully",
"previewTitle": "Preview Import",
"conflict": "Conflict",
"new": "New",
"skip": "Skip",
"keep": "Keep Existing",
"replace": "Replace",
"cancelConfirm": "Are you sure you want to cancel this import?"
},
"systemSettings": {
"title": "System Settings",
"settingsSaved": "System settings saved",