251 lines
5.8 KiB
Markdown
251 lines
5.8 KiB
Markdown
# Pake CLI Test Suite
|
|
|
|
This directory contains the complete test suite for the Pake CLI tool.
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Run all tests (unit + integration + builder)
|
|
npm test
|
|
```
|
|
|
|
## Test Structure
|
|
|
|
```tree
|
|
tests/
|
|
├── index.js # Main test runner
|
|
├── cli.test.js # Unit tests for CLI functionality
|
|
├── integration.test.js # Integration tests
|
|
├── builder.test.js # Platform-specific builder tests
|
|
├── test.config.js # Shared test configuration
|
|
└── README.md # This file
|
|
```
|
|
|
|
## Test Categories
|
|
|
|
### 1. Unit Tests (`cli.test.js`)
|
|
|
|
Fast tests that verify individual CLI functions:
|
|
|
|
- ✅ Version command
|
|
- ✅ Help command
|
|
- ✅ Argument validation
|
|
- ✅ URL validation (including weekly.tw93.fun)
|
|
- ✅ Number validation
|
|
- ✅ Dependency checks
|
|
- ✅ Response time
|
|
- ✅ Remote icon URL validation
|
|
- ✅ Configuration merging logic
|
|
|
|
### 2. Integration Tests (`integration.test.js`)
|
|
|
|
Tests that verify components work together:
|
|
|
|
- ✅ Process spawning
|
|
- ✅ Interactive mode
|
|
- ✅ Build command construction
|
|
- ✅ File system permissions
|
|
- ✅ Dependency resolution
|
|
|
|
### 3. Builder Tests (`builder.test.js`)
|
|
|
|
Platform-specific builder logic tests:
|
|
|
|
- ✅ Mac file naming patterns
|
|
- ✅ Windows file naming patterns
|
|
- ✅ Linux file naming patterns (deb/rpm/AppImage)
|
|
- ✅ Architecture detection logic
|
|
- ✅ Multi-arch build detection
|
|
- ✅ Target format validation
|
|
|
|
All tests run automatically with: `npm test`
|
|
|
|
## Test Commands
|
|
|
|
| Command | Description | Coverage | Duration |
|
|
| ------------------- | ----------------------- | ---------------------------- | ----------- |
|
|
| `npm test` | Run all automated tests | Unit + Integration + Builder | ~30 seconds |
|
|
| `npm run cli:build` | Build CLI for testing | Development setup | ~5 seconds |
|
|
|
|
**GitHub Actions Integration:**
|
|
|
|
- Automated testing on push/PR to main/dev branches
|
|
- Multi-platform testing (Ubuntu, Windows, macOS)
|
|
- Quality checks and code formatting validation
|
|
|
|
## Manual Testing Scenarios
|
|
|
|
### Basic Usage
|
|
|
|
```bash
|
|
# Test basic app creation with weekly.tw93.fun
|
|
node dist/cli.js https://weekly.tw93.fun --name "Weekly"
|
|
|
|
# Test with custom dimensions
|
|
node dist/cli.js https://weekly.tw93.fun --name "Weekly" --width 1200 --height 800
|
|
|
|
# Test debug mode
|
|
node dist/cli.js https://weekly.tw93.fun --name "DebugApp" --debug
|
|
```
|
|
|
|
### Advanced Features
|
|
|
|
```bash
|
|
# Test with remote CDN icon
|
|
node dist/cli.js https://weekly.tw93.fun --name "IconWeekly" --icon "https://gw.alipayobjects.com/os/k/fw/weekly.icns"
|
|
|
|
# Test with injection files (create test files first)
|
|
echo "body { background: red; }" > test.css
|
|
echo "console.log('injected');" > test.js
|
|
node dist/cli.js https://weekly.tw93.fun --name "InjectionApp" --inject ./test.css,./test.js
|
|
|
|
# Test fullscreen app
|
|
node dist/cli.js https://weekly.tw93.fun --name "FullWeekly" --fullscreen
|
|
|
|
# Test system tray integration
|
|
node dist/cli.js https://weekly.tw93.fun --name "TrayWeekly" --show-system-tray
|
|
```
|
|
|
|
### Platform-Specific (macOS)
|
|
|
|
```bash
|
|
# Test universal binary
|
|
node dist/cli.js https://weekly.tw93.fun --name "Weekly" --multi-arch
|
|
|
|
# Test hidden title bar
|
|
node dist/cli.js https://weekly.tw93.fun --name "ImmersiveWeekly" --hide-title-bar
|
|
|
|
# Test dark mode
|
|
node dist/cli.js https://weekly.tw93.fun --name "DarkWeekly" --dark-mode
|
|
```
|
|
|
|
## Test Configuration
|
|
|
|
Tests use configuration from `test.config.js`:
|
|
|
|
```javascript
|
|
export const TIMEOUTS = {
|
|
QUICK: 3000, // Quick commands
|
|
MEDIUM: 10000, // Validation tests
|
|
LONG: 300000, // Build tests
|
|
};
|
|
|
|
export const TEST_URLS = {
|
|
WEEKLY: "https://weekly.tw93.fun",
|
|
VALID: "https://example.com",
|
|
GITHUB: "https://github.com",
|
|
INVALID: "not://a/valid[url]",
|
|
};
|
|
|
|
export const TEST_ASSETS = {
|
|
WEEKLY_ICNS: "https://gw.alipayobjects.com/os/k/fw/weekly.icns",
|
|
};
|
|
```
|
|
|
|
## Adding New Tests
|
|
|
|
### Unit Test
|
|
|
|
```javascript
|
|
// In cli.test.js
|
|
runner.addTest(
|
|
"My New Test",
|
|
() => {
|
|
// Test logic here
|
|
return true; // or false
|
|
},
|
|
"Test description"
|
|
);
|
|
```
|
|
|
|
### Integration Test
|
|
|
|
```javascript
|
|
// In integration.test.js
|
|
runner.addTest(
|
|
"My Integration Test",
|
|
async () => {
|
|
// Async test logic
|
|
return await someAsyncOperation();
|
|
},
|
|
TIMEOUTS.MEDIUM
|
|
);
|
|
```
|
|
|
|
## Continuous Integration
|
|
|
|
The project uses simplified GitHub Actions workflows:
|
|
|
|
### Current Workflows:
|
|
|
|
- **`quality-and-test.yml`** - Runs all tests, code formatting, and Rust quality checks
|
|
- **`claude-unified.yml`** - Claude AI integration for code review and assistance
|
|
- **`release.yml`** - Handles releases, app building, and Docker publishing
|
|
- **`pake-cli.yaml`** - Manual CLI building workflow
|
|
- **`pake_build_single_app.yaml`** - Reusable single app building workflow
|
|
|
|
### Integration Example:
|
|
|
|
```yaml
|
|
# Automatic testing on push/PR
|
|
- name: Run Quality & Tests
|
|
run: npm test
|
|
|
|
# Manual CLI building
|
|
- name: Build CLI
|
|
run: npm run cli:build
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
1. **"CLI file not found"**
|
|
|
|
```bash
|
|
npm run cli:build
|
|
```
|
|
|
|
2. **"Permission denied"**
|
|
|
|
```bash
|
|
chmod +x tests/index.js
|
|
```
|
|
|
|
3. **"Timeout errors"**
|
|
- Increase timeout in `test.config.js`
|
|
- Check system resources
|
|
|
|
### Debug Mode
|
|
|
|
Run tests with debug output:
|
|
|
|
```bash
|
|
DEBUG=1 npm test
|
|
```
|
|
|
|
## Performance Expectations
|
|
|
|
| Platform | First Build | Subsequent | Memory |
|
|
| --------- | ----------- | ---------- | ------ |
|
|
| M1 Mac | 2-3 min | 30-45s | ~200MB |
|
|
| Intel Mac | 3-4 min | 45-60s | ~250MB |
|
|
| Linux | 4-5 min | 60-90s | ~300MB |
|
|
| Windows | 5-6 min | 90-120s | ~350MB |
|
|
|
|
## Contributing
|
|
|
|
When adding new features:
|
|
|
|
1. Add unit tests for new functions
|
|
2. Add integration tests for new workflows
|
|
3. Update manual test scenarios
|
|
4. Run full test suite before submitting
|
|
|
|
```bash
|
|
# Pre-commit test routine
|
|
npm run cli:build
|
|
npm test
|
|
npm run test:build
|
|
```
|