Spaces:
Sleeping
Sleeping
| /** | |
| * Tests for REST API functionality - equivalent to Python's test_rest_api.py | |
| */ | |
| import { test, expect, describe, beforeEach, afterEach } from "bun:test"; | |
| import { robotics } from "../src/index"; | |
| import { TEST_SERVER_URL, TestRoomManager } from "./setup"; | |
| const { RoboticsProducer } = robotics; | |
| describe("REST API", () => { | |
| let producer: robotics.RoboticsProducer; | |
| let roomManager: TestRoomManager; | |
| beforeEach(() => { | |
| producer = new RoboticsProducer(TEST_SERVER_URL); | |
| roomManager = new TestRoomManager(); | |
| }); | |
| afterEach(async () => { | |
| if (producer.isConnected()) { | |
| await producer.disconnect(); | |
| } | |
| await roomManager.cleanup(producer); | |
| }); | |
| test("list rooms empty", async () => { | |
| // Use a temporary workspace ID | |
| const workspaceId = `test-workspace-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; | |
| const rooms = await producer.listRooms(workspaceId); | |
| expect(Array.isArray(rooms)).toBe(true); | |
| }); | |
| test("create room", async () => { | |
| const { workspaceId, roomId } = await producer.createRoom(); | |
| roomManager.addRoom(workspaceId, roomId); | |
| expect(typeof workspaceId).toBe("string"); | |
| expect(typeof roomId).toBe("string"); | |
| expect(workspaceId.length).toBeGreaterThan(0); | |
| expect(roomId.length).toBeGreaterThan(0); | |
| }); | |
| test("create room with id", async () => { | |
| const customRoomId = "test-room-123"; | |
| const customWorkspaceId = "test-workspace-456"; | |
| const { workspaceId, roomId } = await producer.createRoom(customWorkspaceId, customRoomId); | |
| roomManager.addRoom(workspaceId, roomId); | |
| expect(workspaceId).toBe(customWorkspaceId); | |
| expect(roomId).toBe(customRoomId); | |
| }); | |
| test("list rooms with rooms", async () => { | |
| // Create a test room | |
| const { workspaceId, roomId } = await producer.createRoom(); | |
| roomManager.addRoom(workspaceId, roomId); | |
| const rooms = await producer.listRooms(workspaceId); | |
| expect(Array.isArray(rooms)).toBe(true); | |
| expect(rooms.length).toBeGreaterThanOrEqual(1); | |
| // Check if our room is in the list | |
| const roomIds = rooms.map(room => room.id); | |
| expect(roomIds).toContain(roomId); | |
| // Verify room structure | |
| const testRoom = rooms.find(room => room.id === roomId); | |
| expect(testRoom).toBeDefined(); | |
| expect(testRoom!).toHaveProperty("participants"); | |
| expect(testRoom!).toHaveProperty("joints_count"); | |
| }); | |
| test("get room info", async () => { | |
| const { workspaceId, roomId } = await producer.createRoom(); | |
| roomManager.addRoom(workspaceId, roomId); | |
| const roomInfo = await producer.getRoomInfo(workspaceId, roomId); | |
| expect(typeof roomInfo).toBe("object"); | |
| expect(roomInfo.id).toBe(roomId); | |
| expect(roomInfo.workspace_id).toBe(workspaceId); | |
| expect(roomInfo).toHaveProperty("participants"); | |
| expect(roomInfo).toHaveProperty("joints_count"); | |
| expect(roomInfo).toHaveProperty("has_producer"); | |
| expect(roomInfo).toHaveProperty("active_consumers"); | |
| }); | |
| test("get room state", async () => { | |
| const { workspaceId, roomId } = await producer.createRoom(); | |
| roomManager.addRoom(workspaceId, roomId); | |
| const roomState = await producer.getRoomState(workspaceId, roomId); | |
| expect(typeof roomState).toBe("object"); | |
| expect(roomState).toHaveProperty("room_id"); | |
| expect(roomState).toHaveProperty("workspace_id"); | |
| expect(roomState).toHaveProperty("joints"); | |
| expect(roomState).toHaveProperty("participants"); | |
| expect(roomState).toHaveProperty("timestamp"); | |
| expect(roomState.room_id).toBe(roomId); | |
| expect(roomState.workspace_id).toBe(workspaceId); | |
| }); | |
| test("delete room", async () => { | |
| const { workspaceId, roomId } = await producer.createRoom(); | |
| // Verify room exists | |
| const roomsBefore = await producer.listRooms(workspaceId); | |
| const roomIdsBefore = roomsBefore.map(room => room.id); | |
| expect(roomIdsBefore).toContain(roomId); | |
| // Delete room | |
| const success = await producer.deleteRoom(workspaceId, roomId); | |
| expect(success).toBe(true); | |
| // Verify room is deleted | |
| const roomsAfter = await producer.listRooms(workspaceId); | |
| const roomIdsAfter = roomsAfter.map(room => room.id); | |
| expect(roomIdsAfter).not.toContain(roomId); | |
| }); | |
| test("delete nonexistent room", async () => { | |
| const workspaceId = `test-workspace-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; | |
| const fakeRoomId = "nonexistent-room-id"; | |
| const success = await producer.deleteRoom(workspaceId, fakeRoomId); | |
| expect(success).toBe(false); | |
| }); | |
| test("get room info nonexistent", async () => { | |
| const workspaceId = `test-workspace-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; | |
| const fakeRoomId = "nonexistent-room-id"; | |
| // This should raise an exception or return error info | |
| try { | |
| await producer.getRoomInfo(workspaceId, fakeRoomId); | |
| // If no exception, this is unexpected for nonexistent room | |
| expect(true).toBe(false); // Force test failure | |
| } catch (error) { | |
| // Expected behavior for nonexistent room | |
| expect(error).toBeDefined(); | |
| } | |
| }); | |
| test("get room state nonexistent", async () => { | |
| const workspaceId = `test-workspace-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; | |
| const fakeRoomId = "nonexistent-room-id"; | |
| // This should raise an exception or return error info | |
| try { | |
| await producer.getRoomState(workspaceId, fakeRoomId); | |
| // If no exception, this is unexpected for nonexistent room | |
| expect(true).toBe(false); // Force test failure | |
| } catch (error) { | |
| // Expected behavior for nonexistent room | |
| expect(error).toBeDefined(); | |
| } | |
| }); | |
| }); |