Move docs/ package mirror into document-navigator plugin
Relocate the ~6k-file docs tree from the repo root into plugins/document-navigator/docs/ so the plugin is self-contained and portable. docs/superpowers/ (specs and plans) stays at the repo root. Moved via cp+rm rather than git mv because directory rename() fails with EPERM on this WSL /mnt DrvFs mount; git rename-detection pairs the identical-content files at commit time. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"name": "suaveplan-testing-workflow",
|
||||
"version": "1.0.0",
|
||||
"description": "Testing commands, CI/CD integration, turborepo filtering, and troubleshooting for Suaveplan"
|
||||
}
|
||||
@@ -0,0 +1,243 @@
|
||||
---
|
||||
name: testing-workflow
|
||||
description: Testing commands, CI/CD integration, advanced turborepo filtering, E2E/Storybook testing, development workflow, and troubleshooting for the Suaveplan monorepo
|
||||
---
|
||||
|
||||
# Testing Workflow & CI/CD
|
||||
|
||||
Use this skill when running tests, setting up CI/CD, troubleshooting build issues, or following the development workflow in the Suaveplan monorepo.
|
||||
|
||||
## Package Testing
|
||||
|
||||
```bash
|
||||
# Lint a package
|
||||
bun run lint --filter=@suaveplan/<package-name>
|
||||
|
||||
# Type check a package
|
||||
bun run typecheck --filter=@suaveplan/<package-name>
|
||||
|
||||
# Run unit/integration tests
|
||||
bun run test --filter=@suaveplan/<package-name>
|
||||
|
||||
# Run tests with coverage
|
||||
bun run test:coverage --filter=@suaveplan/<package-name>
|
||||
|
||||
# Run E2E tests (Playwright)
|
||||
bun run e2e --filter=@suaveplan/<package-name>
|
||||
```
|
||||
|
||||
## Workspace-Wide Testing
|
||||
|
||||
```bash
|
||||
bunx turbo lint # Lint all packages
|
||||
bunx turbo typecheck # Type check all packages
|
||||
bunx turbo test # Run all tests
|
||||
bunx turbo test:coverage # All tests with coverage
|
||||
bunx turbo e2e # All E2E tests
|
||||
```
|
||||
|
||||
## Advanced Turborepo Filtering
|
||||
|
||||
```bash
|
||||
# Package and its dependencies
|
||||
bunx turbo build --filter=@suaveplan/web...
|
||||
|
||||
# Package and its dependents
|
||||
bunx turbo build --filter=...@suaveplan/core
|
||||
|
||||
# Affected since main branch
|
||||
bunx turbo build --filter=...[main]
|
||||
|
||||
# Affected since specific commit
|
||||
bunx turbo build --filter=...[HEAD^1]
|
||||
|
||||
# Combine filters (AND)
|
||||
bunx turbo test --filter=@suaveplan/ui --filter=...@suaveplan/design-system
|
||||
|
||||
# Multiple packages (OR)
|
||||
bunx turbo test --filter=@suaveplan/{ui,forms,auth-ui}
|
||||
|
||||
# Exclude packages
|
||||
bunx turbo test --filter=!@suaveplan/storybook
|
||||
```
|
||||
|
||||
## E2E Testing
|
||||
|
||||
9 packages have Playwright E2E tests:
|
||||
|
||||
@suaveplan/web, @suaveplan/admin, @suaveplan/auth-ui, @suaveplan/dashboard, @suaveplan/onboarding, @suaveplan/billing, @suaveplan/forms, @suaveplan/ui, @suaveplan/storybook
|
||||
|
||||
```bash
|
||||
# Single package E2E
|
||||
bun run e2e --filter=@suaveplan/web
|
||||
|
||||
# Multiple packages E2E
|
||||
bunx turbo e2e --filter=@suaveplan/{web,admin,auth-ui}
|
||||
|
||||
# All E2E tests
|
||||
bunx turbo e2e
|
||||
```
|
||||
|
||||
## Storybook Testing
|
||||
|
||||
```bash
|
||||
# Start Storybook dev server
|
||||
bun run storybook --filter=@suaveplan/ui
|
||||
|
||||
# Run visual tests against Storybook
|
||||
bun run test:storybook --filter=@suaveplan/ui
|
||||
```
|
||||
|
||||
## Testing Best Practices
|
||||
|
||||
- Write clear, focused test descriptions
|
||||
- Use arrange-act-assert pattern
|
||||
- Test edge cases and error conditions
|
||||
- Keep tests fast and deterministic
|
||||
- Always add `{ timeout: 5000 }` to `it()`/`test()` calls (30000 for integration/async)
|
||||
- Use `provider: 'istanbul'` for vitest coverage (not v8)
|
||||
- Install `@vitest/coverage-istanbul` (from `catalog:testing`)
|
||||
|
||||
### Timeout Syntax
|
||||
|
||||
```typescript
|
||||
// Unit test
|
||||
it('description', { timeout: 5000 }, () => {
|
||||
// test body
|
||||
});
|
||||
|
||||
// Async test
|
||||
it('async description', { timeout: 10000 }, async () => {
|
||||
// async test body
|
||||
});
|
||||
```
|
||||
|
||||
## Tree-Shaking Verification
|
||||
|
||||
Before publishing any package:
|
||||
|
||||
1. Verify `sideEffects` declaration in package.json
|
||||
2. Test bundle sizes: `bunx vite-bundle-visualizer`
|
||||
3. Confirm no side effects in entry points:
|
||||
- Review `src/index.ts` for immediate execution
|
||||
- Check for global mutations or polyfills
|
||||
- Ensure only export statements exist
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### Starting Development
|
||||
|
||||
```bash
|
||||
bun install # Install dependencies
|
||||
bunx turbo build # Build all packages
|
||||
bunx turbo dev # Start development servers
|
||||
```
|
||||
|
||||
### Making Changes
|
||||
|
||||
```bash
|
||||
git checkout -b feature/my-feature # 1. Create feature branch
|
||||
# 2. Make changes to packages
|
||||
bunx turbo test --filter=...[HEAD^1] # 3. Run affected tests
|
||||
bunx turbo test:coverage --filter=...[HEAD^1] # 4. Check coverage
|
||||
bunx turbo lint typecheck --filter=...[HEAD^1] # 5. Lint and type check
|
||||
git add . && git commit -m "feat: msg" # 6. Commit changes
|
||||
```
|
||||
|
||||
### Phase Completion Requirements
|
||||
|
||||
Before marking a phase as complete, verify:
|
||||
|
||||
1. All tests passing: `bunx turbo test`
|
||||
2. 95%+ test coverage: `bunx turbo test:coverage`
|
||||
3. 90%+ documentation coverage: `bun run docs:check`
|
||||
4. No lint errors: `bunx turbo lint`
|
||||
5. No type errors: `bunx turbo typecheck`
|
||||
6. E2E tests passing: `bunx turbo e2e` (for applicable packages)
|
||||
7. Tree-shaking configured: All packages have `sideEffects` declaration
|
||||
|
||||
## CI/CD Integration
|
||||
|
||||
### GitHub Actions Example
|
||||
|
||||
```yaml
|
||||
name: CI
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: oven-sh/setup-bun@v1
|
||||
with:
|
||||
bun-version: latest
|
||||
|
||||
- name: Install dependencies
|
||||
run: bun install
|
||||
|
||||
- name: Build
|
||||
run: bunx turbo build
|
||||
|
||||
- name: Lint
|
||||
run: bunx turbo lint
|
||||
|
||||
- name: Type check
|
||||
run: bunx turbo typecheck
|
||||
|
||||
- name: Test
|
||||
run: bunx turbo test:coverage
|
||||
|
||||
- name: E2E tests
|
||||
run: bunx turbo e2e
|
||||
|
||||
- name: Upload coverage
|
||||
uses: codecov/codecov-action@v3
|
||||
```
|
||||
|
||||
### Remote Caching (Optional)
|
||||
|
||||
```bash
|
||||
bunx turbo login # Login to Vercel
|
||||
bunx turbo link # Link your repository
|
||||
bunx turbo build --remote-cache # Run with remote cache
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### React Version Conflicts
|
||||
|
||||
**Symptoms:** `Error: Minified React error #31`, `TypeError: Cannot read properties of null (reading 'useContext')`, build fails during static page generation.
|
||||
|
||||
**Root Cause:** Multiple React versions in monorepo.
|
||||
|
||||
**Solution:** Use Bun `overrides` with exact versions and nuclear clean install. See `suaveplan-dependency-management` skill for full steps.
|
||||
|
||||
### Clear Cache
|
||||
|
||||
```bash
|
||||
bunx turbo clean # Clear Turborepo cache
|
||||
rm -rf node_modules && rm bun.lockb && bun install # Clear Bun cache
|
||||
```
|
||||
|
||||
### Debug Mode
|
||||
|
||||
```bash
|
||||
bunx turbo test --filter=@suaveplan/core --verbosity=3 # Verbose logging
|
||||
bunx turbo test --summarize # Task execution summary
|
||||
```
|
||||
|
||||
### Type Errors
|
||||
|
||||
```bash
|
||||
bunx turbo build --filter=...@suaveplan/types # Build types for all packages
|
||||
bun tsc --noEmit --pretty # Type check with verbose output
|
||||
```
|
||||
|
||||
## Tool Selection
|
||||
|
||||
- MCP servers > Native tools > Basic alternatives
|
||||
- Use specialized tools for their designed purpose
|
||||
- Prefer powerful search tools (Grep, Glob) over bash
|
||||
Reference in New Issue
Block a user