Unverified Commit 2c9d075a authored by Hong Minhee's avatar Hong Minhee
Browse files

Fix tests and JSDoc that referenced MockContext

- Updated mock.test.ts to use MockFederation.createContext() instead of
  direct MockContext instantiation
- Simplified MockFederation.createContext() to continue using MockContext
  internally for proper URI method support
- Updated JSDoc example in MockContext to use the public API pattern
parent e0130819
Loading
Loading
Loading
Loading
+10 −17
Original line number Diff line number Diff line
import { Create, Note, Person } from "@fedify/fedify/vocab";
import { assertEquals, assertRejects } from "@std/assert";
import { test } from "../../fedify/src/testing/mod.ts";
import { MockContext, MockFederation } from "./mock.ts";
import { MockFederation } from "./mock.ts";

test("getSentActivities returns sent activities", async () => {
  const mockFederation = new MockFederation<void>();
@@ -97,11 +97,10 @@ test("receiveActivity triggers inbox listeners", async () => {

test("MockContext tracks sent activities", async () => {
  const mockFederation = new MockFederation<void>();
  const mockContext = new MockContext({
    url: new URL("https://example.com"),
    data: undefined,
    federation: mockFederation,
  });
  const mockContext = mockFederation.createContext(
    new URL("https://example.com"),
    undefined,
  );

  // Create a test activity
  const activity = new Create({
@@ -120,23 +119,17 @@ test("MockContext tracks sent activities", async () => {
    activity,
  );

  // Check that the activity was recorded in the context
  const contextSentActivities = mockContext.getSentActivities();
  assertEquals(contextSentActivities.length, 1);
  assertEquals(contextSentActivities[0].activity, activity);

  // Check that it was also recorded in the federation
  // Check that the activity was recorded in the federation
  assertEquals(mockFederation.sentActivities.length, 1);
  assertEquals(mockFederation.sentActivities[0].activity, activity);
});

test("MockContext URI methods should work correctly", () => {
  const mockFederation = new MockFederation<void>();
  const mockContext = new MockContext({
    url: new URL("https://example.com"),
    data: undefined,
    federation: mockFederation,
  });
  const mockContext = mockFederation.createContext(
    new URL("https://example.com"),
    undefined,
  );

  // Test URI generation methods
  assertEquals(
+19 −43
Original line number Diff line number Diff line
@@ -511,41 +511,15 @@ export class MockFederation<TContextData> implements Federation<TContextData> {
    // deno-lint-ignore no-this-alias
    const mockFederation = this;

    // sendActivity implementation for mock contexts
    const sendActivity = (
      _sender: any,
      _recipients: any,
      activity: any,
      _options?: any,
    ): Promise<void> => {
      const queued = mockFederation.queueStarted;
      mockFederation.sentActivities.push({
        queued,
        queue: queued ? "outbox" : undefined,
        activity,
        sentOrder: ++mockFederation.sentCounter,
      });
      return Promise.resolve();
    };
    const url = baseUrlOrRequest instanceof Request
      ? new URL(baseUrlOrRequest.url)
      : baseUrlOrRequest;

    if (baseUrlOrRequest instanceof Request) {
      return createRequestContext({
        url: new URL(baseUrlOrRequest.url),
        request: baseUrlOrRequest,
    return new MockContext({
      url,
      data: contextData,
      federation: mockFederation as any,
        sendActivity: sendActivity as any,
    });
    } else {
      return {
        ...createContext({
          url: baseUrlOrRequest,
          data: contextData,
          federation: mockFederation as any,
        }),
        sendActivity: sendActivity as any,
      } as Context<TContextData>;
    }
  }

  // deno-lint-ignore require-await
@@ -653,18 +627,20 @@ interface InboxListener<TContextData, TActivity extends Activity> {
 * This class provides a way to test Fedify applications without needing
 * a real federation context.
 *
 * Note: This class is not exported from the public API. Use
 * {@link MockFederation.createContext} instead.
 *
 * @example
 * ```typescript
 * import { Person, Create } from "@fedify/fedify/vocab";
 * import { MockContext, MockFederation } from "@fedify/testing";
 * import { MockFederation } from "@fedify/testing";
 *
 * // Create a mock context
 * // Create a mock federation and context
 * const mockFederation = new MockFederation<{ userId: string }>();
 * const context = new MockContext({
 *   url: new URL("https://example.com"),
 *   data: { userId: "test-user" },
 *   federation: mockFederation
 * });
 * const context = mockFederation.createContext(
 *   new URL("https://example.com"),
 *   { userId: "test-user" }
 * );
 *
 * // Send an activity
 * const recipient = new Person({ id: new URL("https://example.com/users/bob") });
@@ -678,8 +654,8 @@ interface InboxListener<TContextData, TActivity extends Activity> {
 *   activity
 * );
 *
 * // Check sent activities
 * const sent = context.getSentActivities();
 * // Check sent activities from the federation
 * const sent = mockFederation.sentActivities;
 * console.log(sent[0].activity);
 * ```
 *