UNPKG

@rivetkit/core

Version:

153 lines (123 loc) 5.4 kB
import { describe, expect, test } from "vitest"; import type { DriverTestConfig } from "../mod"; import { setupDriverTest } from "../utils"; export function runActorInlineClientTests(driverTestConfig: DriverTestConfig) { describe("Actor Inline Client Tests", () => { describe("Stateless Client Calls", () => { test("should make stateless calls to other actors", async (c) => { const { client } = await setupDriverTest(c, driverTestConfig); // Create the inline client actor const inlineClientHandle = client.inlineClientActor.getOrCreate([ "inline-client-test", ]); // Test calling counter.increment via inline client const result = await inlineClientHandle.callCounterIncrement(5); expect(result).toBe(5); // Verify the counter state was actually updated const counterState = await inlineClientHandle.getCounterState(); expect(counterState).toBe(5); // Check that messages were logged const messages = await inlineClientHandle.getMessages(); expect(messages).toHaveLength(2); expect(messages[0]).toContain("Called counter.increment(5), result: 5"); expect(messages[1]).toContain("Got counter state: 5"); }); test("should handle multiple stateless calls", async (c) => { const { client } = await setupDriverTest(c, driverTestConfig); // Create the inline client actor const inlineClientHandle = client.inlineClientActor.getOrCreate([ "inline-client-multi", ]); // Clear any existing messages await inlineClientHandle.clearMessages(); // Make multiple calls const result1 = await inlineClientHandle.callCounterIncrement(3); const result2 = await inlineClientHandle.callCounterIncrement(7); const finalState = await inlineClientHandle.getCounterState(); expect(result1).toBe(3); expect(result2).toBe(10); // 3 + 7 expect(finalState).toBe(10); // Check messages const messages = await inlineClientHandle.getMessages(); expect(messages).toHaveLength(3); expect(messages[0]).toContain("Called counter.increment(3), result: 3"); expect(messages[1]).toContain( "Called counter.increment(7), result: 10", ); expect(messages[2]).toContain("Got counter state: 10"); }); }); describe("Stateful Client Calls", () => { test("should connect to other actors and receive events", async (c) => { const { client } = await setupDriverTest(c, driverTestConfig); // Create the inline client actor const inlineClientHandle = client.inlineClientActor.getOrCreate([ "inline-client-stateful", ]); // Clear any existing messages await inlineClientHandle.clearMessages(); // Test stateful connection with events const result = await inlineClientHandle.connectToCounterAndIncrement(4); expect(result.result1).toBe(4); expect(result.result2).toBe(12); // 4 + 8 expect(result.events).toEqual([4, 12]); // Should have received both events // Check that message was logged const messages = await inlineClientHandle.getMessages(); expect(messages).toHaveLength(1); expect(messages[0]).toContain( "Connected to counter, incremented by 4 and 8", ); expect(messages[0]).toContain("results: 4, 12"); expect(messages[0]).toContain("events: [4,12]"); }); test("should handle stateful connection independently", async (c) => { const { client } = await setupDriverTest(c, driverTestConfig); // Create the inline client actor const inlineClientHandle = client.inlineClientActor.getOrCreate([ "inline-client-independent", ]); // Clear any existing messages await inlineClientHandle.clearMessages(); // Test with different increment values const result = await inlineClientHandle.connectToCounterAndIncrement(2); expect(result.result1).toBe(2); expect(result.result2).toBe(6); // 2 + 4 expect(result.events).toEqual([2, 6]); // Verify the state is independent from previous tests const messages = await inlineClientHandle.getMessages(); expect(messages).toHaveLength(1); expect(messages[0]).toContain( "Connected to counter, incremented by 2 and 4", ); }); }); describe("Mixed Client Usage", () => { test("should handle both stateless and stateful calls", async (c) => { const { client } = await setupDriverTest(c, driverTestConfig); // Create the inline client actor const inlineClientHandle = client.inlineClientActor.getOrCreate([ "inline-client-mixed", ]); // Clear any existing messages await inlineClientHandle.clearMessages(); // Start with stateless calls await inlineClientHandle.callCounterIncrement(1); const statelessResult = await inlineClientHandle.getCounterState(); expect(statelessResult).toBe(1); // Then do stateful call const statefulResult = await inlineClientHandle.connectToCounterAndIncrement(3); expect(statefulResult.result1).toBe(3); expect(statefulResult.result2).toBe(9); // 3 + 6 // Check all messages were logged const messages = await inlineClientHandle.getMessages(); expect(messages).toHaveLength(3); expect(messages[0]).toContain("Called counter.increment(1), result: 1"); expect(messages[1]).toContain("Got counter state: 1"); expect(messages[2]).toContain( "Connected to counter, incremented by 3 and 6", ); }); }); }); }