Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,16 @@
*.pdb

# Test files and artifacts
*.test.db
test.db
test.db-*
coverage/
.nyc_output/

# Jest
jest-coverage/
.jest/

# Test data
tests/temp/
tests/fixtures/generated/
70 changes: 70 additions & 0 deletions docker-compose.test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
services:
# SeaweedFS for testing
master-test:
image: checkpointvcs/seaweedfs:local
build:
context: ./src/seaweedfs/docker
dockerfile: Dockerfile.local
pull_policy: never
command: "master -ip=master-test -ip.bind=0.0.0.0 -port=9333"
ports:
- "19333:9333"
volumes:
- test-seaweed-config:/etc/seaweedfs
networks:
- checkpoint-test
environment:
- NODE_ENV=test

volume-test:
image: checkpointvcs/seaweedfs:local
build:
context: ./src/seaweedfs/docker
dockerfile: Dockerfile.local
pull_policy: never
command: 'volume -mserver="master-test:9333" -ip.bind=0.0.0.0 -port=8080'
depends_on:
- master-test
ports:
- "18080:8080"
volumes:
- test-seaweed-data:/data
- test-seaweed-config:/etc/seaweedfs
networks:
- checkpoint-test

filer-test:
image: checkpointvcs/seaweedfs:local
build:
context: ./src/seaweedfs/docker
dockerfile: Dockerfile.local
pull_policy: never
command: 'filer -master="master-test:9333" -ip.bind=0.0.0.0 -port=8888'
depends_on:
- master-test
- volume-test
ports:
- "18888:8888"
volumes:
- test-seaweed-config:/etc/seaweedfs
networks:
- checkpoint-test

# Redis for testing
redis-test:
image: redis:alpine
ports:
- "16379:6379"
networks:
- checkpoint-test
command: redis-server --save ""
tmpfs:
- /data

volumes:
test-seaweed-data:
test-seaweed-config:

networks:
checkpoint-test:
driver: bridge
27 changes: 27 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/** @type {import('jest').Config} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
roots: ['<rootDir>/tests', '<rootDir>/src'],
testMatch: [
'**/tests/**/*.test.ts',
'**/tests/**/*.test.js',
'**/__tests__/**/*.test.ts',
'**/__tests__/**/*.test.js'
],
transform: {
'^.+\\.tsx?$': 'ts-jest',
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],
collectCoverageFrom: [
'src/**/*.{ts,tsx}',
'!src/**/*.d.ts',
'!src/**/node_modules/**',
'!src/**/dist/**',
'!src/**/build/**'
],
setupFilesAfterEnv: ['<rootDir>/tests/setup.ts'],
testTimeout: 120000, // 2 minutes for integration tests
maxWorkers: 1, // Run tests serially to avoid database conflicts
verbose: true
};
31 changes: 31 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"name": "@checkpointvcs/checkpoint",
"version": "1.0.0",
"private": true,
"license": "(Elastic-2.0 OR AGPL-3.0)",
"workspaces": [
"src/app",
"src/core",
"src/core/client",
"src/core/server",
"src/core/common",
"src/desktop",
"src/longtail/wrapper"
],
"scripts": {
"test": "jest",
"test:integration": "jest --testPathPattern=tests/integration",
"test:watch": "jest --watch",
"test:setup": "docker-compose -f docker-compose.test.yaml up -d",
"test:teardown": "docker-compose -f docker-compose.test.yaml down -v",
"test:full": "npm run test:setup && npm run test:integration && npm run test:teardown"
},
"devDependencies": {
"@types/jest": "^29.5.5",
"@types/node": "^20.14.10",
"jest": "^29.7.0",
"jest-environment-node": "^29.7.0",
"ts-jest": "^29.1.1",
"typescript": "^5.8.2"
}
}
6 changes: 5 additions & 1 deletion src/app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,11 @@
"lint:fix": "next lint --fix",
"preview": "next build && next start",
"start": "config-env --env=prod next start",
"typecheck": "tsc --noEmit"
"typecheck": "tsc --noEmit",
"test": "jest",
"test:watch": "jest --watch",
"test:db:setup": "DATABASE_URL=file:./test.db prisma db push",
"test:db:cleanup": "rm -f test.db"
},
"dependencies": {
"@auth/prisma-adapter": "^2.7.2",
Expand Down
4 changes: 3 additions & 1 deletion src/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
"lint": "eslint **/*.{js,ts,tsx}",
"cli": "NODE_CONFIG_DIR=client/config bun run client/src/bin.ts",
"package": "bun package.ts",
"server": "NODE_CONFIG_DIR=server/config bun run server/src/index.ts"
"server": "NODE_CONFIG_DIR=server/config bun run server/src/index.ts",
"test": "jest",
"test:watch": "jest --watch"
},
"dependencies": {
"@checkpointvcs/app": "link:@checkpointvcs/app",
Expand Down
43 changes: 43 additions & 0 deletions test-demo.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/bin/bash

# Example script to demonstrate running the integration tests
# This script shows the proper sequence of commands

set -e

echo "🚀 Checkpoint Integration Test Demo"
echo "================================="

# Check if we're in the right directory
if [ ! -f "package.json" ] || [ ! -d "tests" ]; then
echo "❌ Please run this script from the repository root"
exit 1
fi

echo "📋 Current test structure:"
find tests -name "*.ts" -type f | sort

echo ""
echo "📦 Root package.json test scripts:"
grep -A 10 '"scripts"' package.json | grep test

echo ""
echo "🔧 Environment checks:"
echo "Node version: $(node --version)"
echo "NPM version: $(npm --version)"
echo "Docker Compose available: $(docker compose version | head -1)"

echo ""
echo "✅ Test setup validation complete!"
echo ""
echo "To run the tests once dependencies are installed:"
echo " npm install # Install dependencies"
echo " npm run test:setup # Start Docker services"
echo " npm run test:integration # Run integration tests"
echo " npm run test:teardown # Cleanup Docker services"
echo ""
echo "Or run the full test suite:"
echo " npm run test:full # Complete test cycle"
echo ""
echo "For development:"
echo " npm run test:watch # Watch mode for development"
Loading