Awesome-claude-code create-mock-repository
Generates InMemory repository implementations for PHP 8.4 testing. Creates fake repositories with array storage, supporting CRUD operations and queries without database.
install
source · Clone the upstream repo
git clone https://github.com/dykyi-roman/awesome-claude-code
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/dykyi-roman/awesome-claude-code "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/create-mock-repository" ~/.claude/skills/dykyi-roman-awesome-claude-code-create-mock-repository && rm -rf "$T"
manifest:
skills/create-mock-repository/SKILL.mdsource content
Mock Repository Generator
Generates InMemory (Fake) repository implementations for testing.
Characteristics
- No database — stores entities in memory
- Fast — no I/O operations
- Isolated — fresh state per test
- Deterministic — predictable behavior
- Implements interface — same contract as real repository
Template
<?php declare(strict_types=1); namespace Tests\Fake; use {RepositoryInterface}; use {Entity}; use {EntityId}; final class InMemory{Entity}Repository implements {RepositoryInterface} { /** @var array<string, {Entity}> */ private array $entities = []; public function save({Entity} $entity): void { $this->entities[$entity->id()->toString()] = $entity; } public function findById({EntityId} $id): ?{Entity} { return $this->entities[$id->toString()] ?? null; } public function delete({Entity} $entity): void { unset($this->entities[$entity->id()->toString()]); } /** @return list<{Entity}> */ public function findAll(): array { return array_values($this->entities); } public function clear(): void { $this->entities = []; } }
Generation Instructions
-
Read the repository interface:
- Extract all method signatures
- Identify entity type
- Identify ID type
-
Generate InMemory implementation:
- Array storage keyed by ID
- Implement all interface methods
- Add
for test cleanupclear()
-
Handle complex queries:
- Use
for criteriaarray_filter - Support specifications if used
- Implement pagination with
array_slice
- Use
-
Add test helpers (optional):
— access internal stategetAll()
— check existencehas(Id $id)
— entity countcount()
-
File placement:
tests/Fake/InMemory{Entity}Repository.php- Or
directorytests/Double/
Best Practices
- Match interface exactly — same method signatures
- Isolate per test — use
in tearDownclear() - Avoid complexity — simple in-memory logic
- Document deviations — if behavior differs from real impl
- Consider thread safety — for parallel tests (usually not needed)
References
— Complete repository examples (User, Order, Product)references/examples.md
— EventDispatcher, Mailer, Clock fakesreferences/other-fakes.md