From 9271802162105322ce2b9c1019c2f519e56ff62d Mon Sep 17 00:00:00 2001 From: Po Chun Chiu <57251712+EiffelFly@users.noreply.github.com> Date: Fri, 26 Jul 2024 16:03:13 +0800 Subject: [PATCH] chore(integration-test): add get/list membership integration-test (#1324) Because - add get/list membership integration-test This commit - add get/list membership integration-test --- .../core/membership/MembershipClient.test.ts | 76 +++++++++++++++++++ .../src/core/membership/MembershipClient.ts | 4 +- packages/sdk/src/core/membership/types.ts | 26 +++---- packages/sdk/src/main/index.ts | 13 +++- 4 files changed, 96 insertions(+), 23 deletions(-) create mode 100644 packages/sdk/src/core/membership/MembershipClient.test.ts diff --git a/packages/sdk/src/core/membership/MembershipClient.test.ts b/packages/sdk/src/core/membership/MembershipClient.test.ts new file mode 100644 index 0000000000..b2964c6bce --- /dev/null +++ b/packages/sdk/src/core/membership/MembershipClient.test.ts @@ -0,0 +1,76 @@ +import { expect, test } from "vitest"; + +import { InstillAPIClient } from "../../main"; +import { + getUserMembershipResponseValidator, + listOrganizationMembershipsResponseValidator, + listUserMembershipsResponseValidator, +} from "./types"; + +test("listUserMemberships", async () => { + const client = new InstillAPIClient({ + baseURL: `http://localhost:8080/${process.env.INSTILL_API_VERSION}`, + apiToken: "test", + debug: true, + }); + + const memberships = await client.core.membership.listUserMemberships({ + userName: "users/uid", + }); + + const parsedData = + listUserMembershipsResponseValidator.safeParse(memberships); + + expect(parsedData.success).toBe(true); +}); + +test("getUserMembership", async () => { + const client = new InstillAPIClient({ + baseURL: `http://localhost:8080/${process.env.INSTILL_API_VERSION}`, + apiToken: "test", + debug: true, + }); + + const membership = await client.core.membership.getUserMembership({ + userMembershipName: "users/uid/memberships/mid", + view: "FULL", + }); + + const parsedData = getUserMembershipResponseValidator.safeParse(membership); + + expect(parsedData.success).toBe(true); +}); + +test("listOrganizationMemberships", async () => { + const client = new InstillAPIClient({ + baseURL: `http://localhost:8080/${process.env.INSTILL_API_VERSION}`, + apiToken: "test", + debug: true, + }); + + const memberships = await client.core.membership.listOrganizationMemberships({ + organizationName: "organizations/oid", + }); + + const parsedData = + listOrganizationMembershipsResponseValidator.safeParse(memberships); + + expect(parsedData.success).toBe(true); +}); + +test("getOrganizationMembership", async () => { + const client = new InstillAPIClient({ + baseURL: `http://localhost:8080/${process.env.INSTILL_API_VERSION}`, + apiToken: "test", + debug: true, + }); + + const membership = await client.core.membership.getOrganizationMembership({ + organizationMembershipName: "organizations/oid/memberships/mid", + view: "FULL", + }); + + const parsedData = getUserMembershipResponseValidator.safeParse(membership); + + expect(parsedData.success).toBe(true); +}); diff --git a/packages/sdk/src/core/membership/MembershipClient.ts b/packages/sdk/src/core/membership/MembershipClient.ts index dd093a52ec..344be69948 100644 --- a/packages/sdk/src/core/membership/MembershipClient.ts +++ b/packages/sdk/src/core/membership/MembershipClient.ts @@ -24,7 +24,7 @@ export class MembershipClient extends APIResource { async listUserMemberships({ userName }: ListUserMembershipsRequest) { try { const data = await this._client.get( - `/${userName}`, + `/${userName}/memberships`, ); return Promise.resolve(data.memberships); @@ -57,7 +57,7 @@ export class MembershipClient extends APIResource { }: ListOrganizationMembershipsRequest) { try { const data = await this._client.get( - `/${organizationName}`, + `/${organizationName}/memberships`, ); return Promise.resolve(data.memberships); diff --git a/packages/sdk/src/core/membership/types.ts b/packages/sdk/src/core/membership/types.ts index ceeb524fc4..8338ffecd1 100644 --- a/packages/sdk/src/core/membership/types.ts +++ b/packages/sdk/src/core/membership/types.ts @@ -6,13 +6,6 @@ import { User, UserSchema } from "../user/types"; export type MembershipRole = "admin" | "member" | "pending_member" | "owner"; -export const MembershipRoleSchema = z.enum([ - "admin", - "member", - "pending_member", - "owner", -]); - export type MembershipState = | "MEMBERSHIP_STATE_ACTIVE" | "MEMBERSHIP_STATE_PENDING"; @@ -34,7 +27,7 @@ export const UserMembershipSchema = z.object({ user: UserSchema, organization: OrganizationSchema, name: z.string().nullable(), - role: MembershipRoleSchema, + role: z.string(), state: MembershipStateSchema, }); @@ -50,7 +43,7 @@ export const OrganizationMembershipSchema = z.object({ user: UserSchema, organization: OrganizationSchema, name: z.string().nullable(), - role: MembershipRoleSchema, + role: z.string(), state: MembershipStateSchema, }); @@ -62,9 +55,8 @@ export type ListUserMembershipsResponse = { memberships: UserMembership[]; }; -export const ListUserMembershipsResponseValidator = z.object({ - memberships: z.array(UserMembershipSchema), -}); +export const listUserMembershipsResponseValidator = + z.array(UserMembershipSchema); export type GetUserMembershipRequest = { userMembershipName: string; @@ -75,7 +67,7 @@ export type GetUserMembershipResponse = { membership: UserMembership; }; -export const GetUserMembershipResponseValidator = UserMembershipSchema; +export const getUserMembershipResponseValidator = UserMembershipSchema; export type ListOrganizationMembershipsRequest = { organizationName: string; @@ -85,9 +77,9 @@ export type ListOrganizationMembershipsResponse = { memberships: OrganizationMembership[]; }; -export const ListOrganizationMembershipsResponseValidator = z.object({ - memberships: z.array(OrganizationMembershipSchema), -}); +export const listOrganizationMembershipsResponseValidator = z.array( + OrganizationMembershipSchema, +); export type GetOrganizationMembershipRequest = { organizationMembershipName: string; @@ -98,7 +90,7 @@ export type GetOrganizationMembershipResponse = { membership: OrganizationMembership; }; -export const GetOrganizationMembershipResponseValidator = +export const getOrganizationMembershipResponseValidator = OrganizationMembershipSchema; export type DeleteUserMembershipRequest = { diff --git a/packages/sdk/src/main/index.ts b/packages/sdk/src/main/index.ts index e733f81478..54e71ece77 100644 --- a/packages/sdk/src/main/index.ts +++ b/packages/sdk/src/main/index.ts @@ -2,6 +2,7 @@ import "whatwg-fetch"; import { CreditClient, + MembershipClient, MetricClient, OrganizationClient, SubscriptionClient, @@ -11,10 +12,13 @@ import { } from "../core"; import { ModelClient } from "../model"; import { GeneralRecord, HttpMethod } from "../types"; -import { ComponentClient, PipelineClient } from "../vdp"; -import { ReleaseClient } from "../vdp/release"; -import { SecretClient } from "../vdp/secret"; -import { TriggerClient } from "../vdp/trigger"; +import { + ComponentClient, + PipelineClient, + ReleaseClient, + SecretClient, + TriggerClient, +} from "../vdp"; export type RequestOption = { body?: string; @@ -115,6 +119,7 @@ export class InstillAPIClient { subscription: new SubscriptionClient(this), credit: new CreditClient(this), utils: new UtilsClient(this), + membership: new MembershipClient(this), }; model = new ModelClient(this);