From 044dfdad6e9692c91e966bfd6ae35156d21eed7a Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal Date: Fri, 13 Feb 2026 02:13:06 +0530 Subject: [PATCH] chore: added workspace and project pages list endpoints --- src/api/Pages.ts | 21 ++++++++++++++++++++- src/models/Page.ts | 5 +++++ tests/e2e/project.test.ts | 25 ++++++++++++++++++++----- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/src/api/Pages.ts b/src/api/Pages.ts index 5c41487..5146c97 100644 --- a/src/api/Pages.ts +++ b/src/api/Pages.ts @@ -1,6 +1,7 @@ import { BaseResource } from "./BaseResource"; import { Configuration } from "../Configuration"; -import { Page, CreatePage } from "../models/Page"; +import { Page, CreatePage, ListPagesParams } from "../models/Page"; +import { PaginatedResponse } from "../models/common"; /** * Pages API resource @@ -56,4 +57,22 @@ export class Pages extends BaseResource { async retrieveProjectPage(workspaceSlug: string, projectId: string, pageId: string): Promise { return this.getProjectPage(workspaceSlug, projectId, pageId); } + + /** + * List workspace pages with optional filtering + */ + async listWorkspacePages(workspaceSlug: string, params?: ListPagesParams): Promise> { + return this.get>(`/workspaces/${workspaceSlug}/pages/`, params); + } + + /** + * List project pages with optional filtering + */ + async listProjectPages( + workspaceSlug: string, + projectId: string, + params?: ListPagesParams + ): Promise> { + return this.get>(`/workspaces/${workspaceSlug}/projects/${projectId}/pages/`, params); + } } diff --git a/src/models/Page.ts b/src/models/Page.ts index d0a7e41..f7385f9 100644 --- a/src/models/Page.ts +++ b/src/models/Page.ts @@ -18,3 +18,8 @@ export interface Page extends BaseModel { } export type CreatePage = Partial; + +export interface ListPagesParams { + limit?: number; + offset?: number; +} diff --git a/tests/e2e/project.test.ts b/tests/e2e/project.test.ts index b7d161b..00499cc 100644 --- a/tests/e2e/project.test.ts +++ b/tests/e2e/project.test.ts @@ -1,6 +1,6 @@ import { createTestClient, randomizeName, wait } from "../helpers/test-utils"; import { e2eConfig } from "./config"; -import { Project, Cycle, Module, WorkItem } from "../../src/models"; +import { Project, Cycle, Module, WorkItem, Page } from "../../src/models"; describe("End to End Project Test", () => { // Shared state across tests @@ -9,6 +9,7 @@ describe("End to End Project Test", () => { let project: Project; let cycle: Cycle; let module: Module; + let page: Page; let workItem1: WorkItem; let workItem2: WorkItem; let workItem3: WorkItem; @@ -31,6 +32,7 @@ describe("End to End Project Test", () => { await client.projects.updateFeatures(e2eConfig.workspaceSlug, project.id, { cycles: true, modules: true, + pages: true, }); }); @@ -72,6 +74,22 @@ describe("End to End Project Test", () => { expect(modules.results.find((m) => m.name === module.name)).toBeDefined(); }); + it("should create and list pages", async () => { + const pageName = randomizeName("Test Page"); + page = await client.pages.createProjectPage(e2eConfig.workspaceSlug, project.id, { + name: pageName, + description_html: "

Test Page Description

", + }); + + expect(page).toBeDefined(); + expect(page.id).toBeDefined(); + expect(page.name).toBe(pageName); + + const pages = await client.pages.listProjectPages(e2eConfig.workspaceSlug, project.id); + expect(pages.results.length).toBeGreaterThan(0); + expect(pages.results.find((p) => p.name === page.name)).toBeDefined(); + }); + it("should create work items with assignees", async () => { workItem1 = await client.workItems.create(e2eConfig.workspaceSlug, project.id, { name: randomizeName("Test Work Item 1"), @@ -126,10 +144,7 @@ describe("End to End Project Test", () => { and: [ ...(stateId ? [{ state_id: stateId }] : []), { - or: [ - { priority: "none" }, - { priority: "high" }, - ], + or: [{ priority: "none" }, { priority: "high" }], }, ], },