Files
ccs/tests/README.md
T

80 lines
2.8 KiB
Markdown

# CCS Test Suite
Root TypeScript and JavaScript tests run with Bun's test runner. Native shell,
PowerShell, Docker, and standalone probes cover contracts that need a real
platform or process boundary.
## Ownership
| Area | Path | Use for |
| --- | --- | --- |
| Unit | [`unit/`](./unit/) | Focused module and command behavior |
| Integration | [`integration/`](./integration/) | Cross-module, process, proxy, auth, and web-server behavior |
| End to end | [`e2e/`](./e2e/) | Packaged CLI workflows |
| npm package | [`npm/`](./npm/) | Installation, exports, and package behavior |
| Native | [`native/`](./native/) | Unix and Windows shell behavior |
| Docker | [`docker/`](./docker/) | Compose and stable network/service contracts |
| Documentation | [`docs/`](./docs/) | Repository documentation invariants |
| Shared support | [`shared/`](./shared/) | Fixtures and helpers reused by suites |
| Mocks | [`mocks/`](./mocks/) | Bounded test doubles and fixtures |
Some source domains also keep focused tests in `src/**/__tests__/`. Follow the
nearest established pattern and avoid moving tests solely for taxonomy.
## Commands
Commands are defined in [`../package.json`](../package.json). Bucket membership
and execution live in
[`../scripts/run-test-bucket.js`](../scripts/run-test-bucket.js).
```bash
bun run test:fast # Fast Bun test bucket
bun run test:slow # Slow Bun test bucket
bun run test:all # All root non-e2e Bun test buckets
bun run test:unit # tests/unit
bun run test:npm # tests/npm
bun run test:native # Native Unix edge-case script
bun run test:e2e # tests/e2e with fail-fast and extended timeout
bun run test # Build, then test:all
```
For the normal contributor gate:
```bash
bun run format
bun run lint:fix
bun run validate
```
For the closest local equivalent to PR CI:
```bash
bun run validate:ci-parity
```
Dashboard tests use Vitest and are documented in
[`../ui/README.md`](../ui/README.md).
## Test Isolation
- Set `CCS_HOME` to a temporary directory.
- Never read or modify a contributor's real `~/.ccs/` or `~/.claude/`.
- Use `getCcsDir()` from
[`../src/utils/config-manager.ts`](../src/utils/config-manager.ts) for CCS
paths.
- Keep fixtures deterministic and free of credentials or private account data.
- Use real behavior at the boundary under test; do not weaken assertions to
hide regressions.
## Adding Coverage
- Add a focused unit test for isolated logic.
- Add integration coverage when behavior crosses modules, processes, HTTP, or
persistence boundaries.
- Add e2e coverage when command routing or packaged CLI behavior is the
contract.
- Add native or Docker coverage only when platform/runtime behavior cannot be
represented faithfully in Bun tests.
- Run the smallest relevant command first, then broaden to the contributor or
CI-parity gate when shared contracts changed.