Class: FakeLemmyV1Instance
Defined in: src/testing/lemmyv1/index.ts:224
FakeInstance for Lemmy v1 whose default routes are derived, per request, from the semantic seed store — tests describe what exists, not which endpoint returns it:
const alex = fake.seed.person({ name: "alex" });
fake.seed.post({ name: "Hello **world**", creator: alex });
fake.seed.loggedInAs(alex);Derived: site, post list/detail, comment list (honoring parent_id and max_depth), search, community, person (+ person content), account, unread counts, notifications, modlog, and the vote/save/create/edit/ delete/mark-read writes (which mutate the store). Lists paginate with opaque page_cursor strings, like the real server. Use mock() for error injection or endpoints outside this set, and calls() / waitForCall() to assert on outgoing requests. Wire-level builders stay available on build.
Extends
Constructors
Constructor
new FakeLemmyV1Instance(__namedParameters?): FakeLemmyV1Instance;Defined in: src/testing/lemmyv1/index.ts:245
Parameters
| Parameter | Type |
|---|---|
__namedParameters | FakeLemmyV1InstanceOptions |
Returns
FakeLemmyV1Instance
Overrides
Properties
| Property | Modifier | Type | Description | Inherited from | Defined in |
|---|---|---|---|---|---|
host | readonly | string | - | FakeInstance.host | src/testing/FakeInstance.ts:149 |
origin | readonly | string | - | FakeInstance.origin | src/testing/FakeInstance.ts:151 |
software | readonly | object | - | FakeInstance.software | src/testing/FakeInstance.ts:153 |
software.name | public | string | - | - | src/wellknown.ts:24 |
software.version | public | string | - | - | src/wellknown.ts:25 |
fetch | readonly | { (input, init?): Promise<Response>; (input, init?): Promise<Response>; } | fetch-compatible adapter. Prefer clientOptions() when constructing a ThreadiverseClient; use this directly to install a global fetch mock. Unrouted requests and { abort } responses throw TypeError, like a real network failure. | FakeInstance.fetch | src/testing/FakeInstance.ts:230 |
build | readonly | object | Wire-format builders bound to this instance's host | - | src/testing/lemmyv1/index.ts:226 |
build.commentNotification | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:571 |
build.commentView | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:572 |
build.community | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:573 |
build.communityResponse | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:574 |
build.communityView | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:575 |
build.getSiteResponse | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:576 |
build.localUser | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:577 |
build.modlogView | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:578 |
build.myUserInfo | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:579 |
build.pagedResponse | public | <T>(items, nextPage) => object | - | - | src/testing/lemmyv1/builders.ts:580 |
build.person | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:581 |
build.personResponse | public | (subject) => object | - | - | src/testing/lemmyv1/builders.ts:582 |
build.personView | public | (subject) => object | - | - | src/testing/lemmyv1/builders.ts:583 |
build.post | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:584 |
build.postResponse | public | (view) => object | - | - | src/testing/lemmyv1/builders.ts:585 |
build.postView | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:586 |
build.privateMessageNotification | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:587 |
build.privateMessageView | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:588 |
build.searchResponse | public | (over) => object | - | - | src/testing/lemmyv1/builders.ts:589 |
callsTo | readonly | <Operation>(operation) => PayloadOf<object[Operation]>[] | Canonical payloads of the requests an operation received | - | src/testing/lemmyv1/index.ts:229 |
on | readonly | object | Override an operation's response (canonical { error } supported) | - | src/testing/lemmyv1/index.ts:232 |
on.createComment | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:55 |
on.createPost | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:59 |
on.createPrivateMessage | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:60 |
on.deleteComment | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:64 |
on.deletePost | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:68 |
on.editComment | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:69 |
on.editPost | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:70 |
on.followCommunity | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:71 |
on.getComments | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:75 |
on.getCommunity | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:89 |
on.getModlog | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:95 |
on.getNotifications | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:96 |
on.getPersonDetails | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:107 |
on.getPost | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:113 |
on.getPosts | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:119 |
on.getRandomCommunity | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:133 |
on.getSite | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:134 |
on.getSiteMetadata | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:135 |
on.getUnreadCount | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:141 |
on.likeComment | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:142 |
on.likePost | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:146 |
on.listPersonContent | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:147 |
on.login | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:153 |
on.markAllAsRead | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:154 |
on.markNotificationAsRead | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:157 |
on.markPostAsRead | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:162 |
on.resolveObject | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:166 |
on.saveComment | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:172 |
on.savePost | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:176 |
on.search | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:177 |
once | readonly | object | Override an operation's next response only, then fall back | - | src/testing/lemmyv1/index.ts:235 |
once.createComment | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:55 |
once.createPost | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:59 |
once.createPrivateMessage | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:60 |
once.deleteComment | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:64 |
once.deletePost | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:68 |
once.editComment | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:69 |
once.editPost | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:70 |
once.followCommunity | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:71 |
once.getComments | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:75 |
once.getCommunity | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:89 |
once.getModlog | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:95 |
once.getNotifications | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:96 |
once.getPersonDetails | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:107 |
once.getPost | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:113 |
once.getPosts | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:119 |
once.getRandomCommunity | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:133 |
once.getSite | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:134 |
once.getSiteMetadata | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:135 |
once.getUnreadCount | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:141 |
once.likeComment | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:142 |
once.likePost | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:146 |
once.listPersonContent | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:147 |
once.login | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:153 |
once.markAllAsRead | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:154 |
once.markNotificationAsRead | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:157 |
once.markPostAsRead | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:162 |
once.resolveObject | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:166 |
once.saveComment | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:172 |
once.savePost | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:176 |
once.search | public | (responder) => void | - | - | src/testing/lemmyv1/index.ts:177 |
seed | readonly | SeedStore | Semantic content store the default routes are derived from | - | src/testing/lemmyv1/index.ts:238 |
waitForPayload | readonly | <Operation>(operation, predicate?, options?) => Promise<PayloadOf<object[Operation]>> | Wait for an operation's next request; resolves its canonical payload | - | src/testing/lemmyv1/index.ts:241 |
Methods
allCalls()
allCalls(): RecordedCall[];Defined in: src/testing/FakeInstance.ts:196
Every request this instance received, in order.
For "nothing was sent" claims: asserting a specific route was never called can't fail if the client has no way to call it, whereas comparing this list before and after an action genuinely checks that the action stayed local.
Returns
Inherited from
calls()
calls(matcher): RecordedCall[];Defined in: src/testing/FakeInstance.ts:201
All recorded requests matching "METHOD /path" (query ignored).
Parameters
| Parameter | Type |
|---|---|
matcher | | `POST /${string}` | `DELETE /${string}` | `GET /${string}` | `PUT /${string}` |
Returns
Inherited from
clientOptions()
clientOptions(): ThreadiverseClientOptions;Defined in: src/testing/FakeInstance.ts:217
Options for a ThreadiverseClient scoped to this fake: routes fetch through the instance and isolates software discovery from the process-global cache (so multiple fakes for the same host — e.g. different versions across tests — can't contaminate each other).
const client = new ThreadiverseClient(fake.origin, fake.clientOptions());Returns
Inherited from
handle()
handle(request): Promise<FakeResponse | undefined>;Defined in: src/testing/FakeInstance.ts:264
Resolve a request against the route table.
Returns undefined for requests to other origins (callers decide whether to pass those through). Unmocked same-origin requests are answered with a loud 404 instead of escaping to the real network.
Parameters
| Parameter | Type |
|---|---|
request | FakeRequest |
Returns
Promise<FakeResponse | undefined>
Inherited from
install()
install(page): Promise<void>;Defined in: src/testing/FakeInstance.ts:302
Install onto a Playwright page. Routes all traffic for this instance's origin; other origins are untouched.
Parameters
| Parameter | Type |
|---|---|
page | PageLike |
Returns
Promise<void>
Inherited from
mock()
mock(matcher, responder): void;Defined in: src/testing/FakeInstance.ts:329
Set (or replace) the response for an endpoint. Last call wins.
Parameters
| Parameter | Type |
|---|---|
matcher | | `POST /${string}` | `DELETE /${string}` | `GET /${string}` | `PUT /${string}` |
responder | Responder |
Returns
void
Inherited from
mockOnce()
mockOnce(matcher, responder): void;Defined in: src/testing/FakeInstance.ts:334
Respond once for an endpoint, then fall back to the standing mock.
Parameters
| Parameter | Type |
|---|---|
matcher | | `POST /${string}` | `DELETE /${string}` | `GET /${string}` | `PUT /${string}` |
responder | Responder |
Returns
void
Inherited from
waitForCall()
waitForCall(
matcher,
predicate?,
__namedParameters?): Promise<RecordedCall>;Defined in: src/testing/FakeInstance.ts:345
Wait until a matching request is recorded, then return the latest. Resolution is push-based (no polling), so pending waiters settle the moment the request lands — only the timeout path needs real timers.
Parameters
| Parameter | Type |
|---|---|
matcher | | `POST /${string}` | `DELETE /${string}` | `GET /${string}` | `PUT /${string}` |
predicate | (call) => boolean |
__namedParameters | { timeoutMs?: number; } |
__namedParameters.timeoutMs? | number |
Returns
Promise<RecordedCall>
Inherited from
buildOperationApi()
protected buildOperationApi<Ops>(operations, renderError): OperationApi<Ops>;Defined in: src/testing/FakeInstance.ts:380
Build the operation-level API (on/once/callsTo/waitForPayload) from a provider's operation definitions plus its error wire renderer.
Type Parameters
| Type Parameter |
|---|
Ops extends Record<string, OperationDef<unknown>> |
Parameters
| Parameter | Type |
|---|---|
operations | Ops |
renderError | (error) => FakeResponse |
Returns
OperationApi<Ops>
