aboutsummaryrefslogtreecommitdiff
path: root/packages/docs-test/run.ts
blob: a98d4a1b968a9a9d92f5ddf607670246b483b37f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env bun
import { spawn } from "child_process"
import path from "path"

const args = process.argv.slice(2)
const filter = args[0] // e.g., "typescript", "python", "integrations", or specific file

const TESTS_DIR = path.join(import.meta.dir, "tests")

interface TestFile {
  name: string
  path: string
  type: "ts" | "py"
}

function getTests(): TestFile[] {
  const tests: TestFile[] = []

  // TypeScript tests
  const tsTests = ["quickstart", "sdk", "search", "user-profiles"]
  for (const t of tsTests) {
    tests.push({
      name: `typescript/${t}`,
      path: path.join(TESTS_DIR, "typescript", `${t}.ts`),
      type: "ts",
    })
  }

  // Python tests
  const pyTests = ["quickstart", "sdk", "search", "user_profiles"]
  for (const t of pyTests) {
    tests.push({
      name: `python/${t}`,
      path: path.join(TESTS_DIR, "python", `${t}.py`),
      type: "py",
    })
  }

  // Integration tests
  const intTests = [
    { name: "ai-sdk", type: "ts" as const },
    { name: "openai-sdk", type: "ts" as const },
    { name: "openai-sdk", type: "py" as const },
    { name: "claude-memory", type: "ts" as const },
  ]
  for (const t of intTests) {
    tests.push({
      name: `integrations/${t.name}`,
      path: path.join(TESTS_DIR, "integrations", `${t.name}.${t.type === "ts" ? "ts" : "py"}`),
      type: t.type,
    })
  }

  return tests
}

async function runTest(test: TestFile): Promise<boolean> {
  return new Promise((resolve) => {
    console.log(`\n${"=".repeat(60)}`)
    console.log(`Running: ${test.name}`)
    console.log("=".repeat(60))

    const cmd = test.type === "ts" ? "bun" : path.join(import.meta.dir, ".venv", "bin", "python3")
    const proc = spawn(cmd, [test.path], {
      stdio: "inherit",
      env: { ...process.env },
    })

    proc.on("close", (code) => {
      resolve(code === 0)
    })
  })
}

async function main() {
  console.log("Supermemory Docs Test Runner")
  console.log("============================\n")

  let tests = getTests()

  // Filter tests if specified
  if (filter) {
    tests = tests.filter((t) => t.name.includes(filter) || t.type === filter.replace(".", ""))
  }

  if (tests.length === 0) {
    console.log("No tests matched the filter:", filter)
    console.log("\nAvailable tests:")
    getTests().forEach((t) => console.log(`  - ${t.name} (${t.type})`))
    process.exit(1)
  }

  console.log(`Running ${tests.length} test(s)...\n`)

  const results: { test: string; passed: boolean }[] = []

  for (const test of tests) {
    const passed = await runTest(test)
    results.push({ test: test.name, passed })
  }

  // Summary
  console.log(`\n${"=".repeat(60)}`)
  console.log("SUMMARY")
  console.log("=".repeat(60))

  const passed = results.filter((r) => r.passed).length
  const failed = results.filter((r) => !r.passed).length

  for (const r of results) {
    console.log(`${r.passed ? "✅" : "❌"} ${r.test}`)
  }

  console.log(`\nTotal: ${passed} passed, ${failed} failed`)

  if (failed > 0) {
    process.exit(1)
  }
}

main().catch(console.error)