mirror of
https://github.com/tiennm99/ccs.git
synced 2026-10-04 14:13:13 +00:00
Build the canonical identity from the stat getCanonicalFile already takes, instead of a second lstat of the same inode. One syscall less, and mode, mtime and identity now describe the same moment rather than two adjacent ones. Assert in the adoption race tests that the foreign writer never fired. It writes only when the canonical path is observed empty, so a zero count states the invariant the fix establishes - the path is never left without a regular file - instead of only checking the final content. Built [OnSteroids](https://onsteroids.ai)
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/ |
Focused module and command behavior |
| Integration | integration/ |
Cross-module, process, proxy, auth, and web-server behavior |
| End to end | e2e/ |
Packaged CLI workflows |
| npm package | npm/ |
Installation, exports, and package behavior |
| Native | native/ |
Unix and Windows shell behavior |
| Docker | docker/ |
Compose and stable network/service contracts |
| Documentation | docs/ |
Repository documentation invariants |
| Shared support | shared/ |
Fixtures and helpers reused by suites |
| 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. Bucket membership
and execution live in
../scripts/run-test-bucket.js.
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:
bun run format
bun run lint:fix
bun run validate
For the closest local equivalent to PR CI:
bun run validate:ci-parity
Dashboard tests use Vitest and are documented in
../ui/README.md.
Test Isolation
- Set
CCS_HOMEto a temporary directory. - Never read or modify a contributor's real
~/.ccs/or~/.claude/. - Use
getCcsDir()from../src/utils/config-manager.tsfor 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.