@roomi-fields/notebooklm-mcp 1.5.2 → 1.5.7
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.
- package/LICENSE +22 -22
- package/README.md +219 -201
- package/deployment/INDEX.md +0 -0
- package/deployment/PACKAGE-FILES.txt +180 -180
- package/deployment/QUICK-START.md +0 -0
- package/deployment/docs/01-INSTALL.md +0 -0
- package/deployment/docs/02-CONFIGURATION.md +0 -0
- package/deployment/docs/03-API.md +99 -13
- package/deployment/docs/04-N8N-INTEGRATION.md +0 -0
- package/deployment/docs/05-TROUBLESHOOTING.md +0 -0
- package/deployment/docs/06-NOTEBOOK-LIBRARY.md +0 -0
- package/deployment/docs/07-AUTO-DISCOVERY.md +0 -0
- package/deployment/docs/08-DOCKER.md +303 -0
- package/deployment/docs/08-WSL-USAGE.md +0 -0
- package/deployment/docs/09-MULTI-INTERFACE.md +0 -0
- package/deployment/docs/10-CONTENT-MANAGEMENT.md +0 -0
- package/deployment/docs/11-MULTI-ACCOUNT.md +0 -0
- package/deployment/docs/README.md +9 -2
- package/deployment/scripts/README.md +0 -0
- package/deployment/scripts/install.ps1 +114 -114
- package/deployment/scripts/setup-auth.ps1 +217 -217
- package/deployment/scripts/start-server.ps1 +72 -72
- package/deployment/scripts/stop-server.ps1 +51 -51
- package/deployment/scripts/test-api.ps1 +651 -651
- package/deployment/scripts/test-auth.ps1 +0 -0
- package/deployment/scripts/test-auto-discovery.ps1 +295 -295
- package/deployment/scripts/test-cors.ps1 +398 -398
- package/deployment/scripts/test-errors.ps1 +581 -581
- package/deployment/scripts/test-server.ps1 +140 -140
- package/deployment/scripts/test-sessions.ps1 +426 -426
- package/deployment/scripts/test-validation.ps1 +299 -299
- package/dist/accounts/account-manager.d.ts +15 -0
- package/dist/accounts/account-manager.d.ts.map +1 -1
- package/dist/accounts/account-manager.js +104 -0
- package/dist/accounts/account-manager.js.map +1 -1
- package/dist/accounts/auto-login-manager.d.ts +0 -0
- package/dist/accounts/auto-login-manager.d.ts.map +1 -1
- package/dist/accounts/auto-login-manager.js +45 -28
- package/dist/accounts/auto-login-manager.js.map +1 -1
- package/dist/accounts/crypto.d.ts +0 -0
- package/dist/accounts/crypto.d.ts.map +0 -0
- package/dist/accounts/crypto.js +0 -0
- package/dist/accounts/crypto.js.map +0 -0
- package/dist/accounts/index.d.ts +0 -0
- package/dist/accounts/index.d.ts.map +0 -0
- package/dist/accounts/index.js +0 -0
- package/dist/accounts/index.js.map +0 -0
- package/dist/accounts/types.d.ts +0 -0
- package/dist/accounts/types.d.ts.map +0 -0
- package/dist/accounts/types.js +0 -0
- package/dist/accounts/types.js.map +0 -0
- package/dist/auth/auth-manager.d.ts +1 -1
- package/dist/auth/auth-manager.d.ts.map +1 -1
- package/dist/auth/auth-manager.js +33 -13
- package/dist/auth/auth-manager.js.map +1 -1
- package/dist/auto-discovery/auto-discovery.d.ts +0 -0
- package/dist/auto-discovery/auto-discovery.d.ts.map +0 -0
- package/dist/auto-discovery/auto-discovery.js +0 -0
- package/dist/auto-discovery/auto-discovery.js.map +0 -0
- package/dist/cli/accounts.d.ts +0 -0
- package/dist/cli/accounts.d.ts.map +0 -0
- package/dist/cli/accounts.js +0 -0
- package/dist/cli/accounts.js.map +0 -0
- package/dist/cli/de-auth.d.ts +0 -0
- package/dist/cli/de-auth.d.ts.map +0 -0
- package/dist/cli/de-auth.js +0 -0
- package/dist/cli/de-auth.js.map +0 -0
- package/dist/cli/help.d.ts +0 -0
- package/dist/cli/help.d.ts.map +0 -0
- package/dist/cli/help.js +0 -0
- package/dist/cli/help.js.map +0 -0
- package/dist/cli/setup-auth.d.ts +0 -0
- package/dist/cli/setup-auth.d.ts.map +0 -0
- package/dist/cli/setup-auth.js +18 -10
- package/dist/cli/setup-auth.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +15 -1
- package/dist/config.js.map +1 -1
- package/dist/content/content-generator.d.ts +0 -0
- package/dist/content/content-generator.d.ts.map +0 -0
- package/dist/content/content-generator.js +0 -0
- package/dist/content/content-generator.js.map +0 -0
- package/dist/content/content-manager.d.ts +0 -0
- package/dist/content/content-manager.d.ts.map +0 -0
- package/dist/content/content-manager.js +0 -0
- package/dist/content/content-manager.js.map +0 -0
- package/dist/content/content-templates.d.ts +0 -0
- package/dist/content/content-templates.d.ts.map +0 -0
- package/dist/content/content-templates.js +0 -0
- package/dist/content/content-templates.js.map +0 -0
- package/dist/content/index.d.ts +0 -0
- package/dist/content/index.d.ts.map +0 -0
- package/dist/content/index.js +0 -0
- package/dist/content/index.js.map +0 -0
- package/dist/content/types.d.ts +0 -0
- package/dist/content/types.d.ts.map +0 -0
- package/dist/content/types.js +0 -0
- package/dist/content/types.js.map +0 -0
- package/dist/errors.d.ts +0 -0
- package/dist/errors.d.ts.map +0 -0
- package/dist/errors.js +0 -0
- package/dist/errors.js.map +0 -0
- package/dist/http-wrapper.d.ts +0 -0
- package/dist/http-wrapper.d.ts.map +1 -1
- package/dist/http-wrapper.js +275 -7
- package/dist/http-wrapper.js.map +1 -1
- package/dist/i18n/en.json +0 -0
- package/dist/i18n/fr.json +0 -0
- package/dist/i18n/index.d.ts +0 -0
- package/dist/i18n/index.d.ts.map +0 -0
- package/dist/i18n/index.js +0 -0
- package/dist/i18n/index.js.map +0 -0
- package/dist/index.d.ts +0 -0
- package/dist/index.d.ts.map +0 -0
- package/dist/index.js +0 -0
- package/dist/index.js.map +0 -0
- package/dist/library/notebook-library.d.ts +0 -0
- package/dist/library/notebook-library.d.ts.map +0 -0
- package/dist/library/notebook-library.js +0 -0
- package/dist/library/notebook-library.js.map +0 -0
- package/dist/library/types.d.ts +0 -0
- package/dist/library/types.d.ts.map +0 -0
- package/dist/library/types.js +0 -0
- package/dist/library/types.js.map +0 -0
- package/dist/session/browser-session.d.ts +0 -0
- package/dist/session/browser-session.d.ts.map +1 -1
- package/dist/session/browser-session.js +215 -91
- package/dist/session/browser-session.js.map +1 -1
- package/dist/session/session-manager.d.ts +0 -0
- package/dist/session/session-manager.d.ts.map +0 -0
- package/dist/session/session-manager.js +0 -0
- package/dist/session/session-manager.js.map +0 -0
- package/dist/session/shared-context-manager.d.ts +0 -0
- package/dist/session/shared-context-manager.d.ts.map +1 -1
- package/dist/session/shared-context-manager.js +38 -5
- package/dist/session/shared-context-manager.js.map +1 -1
- package/dist/startup/startup-manager.d.ts +60 -0
- package/dist/startup/startup-manager.d.ts.map +1 -0
- package/dist/startup/startup-manager.js +468 -0
- package/dist/startup/startup-manager.js.map +1 -0
- package/dist/stdio-http-proxy.d.ts +0 -0
- package/dist/stdio-http-proxy.d.ts.map +0 -0
- package/dist/stdio-http-proxy.js +91 -16
- package/dist/stdio-http-proxy.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +55 -34
- package/dist/tools/index.js.map +1 -1
- package/dist/types.d.ts +0 -0
- package/dist/types.d.ts.map +0 -0
- package/dist/types.js +0 -0
- package/dist/types.js.map +0 -0
- package/dist/utils/citation-extractor.d.ts +6 -7
- package/dist/utils/citation-extractor.d.ts.map +1 -1
- package/dist/utils/citation-extractor.js +138 -303
- package/dist/utils/citation-extractor.js.map +1 -1
- package/dist/utils/cleanup-manager.d.ts +0 -0
- package/dist/utils/cleanup-manager.d.ts.map +0 -0
- package/dist/utils/cleanup-manager.js +0 -0
- package/dist/utils/cleanup-manager.js.map +0 -0
- package/dist/utils/logger.d.ts +0 -0
- package/dist/utils/logger.d.ts.map +0 -0
- package/dist/utils/logger.js +0 -0
- package/dist/utils/logger.js.map +0 -0
- package/dist/utils/page-utils.d.ts +0 -0
- package/dist/utils/page-utils.d.ts.map +1 -1
- package/dist/utils/page-utils.js +12 -13
- package/dist/utils/page-utils.js.map +1 -1
- package/dist/utils/stealth-utils.d.ts +0 -0
- package/dist/utils/stealth-utils.d.ts.map +0 -0
- package/dist/utils/stealth-utils.js +0 -0
- package/dist/utils/stealth-utils.js.map +0 -0
- package/docs/ADDING_A_LANGUAGE.md +0 -0
- package/docs/ARCHITECTURE_MIGRATION_STUDY.md +0 -0
- package/docs/CHROME_PROFILE_LIMITATION.md +0 -0
- package/docs/MULTI_ACCOUNT_SYSTEM.md +0 -0
- package/docs/archive/auto-discovery-complet.md +906 -0
- package/package.json +4 -2
- package/scripts/add-totp.ts +110 -0
- package/scripts/archive/add-and-activate-notebook.ps1 +0 -0
- package/scripts/archive/add-new-notebook.ps1 +0 -0
- package/scripts/archive/add-rom1pey.ps1 +0 -0
- package/scripts/archive/add-rpmonster.ps1 +0 -0
- package/scripts/archive/add-source-debug.ps1 +0 -0
- package/scripts/archive/add-source-e2e.ps1 +0 -0
- package/scripts/archive/add-source-visible.ps1 +0 -0
- package/scripts/archive/add-test-notebook.ps1 +0 -0
- package/scripts/archive/add-test-source.ps1 +0 -0
- package/scripts/archive/capture-screen.ps1 +0 -0
- package/scripts/archive/change-language.mjs +0 -0
- package/scripts/archive/change-language.ts +0 -0
- package/scripts/archive/check-account.ps1 +0 -0
- package/scripts/archive/check-notebook-2.ps1 +0 -0
- package/scripts/archive/check-test-notebook.ps1 +0 -0
- package/scripts/archive/create-notebook-auto.ps1 +0 -0
- package/scripts/archive/create-notebook.ps1 +0 -0
- package/scripts/archive/create-rom1pey-notebook.ps1 +0 -0
- package/scripts/archive/create-rom1pey.ps1 +0 -0
- package/scripts/archive/create-test-notebook-fresh.ps1 +0 -0
- package/scripts/archive/create-test-notebook.ps1 +0 -0
- package/scripts/archive/debug-add-source-auto.ps1 +0 -0
- package/scripts/archive/debug-add-source.ps1 +0 -0
- package/scripts/archive/debug-add-text-source.ps1 +0 -0
- package/scripts/archive/debug-home.ps1 +0 -0
- package/scripts/archive/debug-selectors.ps1 +0 -0
- package/scripts/archive/debug-sources-panel.ps1 +0 -0
- package/scripts/archive/debug-ui.ps1 +0 -0
- package/scripts/archive/discover-home.ps1 +0 -0
- package/scripts/archive/kill-automation-chrome.ps1 +0 -0
- package/scripts/archive/list-my-notebooks.ps1 +0 -0
- package/scripts/archive/navigate-home-visible.ps1 +0 -0
- package/scripts/archive/navigate-home.ps1 +0 -0
- package/scripts/archive/run-e2e-english.ps1 +0 -0
- package/scripts/archive/run-e2e-rom1pey-v2.ps1 +0 -0
- package/scripts/archive/run-e2e-rom1pey.ps1 +0 -0
- package/scripts/archive/setup-english-test.ps1 +0 -0
- package/scripts/archive/setup-test-notebook.ps1 +0 -0
- package/scripts/archive/simple-add-source.ps1 +0 -0
- package/scripts/archive/t10.ps1 +0 -0
- package/scripts/archive/t20.ps1 +0 -0
- package/scripts/archive/t30.ps1 +0 -0
- package/scripts/archive/t31.ps1 +0 -0
- package/scripts/archive/t32.ps1 +0 -0
- package/scripts/archive/t39.ps1 +0 -0
- package/scripts/archive/t40.ps1 +0 -0
- package/scripts/archive/t53.ps1 +0 -0
- package/scripts/archive/t54.ps1 +0 -0
- package/scripts/archive/t55.ps1 +0 -0
- package/scripts/archive/t9.ps1 +0 -0
- package/scripts/archive/test-access.ps1 +0 -0
- package/scripts/archive/test-add-delete-source.ps1 +0 -0
- package/scripts/archive/test-add-source-visible.ps1 +0 -0
- package/scripts/archive/test-add-source.ps1 +0 -0
- package/scripts/archive/test-add-text-debug.ps1 +0 -0
- package/scripts/archive/test-add-text-source.ps1 +0 -0
- package/scripts/archive/test-add-url-source.ps1 +0 -0
- package/scripts/archive/test-ask-ascii.ps1 +0 -0
- package/scripts/archive/test-ask-cnv.ps1 +0 -0
- package/scripts/archive/test-ask-headed.ps1 +0 -0
- package/scripts/archive/test-ask-ifs.ps1 +0 -0
- package/scripts/archive/test-ask-now.ps1 +0 -0
- package/scripts/archive/test-ask-real.ps1 +0 -0
- package/scripts/archive/test-ask-visible.ps1 +0 -0
- package/scripts/archive/test-create-notebook.ps1 +0 -0
- package/scripts/archive/test-create-then-add.ps1 +0 -0
- package/scripts/archive/test-delete-source.ps1 +0 -0
- package/scripts/archive/test-e2e-notebook.ps1 +0 -0
- package/scripts/archive/test-english-notebook.ps1 +0 -0
- package/scripts/archive/test-english.ps1 +0 -0
- package/scripts/archive/test-full-custom-instructions.ps1 +0 -0
- package/scripts/archive/test-full-infographic.ps1 +0 -0
- package/scripts/archive/test-full-language.ps1 +0 -0
- package/scripts/archive/test-full-presentation.ps1 +0 -0
- package/scripts/archive/test-full-report.ps1 +0 -0
- package/scripts/archive/test-full-source-selection.ps1 +0 -0
- package/scripts/archive/test-full-video-brief.ps1 +0 -0
- package/scripts/archive/test-full-video-explainer.ps1 +0 -0
- package/scripts/archive/test-full-video-styles.ps1 +0 -0
- package/scripts/archive/test-generate-report.ps1 +0 -0
- package/scripts/archive/test-generate-study-guide.ps1 +0 -0
- package/scripts/archive/test-headed-ask.ps1 +0 -0
- package/scripts/archive/test-headed-now.ps1 +0 -0
- package/scripts/archive/test-headed.ps1 +0 -0
- package/scripts/archive/test-hello.ps1 +0 -0
- package/scripts/archive/test-i18n-studio.ps1 +0 -0
- package/scripts/archive/test-i18n.ps1 +0 -0
- package/scripts/archive/test-manual-headed.ps1 +0 -0
- package/scripts/archive/test-mathieu-quota.ps1 +0 -0
- package/scripts/archive/test-notebook-1.ps1 +0 -0
- package/scripts/archive/test-notebook-2-sources.ps1 +0 -0
- package/scripts/archive/test-notebook1.ps1 +0 -0
- package/scripts/archive/test-personal-notebook.ps1 +0 -0
- package/scripts/archive/test-rate-limit.ps1 +0 -0
- package/scripts/archive/test-real-ask.ps1 +0 -0
- package/scripts/archive/test-real-ask2.ps1 +0 -0
- package/scripts/archive/test-rom1pey.ps1 +0 -0
- package/scripts/archive/test-rotation-complete.ps1 +0 -0
- package/scripts/archive/test-rotation.ps1 +0 -0
- package/scripts/archive/test-show-browser.ps1 +0 -0
- package/scripts/archive/test-update-notebook.ps1 +0 -0
- package/scripts/archive/verify-language-slow.ps1 +0 -0
- package/scripts/archive/verify-language.ps1 +0 -0
- package/scripts/check-server.ps1 +0 -0
- package/scripts/docker-entrypoint.sh +25 -0
- package/scripts/mcp-proxy-hidden.ps1 +31 -0
- package/scripts/mcp-wsl-helper.sh +146 -146
- package/scripts/start-server-hidden.vbs +13 -0
- package/scripts/start-server.ps1 +0 -0
- package/scripts/start-vnc.sh +37 -0
- package/scripts/stop-server.bat +5 -0
- package/scripts/stop-server.ps1 +0 -0
- package/scripts/switch-account-language.sh +0 -0
- package/scripts/test-account.ps1 +0 -0
|
File without changes
|
|
@@ -1,295 +1,295 @@
|
|
|
1
|
-
#!/usr/bin/env pwsh
|
|
2
|
-
#Requires -Version 5.1
|
|
3
|
-
|
|
4
|
-
<#
|
|
5
|
-
.SYNOPSIS
|
|
6
|
-
Test the Auto-Discovery endpoint
|
|
7
|
-
|
|
8
|
-
.DESCRIPTION
|
|
9
|
-
Tests the POST /notebooks/auto-discover endpoint with various scenarios:
|
|
10
|
-
- Valid NotebookLM URL
|
|
11
|
-
- Invalid URL format
|
|
12
|
-
- Missing URL field
|
|
13
|
-
|
|
14
|
-
.PARAMETER ServerUrl
|
|
15
|
-
Base URL of the NotebookLM MCP HTTP server (default: http://localhost:3000)
|
|
16
|
-
|
|
17
|
-
.PARAMETER NotebookUrl
|
|
18
|
-
Optional: NotebookLM notebook URL to test with
|
|
19
|
-
|
|
20
|
-
.PARAMETER TestAll
|
|
21
|
-
Test all public notebooks (default: false)
|
|
22
|
-
|
|
23
|
-
.EXAMPLE
|
|
24
|
-
.\test-auto-discovery.ps1
|
|
25
|
-
# Tests with prompts for notebook URL
|
|
26
|
-
|
|
27
|
-
.EXAMPLE
|
|
28
|
-
.\test-auto-discovery.ps1 -NotebookUrl "https://notebooklm.google.com/notebook/abc123"
|
|
29
|
-
# Tests with specific notebook URL
|
|
30
|
-
|
|
31
|
-
.EXAMPLE
|
|
32
|
-
.\test-auto-discovery.ps1 -TestAll
|
|
33
|
-
# Tests with all 5 public notebooks
|
|
34
|
-
#>
|
|
35
|
-
|
|
36
|
-
param(
|
|
37
|
-
[string]$ServerUrl = "http://localhost:3000",
|
|
38
|
-
[string]$NotebookUrl = "",
|
|
39
|
-
[switch]$TestAll = $false
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
# Public test notebooks
|
|
43
|
-
$PublicNotebooks = @(
|
|
44
|
-
"https://notebooklm.google.com/notebook/0d5cd576-2583-4835-8848-a5b7b6a97cea",
|
|
45
|
-
"https://notebooklm.google.com/notebook/505ee4b1-ad05-4673-a06b-1ec106c2b940",
|
|
46
|
-
"https://notebooklm.google.com/notebook/a09e40ad-d41f-43af-a3ca-5fc82bd459e5",
|
|
47
|
-
"https://notebooklm.google.com/notebook/19bde485-a9c1-4809-8884-e872b2b67b44",
|
|
48
|
-
"https://notebooklm.google.com/notebook/19fdf6bd-1975-40a3-9801-c554130bc64a"
|
|
49
|
-
)
|
|
50
|
-
|
|
51
|
-
# Colors
|
|
52
|
-
function Write-Success { param([string]$Message) Write-Host "✅ $Message" -ForegroundColor Green }
|
|
53
|
-
function Write-Info { param([string]$Message) Write-Host "ℹ️ $Message" -ForegroundColor Cyan }
|
|
54
|
-
function Write-Warning-Custom { param([string]$Message) Write-Host "⚠️ $Message" -ForegroundColor Yellow }
|
|
55
|
-
function Write-Error-Custom { param([string]$Message) Write-Host "❌ $Message" -ForegroundColor Red }
|
|
56
|
-
|
|
57
|
-
# Banner
|
|
58
|
-
Write-Host "`n╔════════════════════════════════════════════════════════╗" -ForegroundColor Magenta
|
|
59
|
-
Write-Host "║ ║" -ForegroundColor Magenta
|
|
60
|
-
Write-Host "║ AUTO-DISCOVERY ENDPOINT TESTS ║" -ForegroundColor Cyan
|
|
61
|
-
Write-Host "║ ║" -ForegroundColor Magenta
|
|
62
|
-
Write-Host "╚════════════════════════════════════════════════════════╝`n" -ForegroundColor Magenta
|
|
63
|
-
|
|
64
|
-
Write-Info "Testing server: $ServerUrl"
|
|
65
|
-
Write-Host ""
|
|
66
|
-
|
|
67
|
-
# Check server is running
|
|
68
|
-
Write-Info "Checking if server is accessible..."
|
|
69
|
-
try {
|
|
70
|
-
$health = Invoke-RestMethod -Uri "$ServerUrl/health" -Method GET -ErrorAction Stop
|
|
71
|
-
Write-Success "Server is running"
|
|
72
|
-
} catch {
|
|
73
|
-
Write-Error-Custom "Server is not accessible at $ServerUrl"
|
|
74
|
-
Write-Info "Start the server with: npm run daemon:start"
|
|
75
|
-
exit 1
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
Write-Host ""
|
|
79
|
-
|
|
80
|
-
# Test counter
|
|
81
|
-
$totalTests = 0
|
|
82
|
-
$passedTests = 0
|
|
83
|
-
$failedTests = 0
|
|
84
|
-
|
|
85
|
-
# ============================================================================
|
|
86
|
-
# Test 1: Missing URL field
|
|
87
|
-
# ============================================================================
|
|
88
|
-
$totalTests++
|
|
89
|
-
Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Gray
|
|
90
|
-
Write-Info "[Test 1/$totalTests] Missing URL field (should return 400)"
|
|
91
|
-
Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Gray
|
|
92
|
-
|
|
93
|
-
try {
|
|
94
|
-
$body = @{} | ConvertTo-Json
|
|
95
|
-
$response = Invoke-RestMethod -Uri "$ServerUrl/notebooks/auto-discover" -Method POST -Body $body -ContentType "application/json" -ErrorAction Stop
|
|
96
|
-
Write-Error-Custom "Test failed: Should have returned 400 error"
|
|
97
|
-
$failedTests++
|
|
98
|
-
} catch {
|
|
99
|
-
if ($_.Exception.Response.StatusCode -eq 400) {
|
|
100
|
-
Write-Success "Correctly returned 400 Bad Request"
|
|
101
|
-
$passedTests++
|
|
102
|
-
} else {
|
|
103
|
-
Write-Error-Custom "Wrong error code: $($_.Exception.Response.StatusCode)"
|
|
104
|
-
$failedTests++
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
Write-Host ""
|
|
109
|
-
|
|
110
|
-
# ============================================================================
|
|
111
|
-
# Test 2: Invalid URL format
|
|
112
|
-
# ============================================================================
|
|
113
|
-
$totalTests++
|
|
114
|
-
Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Gray
|
|
115
|
-
Write-Info "[Test 2/$totalTests] Invalid URL format (should return 400)"
|
|
116
|
-
Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Gray
|
|
117
|
-
|
|
118
|
-
try {
|
|
119
|
-
$body = @{
|
|
120
|
-
url = "https://example.com/not-a-notebooklm-url"
|
|
121
|
-
} | ConvertTo-Json
|
|
122
|
-
|
|
123
|
-
$response = Invoke-RestMethod -Uri "$ServerUrl/notebooks/auto-discover" -Method POST -Body $body -ContentType "application/json" -ErrorAction Stop
|
|
124
|
-
Write-Error-Custom "Test failed: Should have returned 400 error"
|
|
125
|
-
$failedTests++
|
|
126
|
-
} catch {
|
|
127
|
-
if ($_.Exception.Response.StatusCode -eq 400) {
|
|
128
|
-
Write-Success "Correctly returned 400 Bad Request"
|
|
129
|
-
$passedTests++
|
|
130
|
-
} else {
|
|
131
|
-
Write-Error-Custom "Wrong error code: $($_.Exception.Response.StatusCode)"
|
|
132
|
-
$failedTests++
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
Write-Host ""
|
|
137
|
-
|
|
138
|
-
# ============================================================================
|
|
139
|
-
# Test 3: Valid NotebookLM URL (requires real notebook)
|
|
140
|
-
# ============================================================================
|
|
141
|
-
|
|
142
|
-
# Determine which notebooks to test
|
|
143
|
-
$NotebooksToTest = @()
|
|
144
|
-
|
|
145
|
-
if ($TestAll) {
|
|
146
|
-
Write-Info "Testing ALL public notebooks (5 notebooks)"
|
|
147
|
-
$NotebooksToTest = $PublicNotebooks
|
|
148
|
-
} elseif ($NotebookUrl) {
|
|
149
|
-
Write-Info "Testing provided notebook URL"
|
|
150
|
-
$NotebooksToTest = @($NotebookUrl)
|
|
151
|
-
} else {
|
|
152
|
-
Write-Host ""
|
|
153
|
-
Write-Info "To test auto-discovery, provide a valid NotebookLM URL."
|
|
154
|
-
Write-Host "Format: https://notebooklm.google.com/notebook/[id]" -ForegroundColor White
|
|
155
|
-
Write-Host ""
|
|
156
|
-
Write-Host "Available public test notebooks:" -ForegroundColor White
|
|
157
|
-
for ($i = 0; $i -lt $PublicNotebooks.Count; $i++) {
|
|
158
|
-
Write-Host " $($i + 1). $($PublicNotebooks[$i])" -ForegroundColor Gray
|
|
159
|
-
}
|
|
160
|
-
Write-Host ""
|
|
161
|
-
$NotebookUrl = Read-Host "Enter NotebookLM URL (or press Enter to skip)"
|
|
162
|
-
|
|
163
|
-
if ($NotebookUrl) {
|
|
164
|
-
$NotebooksToTest = @($NotebookUrl)
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
if ($NotebooksToTest.Count -eq 0) {
|
|
169
|
-
Write-Warning-Custom "Skipping: No NotebookLM URL provided"
|
|
170
|
-
Write-Info "Rerun with -NotebookUrl parameter or -TestAll to test this"
|
|
171
|
-
Write-Host ""
|
|
172
|
-
} else {
|
|
173
|
-
# Test each notebook
|
|
174
|
-
foreach ($TestUrl in $NotebooksToTest) {
|
|
175
|
-
$totalTests++
|
|
176
|
-
$testNum = $totalTests
|
|
177
|
-
|
|
178
|
-
Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Gray
|
|
179
|
-
Write-Info "[Test $testNum] Valid NotebookLM URL auto-discovery"
|
|
180
|
-
Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Gray
|
|
181
|
-
Write-Info "Testing with: $TestUrl"
|
|
182
|
-
Write-Warning-Custom "This may take 20-30 seconds (querying NotebookLM)..."
|
|
183
|
-
Write-Host ""
|
|
184
|
-
|
|
185
|
-
try {
|
|
186
|
-
$body = @{
|
|
187
|
-
url = $TestUrl
|
|
188
|
-
} | ConvertTo-Json
|
|
189
|
-
|
|
190
|
-
$response = Invoke-RestMethod -Uri "$ServerUrl/notebooks/auto-discover" -Method POST -Body $body -ContentType "application/json" -ErrorAction Stop
|
|
191
|
-
|
|
192
|
-
if ($response.success) {
|
|
193
|
-
Write-Success "Auto-discovery successful!"
|
|
194
|
-
Write-Host ""
|
|
195
|
-
Write-Info "Generated Metadata:"
|
|
196
|
-
Write-Host " Name: $($response.notebook.name)" -ForegroundColor White
|
|
197
|
-
Write-Host " Description: $($response.notebook.description)" -ForegroundColor White
|
|
198
|
-
Write-Host " Topics: $($response.notebook.topics -join ', ')" -ForegroundColor White
|
|
199
|
-
Write-Host " Auto-generated: $($response.notebook.auto_generated)" -ForegroundColor White
|
|
200
|
-
Write-Host ""
|
|
201
|
-
|
|
202
|
-
# Validate format
|
|
203
|
-
$validations = @()
|
|
204
|
-
|
|
205
|
-
# Check name format (kebab-case, 3 words max)
|
|
206
|
-
if ($response.notebook.name -match '^[a-z0-9]+(-[a-z0-9]+){0,2}$') {
|
|
207
|
-
$validations += "✅ Name format valid (kebab-case)"
|
|
208
|
-
} else {
|
|
209
|
-
$validations += "❌ Name format invalid: $($response.notebook.name)"
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
# Check description length (<= 150 chars)
|
|
213
|
-
if ($response.notebook.description.Length -le 150) {
|
|
214
|
-
$validations += "✅ Description length valid ($($response.notebook.description.Length) chars)"
|
|
215
|
-
} else {
|
|
216
|
-
$validations += "❌ Description too long: $($response.notebook.description.Length) chars"
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
# Check topics count (8-10)
|
|
220
|
-
$topicCount = $response.notebook.topics.Count
|
|
221
|
-
if ($topicCount -ge 8 -and $topicCount -le 10) {
|
|
222
|
-
$validations += "✅ Topics count valid ($topicCount)"
|
|
223
|
-
} else {
|
|
224
|
-
$validations += "❌ Topics count invalid: $topicCount (must be 8-10)"
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
# Check auto_generated flag
|
|
228
|
-
if ($response.notebook.auto_generated -eq $true) {
|
|
229
|
-
$validations += "✅ Auto-generated flag set"
|
|
230
|
-
} else {
|
|
231
|
-
$validations += "❌ Auto-generated flag not set"
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
Write-Info "Validation Results:"
|
|
235
|
-
foreach ($validation in $validations) {
|
|
236
|
-
Write-Host " $validation"
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
if ($validations -match "❌") {
|
|
240
|
-
Write-Error-Custom "Metadata validation failed"
|
|
241
|
-
$failedTests++
|
|
242
|
-
} else {
|
|
243
|
-
Write-Success "All metadata validations passed"
|
|
244
|
-
$passedTests++
|
|
245
|
-
}
|
|
246
|
-
} else {
|
|
247
|
-
Write-Error-Custom "Auto-discovery failed: $($response.error)"
|
|
248
|
-
$failedTests++
|
|
249
|
-
}
|
|
250
|
-
} catch {
|
|
251
|
-
Write-Error-Custom "Request failed: $($_.Exception.Message)"
|
|
252
|
-
if ($_.ErrorDetails.Message) {
|
|
253
|
-
$errorObj = $_.ErrorDetails.Message | ConvertFrom-Json
|
|
254
|
-
Write-Host " Error: $($errorObj.error)" -ForegroundColor Red
|
|
255
|
-
}
|
|
256
|
-
$failedTests++
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
Write-Host ""
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
Write-Host ""
|
|
264
|
-
|
|
265
|
-
# ============================================================================
|
|
266
|
-
# Summary
|
|
267
|
-
# ============================================================================
|
|
268
|
-
Write-Host "╔════════════════════════════════════════════════════════╗" -ForegroundColor Gray
|
|
269
|
-
Write-Host "║ ║" -ForegroundColor Gray
|
|
270
|
-
Write-Host "║ TEST SUMMARY ║" -ForegroundColor Cyan
|
|
271
|
-
Write-Host "║ ║" -ForegroundColor Gray
|
|
272
|
-
Write-Host "╚════════════════════════════════════════════════════════╝" -ForegroundColor Gray
|
|
273
|
-
Write-Host ""
|
|
274
|
-
|
|
275
|
-
Write-Host "Total tests: $totalTests" -ForegroundColor White
|
|
276
|
-
Write-Host "Passed: $passedTests" -ForegroundColor Green
|
|
277
|
-
Write-Host "Failed: $failedTests" -ForegroundColor $(if ($failedTests -gt 0) { "Red" } else { "Gray" })
|
|
278
|
-
Write-Host "Success rate: $([math]::Round(($passedTests / $totalTests) * 100, 1))%" -ForegroundColor White
|
|
279
|
-
Write-Host ""
|
|
280
|
-
|
|
281
|
-
if ($failedTests -gt 0) {
|
|
282
|
-
Write-Host "╔════════════════════════════════════════════════════════╗" -ForegroundColor Red
|
|
283
|
-
Write-Host "║ ║" -ForegroundColor Red
|
|
284
|
-
Write-Host "║ ❌ SOME TESTS FAILED ║" -ForegroundColor Red
|
|
285
|
-
Write-Host "║ ║" -ForegroundColor Red
|
|
286
|
-
Write-Host "╚════════════════════════════════════════════════════════╝" -ForegroundColor Red
|
|
287
|
-
exit 1
|
|
288
|
-
} else {
|
|
289
|
-
Write-Host "╔════════════════════════════════════════════════════════╗" -ForegroundColor Green
|
|
290
|
-
Write-Host "║ ║" -ForegroundColor Green
|
|
291
|
-
Write-Host "║ ✅ ALL TESTS PASSED ║" -ForegroundColor Green
|
|
292
|
-
Write-Host "║ ║" -ForegroundColor Green
|
|
293
|
-
Write-Host "╚════════════════════════════════════════════════════════╝" -ForegroundColor Green
|
|
294
|
-
exit 0
|
|
295
|
-
}
|
|
1
|
+
#!/usr/bin/env pwsh
|
|
2
|
+
#Requires -Version 5.1
|
|
3
|
+
|
|
4
|
+
<#
|
|
5
|
+
.SYNOPSIS
|
|
6
|
+
Test the Auto-Discovery endpoint
|
|
7
|
+
|
|
8
|
+
.DESCRIPTION
|
|
9
|
+
Tests the POST /notebooks/auto-discover endpoint with various scenarios:
|
|
10
|
+
- Valid NotebookLM URL
|
|
11
|
+
- Invalid URL format
|
|
12
|
+
- Missing URL field
|
|
13
|
+
|
|
14
|
+
.PARAMETER ServerUrl
|
|
15
|
+
Base URL of the NotebookLM MCP HTTP server (default: http://localhost:3000)
|
|
16
|
+
|
|
17
|
+
.PARAMETER NotebookUrl
|
|
18
|
+
Optional: NotebookLM notebook URL to test with
|
|
19
|
+
|
|
20
|
+
.PARAMETER TestAll
|
|
21
|
+
Test all public notebooks (default: false)
|
|
22
|
+
|
|
23
|
+
.EXAMPLE
|
|
24
|
+
.\test-auto-discovery.ps1
|
|
25
|
+
# Tests with prompts for notebook URL
|
|
26
|
+
|
|
27
|
+
.EXAMPLE
|
|
28
|
+
.\test-auto-discovery.ps1 -NotebookUrl "https://notebooklm.google.com/notebook/abc123"
|
|
29
|
+
# Tests with specific notebook URL
|
|
30
|
+
|
|
31
|
+
.EXAMPLE
|
|
32
|
+
.\test-auto-discovery.ps1 -TestAll
|
|
33
|
+
# Tests with all 5 public notebooks
|
|
34
|
+
#>
|
|
35
|
+
|
|
36
|
+
param(
|
|
37
|
+
[string]$ServerUrl = "http://localhost:3000",
|
|
38
|
+
[string]$NotebookUrl = "",
|
|
39
|
+
[switch]$TestAll = $false
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# Public test notebooks
|
|
43
|
+
$PublicNotebooks = @(
|
|
44
|
+
"https://notebooklm.google.com/notebook/0d5cd576-2583-4835-8848-a5b7b6a97cea",
|
|
45
|
+
"https://notebooklm.google.com/notebook/505ee4b1-ad05-4673-a06b-1ec106c2b940",
|
|
46
|
+
"https://notebooklm.google.com/notebook/a09e40ad-d41f-43af-a3ca-5fc82bd459e5",
|
|
47
|
+
"https://notebooklm.google.com/notebook/19bde485-a9c1-4809-8884-e872b2b67b44",
|
|
48
|
+
"https://notebooklm.google.com/notebook/19fdf6bd-1975-40a3-9801-c554130bc64a"
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# Colors
|
|
52
|
+
function Write-Success { param([string]$Message) Write-Host "✅ $Message" -ForegroundColor Green }
|
|
53
|
+
function Write-Info { param([string]$Message) Write-Host "ℹ️ $Message" -ForegroundColor Cyan }
|
|
54
|
+
function Write-Warning-Custom { param([string]$Message) Write-Host "⚠️ $Message" -ForegroundColor Yellow }
|
|
55
|
+
function Write-Error-Custom { param([string]$Message) Write-Host "❌ $Message" -ForegroundColor Red }
|
|
56
|
+
|
|
57
|
+
# Banner
|
|
58
|
+
Write-Host "`n╔════════════════════════════════════════════════════════╗" -ForegroundColor Magenta
|
|
59
|
+
Write-Host "║ ║" -ForegroundColor Magenta
|
|
60
|
+
Write-Host "║ AUTO-DISCOVERY ENDPOINT TESTS ║" -ForegroundColor Cyan
|
|
61
|
+
Write-Host "║ ║" -ForegroundColor Magenta
|
|
62
|
+
Write-Host "╚════════════════════════════════════════════════════════╝`n" -ForegroundColor Magenta
|
|
63
|
+
|
|
64
|
+
Write-Info "Testing server: $ServerUrl"
|
|
65
|
+
Write-Host ""
|
|
66
|
+
|
|
67
|
+
# Check server is running
|
|
68
|
+
Write-Info "Checking if server is accessible..."
|
|
69
|
+
try {
|
|
70
|
+
$health = Invoke-RestMethod -Uri "$ServerUrl/health" -Method GET -ErrorAction Stop
|
|
71
|
+
Write-Success "Server is running"
|
|
72
|
+
} catch {
|
|
73
|
+
Write-Error-Custom "Server is not accessible at $ServerUrl"
|
|
74
|
+
Write-Info "Start the server with: npm run daemon:start"
|
|
75
|
+
exit 1
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
Write-Host ""
|
|
79
|
+
|
|
80
|
+
# Test counter
|
|
81
|
+
$totalTests = 0
|
|
82
|
+
$passedTests = 0
|
|
83
|
+
$failedTests = 0
|
|
84
|
+
|
|
85
|
+
# ============================================================================
|
|
86
|
+
# Test 1: Missing URL field
|
|
87
|
+
# ============================================================================
|
|
88
|
+
$totalTests++
|
|
89
|
+
Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Gray
|
|
90
|
+
Write-Info "[Test 1/$totalTests] Missing URL field (should return 400)"
|
|
91
|
+
Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Gray
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
$body = @{} | ConvertTo-Json
|
|
95
|
+
$response = Invoke-RestMethod -Uri "$ServerUrl/notebooks/auto-discover" -Method POST -Body $body -ContentType "application/json" -ErrorAction Stop
|
|
96
|
+
Write-Error-Custom "Test failed: Should have returned 400 error"
|
|
97
|
+
$failedTests++
|
|
98
|
+
} catch {
|
|
99
|
+
if ($_.Exception.Response.StatusCode -eq 400) {
|
|
100
|
+
Write-Success "Correctly returned 400 Bad Request"
|
|
101
|
+
$passedTests++
|
|
102
|
+
} else {
|
|
103
|
+
Write-Error-Custom "Wrong error code: $($_.Exception.Response.StatusCode)"
|
|
104
|
+
$failedTests++
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
Write-Host ""
|
|
109
|
+
|
|
110
|
+
# ============================================================================
|
|
111
|
+
# Test 2: Invalid URL format
|
|
112
|
+
# ============================================================================
|
|
113
|
+
$totalTests++
|
|
114
|
+
Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Gray
|
|
115
|
+
Write-Info "[Test 2/$totalTests] Invalid URL format (should return 400)"
|
|
116
|
+
Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Gray
|
|
117
|
+
|
|
118
|
+
try {
|
|
119
|
+
$body = @{
|
|
120
|
+
url = "https://example.com/not-a-notebooklm-url"
|
|
121
|
+
} | ConvertTo-Json
|
|
122
|
+
|
|
123
|
+
$response = Invoke-RestMethod -Uri "$ServerUrl/notebooks/auto-discover" -Method POST -Body $body -ContentType "application/json" -ErrorAction Stop
|
|
124
|
+
Write-Error-Custom "Test failed: Should have returned 400 error"
|
|
125
|
+
$failedTests++
|
|
126
|
+
} catch {
|
|
127
|
+
if ($_.Exception.Response.StatusCode -eq 400) {
|
|
128
|
+
Write-Success "Correctly returned 400 Bad Request"
|
|
129
|
+
$passedTests++
|
|
130
|
+
} else {
|
|
131
|
+
Write-Error-Custom "Wrong error code: $($_.Exception.Response.StatusCode)"
|
|
132
|
+
$failedTests++
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
Write-Host ""
|
|
137
|
+
|
|
138
|
+
# ============================================================================
|
|
139
|
+
# Test 3: Valid NotebookLM URL (requires real notebook)
|
|
140
|
+
# ============================================================================
|
|
141
|
+
|
|
142
|
+
# Determine which notebooks to test
|
|
143
|
+
$NotebooksToTest = @()
|
|
144
|
+
|
|
145
|
+
if ($TestAll) {
|
|
146
|
+
Write-Info "Testing ALL public notebooks (5 notebooks)"
|
|
147
|
+
$NotebooksToTest = $PublicNotebooks
|
|
148
|
+
} elseif ($NotebookUrl) {
|
|
149
|
+
Write-Info "Testing provided notebook URL"
|
|
150
|
+
$NotebooksToTest = @($NotebookUrl)
|
|
151
|
+
} else {
|
|
152
|
+
Write-Host ""
|
|
153
|
+
Write-Info "To test auto-discovery, provide a valid NotebookLM URL."
|
|
154
|
+
Write-Host "Format: https://notebooklm.google.com/notebook/[id]" -ForegroundColor White
|
|
155
|
+
Write-Host ""
|
|
156
|
+
Write-Host "Available public test notebooks:" -ForegroundColor White
|
|
157
|
+
for ($i = 0; $i -lt $PublicNotebooks.Count; $i++) {
|
|
158
|
+
Write-Host " $($i + 1). $($PublicNotebooks[$i])" -ForegroundColor Gray
|
|
159
|
+
}
|
|
160
|
+
Write-Host ""
|
|
161
|
+
$NotebookUrl = Read-Host "Enter NotebookLM URL (or press Enter to skip)"
|
|
162
|
+
|
|
163
|
+
if ($NotebookUrl) {
|
|
164
|
+
$NotebooksToTest = @($NotebookUrl)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if ($NotebooksToTest.Count -eq 0) {
|
|
169
|
+
Write-Warning-Custom "Skipping: No NotebookLM URL provided"
|
|
170
|
+
Write-Info "Rerun with -NotebookUrl parameter or -TestAll to test this"
|
|
171
|
+
Write-Host ""
|
|
172
|
+
} else {
|
|
173
|
+
# Test each notebook
|
|
174
|
+
foreach ($TestUrl in $NotebooksToTest) {
|
|
175
|
+
$totalTests++
|
|
176
|
+
$testNum = $totalTests
|
|
177
|
+
|
|
178
|
+
Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Gray
|
|
179
|
+
Write-Info "[Test $testNum] Valid NotebookLM URL auto-discovery"
|
|
180
|
+
Write-Host "─────────────────────────────────────────────────────────" -ForegroundColor Gray
|
|
181
|
+
Write-Info "Testing with: $TestUrl"
|
|
182
|
+
Write-Warning-Custom "This may take 20-30 seconds (querying NotebookLM)..."
|
|
183
|
+
Write-Host ""
|
|
184
|
+
|
|
185
|
+
try {
|
|
186
|
+
$body = @{
|
|
187
|
+
url = $TestUrl
|
|
188
|
+
} | ConvertTo-Json
|
|
189
|
+
|
|
190
|
+
$response = Invoke-RestMethod -Uri "$ServerUrl/notebooks/auto-discover" -Method POST -Body $body -ContentType "application/json" -ErrorAction Stop
|
|
191
|
+
|
|
192
|
+
if ($response.success) {
|
|
193
|
+
Write-Success "Auto-discovery successful!"
|
|
194
|
+
Write-Host ""
|
|
195
|
+
Write-Info "Generated Metadata:"
|
|
196
|
+
Write-Host " Name: $($response.notebook.name)" -ForegroundColor White
|
|
197
|
+
Write-Host " Description: $($response.notebook.description)" -ForegroundColor White
|
|
198
|
+
Write-Host " Topics: $($response.notebook.topics -join ', ')" -ForegroundColor White
|
|
199
|
+
Write-Host " Auto-generated: $($response.notebook.auto_generated)" -ForegroundColor White
|
|
200
|
+
Write-Host ""
|
|
201
|
+
|
|
202
|
+
# Validate format
|
|
203
|
+
$validations = @()
|
|
204
|
+
|
|
205
|
+
# Check name format (kebab-case, 3 words max)
|
|
206
|
+
if ($response.notebook.name -match '^[a-z0-9]+(-[a-z0-9]+){0,2}$') {
|
|
207
|
+
$validations += "✅ Name format valid (kebab-case)"
|
|
208
|
+
} else {
|
|
209
|
+
$validations += "❌ Name format invalid: $($response.notebook.name)"
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
# Check description length (<= 150 chars)
|
|
213
|
+
if ($response.notebook.description.Length -le 150) {
|
|
214
|
+
$validations += "✅ Description length valid ($($response.notebook.description.Length) chars)"
|
|
215
|
+
} else {
|
|
216
|
+
$validations += "❌ Description too long: $($response.notebook.description.Length) chars"
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
# Check topics count (8-10)
|
|
220
|
+
$topicCount = $response.notebook.topics.Count
|
|
221
|
+
if ($topicCount -ge 8 -and $topicCount -le 10) {
|
|
222
|
+
$validations += "✅ Topics count valid ($topicCount)"
|
|
223
|
+
} else {
|
|
224
|
+
$validations += "❌ Topics count invalid: $topicCount (must be 8-10)"
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
# Check auto_generated flag
|
|
228
|
+
if ($response.notebook.auto_generated -eq $true) {
|
|
229
|
+
$validations += "✅ Auto-generated flag set"
|
|
230
|
+
} else {
|
|
231
|
+
$validations += "❌ Auto-generated flag not set"
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
Write-Info "Validation Results:"
|
|
235
|
+
foreach ($validation in $validations) {
|
|
236
|
+
Write-Host " $validation"
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if ($validations -match "❌") {
|
|
240
|
+
Write-Error-Custom "Metadata validation failed"
|
|
241
|
+
$failedTests++
|
|
242
|
+
} else {
|
|
243
|
+
Write-Success "All metadata validations passed"
|
|
244
|
+
$passedTests++
|
|
245
|
+
}
|
|
246
|
+
} else {
|
|
247
|
+
Write-Error-Custom "Auto-discovery failed: $($response.error)"
|
|
248
|
+
$failedTests++
|
|
249
|
+
}
|
|
250
|
+
} catch {
|
|
251
|
+
Write-Error-Custom "Request failed: $($_.Exception.Message)"
|
|
252
|
+
if ($_.ErrorDetails.Message) {
|
|
253
|
+
$errorObj = $_.ErrorDetails.Message | ConvertFrom-Json
|
|
254
|
+
Write-Host " Error: $($errorObj.error)" -ForegroundColor Red
|
|
255
|
+
}
|
|
256
|
+
$failedTests++
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
Write-Host ""
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
Write-Host ""
|
|
264
|
+
|
|
265
|
+
# ============================================================================
|
|
266
|
+
# Summary
|
|
267
|
+
# ============================================================================
|
|
268
|
+
Write-Host "╔════════════════════════════════════════════════════════╗" -ForegroundColor Gray
|
|
269
|
+
Write-Host "║ ║" -ForegroundColor Gray
|
|
270
|
+
Write-Host "║ TEST SUMMARY ║" -ForegroundColor Cyan
|
|
271
|
+
Write-Host "║ ║" -ForegroundColor Gray
|
|
272
|
+
Write-Host "╚════════════════════════════════════════════════════════╝" -ForegroundColor Gray
|
|
273
|
+
Write-Host ""
|
|
274
|
+
|
|
275
|
+
Write-Host "Total tests: $totalTests" -ForegroundColor White
|
|
276
|
+
Write-Host "Passed: $passedTests" -ForegroundColor Green
|
|
277
|
+
Write-Host "Failed: $failedTests" -ForegroundColor $(if ($failedTests -gt 0) { "Red" } else { "Gray" })
|
|
278
|
+
Write-Host "Success rate: $([math]::Round(($passedTests / $totalTests) * 100, 1))%" -ForegroundColor White
|
|
279
|
+
Write-Host ""
|
|
280
|
+
|
|
281
|
+
if ($failedTests -gt 0) {
|
|
282
|
+
Write-Host "╔════════════════════════════════════════════════════════╗" -ForegroundColor Red
|
|
283
|
+
Write-Host "║ ║" -ForegroundColor Red
|
|
284
|
+
Write-Host "║ ❌ SOME TESTS FAILED ║" -ForegroundColor Red
|
|
285
|
+
Write-Host "║ ║" -ForegroundColor Red
|
|
286
|
+
Write-Host "╚════════════════════════════════════════════════════════╝" -ForegroundColor Red
|
|
287
|
+
exit 1
|
|
288
|
+
} else {
|
|
289
|
+
Write-Host "╔════════════════════════════════════════════════════════╗" -ForegroundColor Green
|
|
290
|
+
Write-Host "║ ║" -ForegroundColor Green
|
|
291
|
+
Write-Host "║ ✅ ALL TESTS PASSED ║" -ForegroundColor Green
|
|
292
|
+
Write-Host "║ ║" -ForegroundColor Green
|
|
293
|
+
Write-Host "╚════════════════════════════════════════════════════════╝" -ForegroundColor Green
|
|
294
|
+
exit 0
|
|
295
|
+
}
|