Skip to main content
Glama

mcp-google-sheets

flow.test.ts12.9 kB
import { DefaultProjectRole, FlowOperationType, FlowStatus, PlatformRole, PrincipalType, ProjectRole, } from '@activepieces/shared' import { FastifyInstance } from 'fastify' import { StatusCodes } from 'http-status-codes' import { initializeDatabase } from '../../../../src/app/database' import { databaseConnection } from '../../../../src/app/database/database-connection' import { setupServer } from '../../../../src/app/server' import { generateMockToken } from '../../../helpers/auth' import { createMockFlow, createMockFlowVersion, createMockProjectMember, mockAndSaveBasicSetup, mockBasicUser, } from '../../../helpers/mocks' let app: FastifyInstance | null = null beforeAll(async () => { await initializeDatabase({ runMigrations: false }) app = await setupServer() }) afterAll(async () => { await databaseConnection().destroy() await app?.close() }) describe('Flow API', () => { describe('Create Flow endpoint', () => { it.each([ DefaultProjectRole.ADMIN, DefaultProjectRole.EDITOR, ])('Succeeds if user role is %s', async (testRole) => { // arrange const { mockPlatform, mockProject } = await mockAndSaveBasicSetup() const { mockUser } = await mockBasicUser({ user: { platformId: mockPlatform.id, platformRole: PlatformRole.MEMBER, }, }) const projectRole = await databaseConnection().getRepository('project_role').findOneByOrFail({ name: testRole }) as ProjectRole const mockProjectMember = createMockProjectMember({ userId: mockUser.id, platformId: mockPlatform.id, projectId: mockProject.id, projectRoleId: projectRole.id, }) await databaseConnection().getRepository('project_member').save([mockProjectMember]) const mockToken = await generateMockToken({ id: mockUser.id, type: PrincipalType.USER, projectId: mockProject.id, platform: { id: mockPlatform.id, }, }) const mockCreateFlowRequest = { displayName: 'test flow', projectId: mockProject.id, } // act const response = await app?.inject({ method: 'POST', url: '/v1/flows', headers: { authorization: `Bearer ${mockToken}`, }, body: mockCreateFlowRequest, }) // assert expect(response?.statusCode).toBe(StatusCodes.CREATED) }) it.each([ DefaultProjectRole.VIEWER, DefaultProjectRole.OPERATOR, ])('Fails if user role is %s', async (testRole) => { // arrange const { mockPlatform, mockProject } = await mockAndSaveBasicSetup() const { mockUser } = await mockBasicUser({ user: { platformId: mockPlatform.id, platformRole: PlatformRole.MEMBER, }, }) const projectRole = await databaseConnection().getRepository('project_role').findOneByOrFail({ name: testRole }) as ProjectRole const mockProjectMember = createMockProjectMember({ userId: mockUser.id, platformId: mockPlatform.id, projectId: mockProject.id, projectRoleId: projectRole.id, }) await databaseConnection().getRepository('project_member').save([mockProjectMember]) const mockToken = await generateMockToken({ id: mockUser.id, type: PrincipalType.USER, projectId: mockProject.id, platform: { id: mockPlatform.id, }, }) const mockCreateFlowRequest = { displayName: 'test flow', projectId: mockProject.id, } // act const response = await app?.inject({ method: 'POST', url: '/v1/flows', headers: { authorization: `Bearer ${mockToken}`, }, body: mockCreateFlowRequest, }) // assert expect(response?.statusCode).toBe(StatusCodes.FORBIDDEN) const responseBody = response?.json() expect(responseBody?.code).toBe('PERMISSION_DENIED') expect(responseBody?.params?.userId).toBe(mockUser.id) expect(responseBody?.params?.projectId).toBe(mockProject.id) }) }) describe('Update flow endpoint', () => { it.each([ { role: DefaultProjectRole.ADMIN, request: { type: FlowOperationType.CHANGE_STATUS, request: { status: 'ENABLED', }, }, }, { role: DefaultProjectRole.EDITOR, request: { type: FlowOperationType.CHANGE_STATUS, request: { status: 'ENABLED', }, }, }, { role: DefaultProjectRole.OPERATOR, request: { type: FlowOperationType.CHANGE_STATUS, request: { status: 'ENABLED', }, }, }, ])('Succeeds if user role is %s', async ({ role, request }) => { // arrange const { mockPlatform, mockProject } = await mockAndSaveBasicSetup() const { mockUser } = await mockBasicUser({ user: { platformId: mockPlatform.id, platformRole: PlatformRole.MEMBER, }, }) const projectRole = await databaseConnection().getRepository('project_role').findOneByOrFail({ name: role }) as ProjectRole const mockProjectMember = createMockProjectMember({ userId: mockUser.id, platformId: mockPlatform.id, projectId: mockProject.id, projectRoleId: projectRole.id, }) await databaseConnection().getRepository('project_member').save([mockProjectMember]) const mockFlow = createMockFlow({ projectId: mockProject.id, status: FlowStatus.DISABLED, }) await databaseConnection().getRepository('flow').save([mockFlow]) const mockFlowVersion = createMockFlowVersion({ flowId: mockFlow.id, updatedBy: mockUser.id, }) await databaseConnection() .getRepository('flow_version') .save([mockFlowVersion]) await databaseConnection().getRepository('flow').update(mockFlow.id, { publishedVersionId: mockFlowVersion.id, }) const mockToken = await generateMockToken({ id: mockUser.id, type: PrincipalType.USER, projectId: mockProject.id, platform: { id: mockPlatform.id, }, }) // act const response = await app?.inject({ method: 'POST', url: `/v1/flows/${mockFlow.id}`, headers: { authorization: `Bearer ${mockToken}`, }, body: request, }) // assert expect(response?.statusCode).toBe(StatusCodes.OK) }) it.each([ { role: DefaultProjectRole.VIEWER, request: { type: FlowOperationType.CHANGE_STATUS, request: { status: 'ENABLED', }, }, }, { role: DefaultProjectRole.OPERATOR, request: { type: FlowOperationType.CHANGE_NAME, request: { displayName: 'hello', }, }, }, ])('Fails if user role is %s', async ({ role, request }) => { // arrange const { mockPlatform, mockProject } = await mockAndSaveBasicSetup() const { mockUser } = await mockBasicUser({ user: { platformId: mockPlatform.id, platformRole: PlatformRole.MEMBER, }, }) const projectRole = await databaseConnection().getRepository('project_role').findOneByOrFail({ name: role }) as ProjectRole const mockProjectMember = createMockProjectMember({ userId: mockUser.id, platformId: mockPlatform.id, projectId: mockProject.id, projectRoleId: projectRole.id, }) await databaseConnection().getRepository('project_member').save([mockProjectMember]) const mockFlow = createMockFlow({ projectId: mockProject.id, status: FlowStatus.DISABLED, }) await databaseConnection().getRepository('flow').save([mockFlow]) const mockFlowVersion = createMockFlowVersion({ flowId: mockFlow.id, updatedBy: mockUser.id, }) await databaseConnection() .getRepository('flow_version') .save([mockFlowVersion]) await databaseConnection().getRepository('flow').update(mockFlow.id, { publishedVersionId: mockFlowVersion.id, }) const mockToken = await generateMockToken({ id: mockUser.id, type: PrincipalType.USER, projectId: mockProject.id, platform: { id: mockPlatform.id, }, }) // act const response = await app?.inject({ method: 'POST', url: `/v1/flows/${mockFlow.id}`, headers: { authorization: `Bearer ${mockToken}`, }, body: request, }) // assert expect(response?.statusCode).toBe(StatusCodes.FORBIDDEN) const responseBody = response?.json() expect(responseBody?.code).toBe('PERMISSION_DENIED') expect(responseBody?.params?.userId).toBe(mockUser.id) expect(responseBody?.params?.projectId).toBe(mockProject.id) }) }) describe('List Flows endpoint', () => { it.each([ DefaultProjectRole.ADMIN, DefaultProjectRole.EDITOR, DefaultProjectRole.OPERATOR, DefaultProjectRole.VIEWER, ])('Succeeds if user role is %s', async (testRole) => { // arrange const { mockPlatform, mockProject } = await mockAndSaveBasicSetup() const { mockUser } = await mockBasicUser({ user: { platformId: mockPlatform.id, platformRole: PlatformRole.MEMBER, }, }) const projectRole = await databaseConnection().getRepository('project_role').findOneByOrFail({ name: testRole }) as ProjectRole const mockProjectMember = createMockProjectMember({ userId: mockUser.id, platformId: mockPlatform.id, projectId: mockProject.id, projectRoleId: projectRole.id, }) await databaseConnection().getRepository('project_member').save([mockProjectMember]) const mockToken = await generateMockToken({ id: mockUser.id, type: PrincipalType.USER, projectId: mockProject.id, platform: { id: mockPlatform.id, }, }) // act const response = await app?.inject({ method: 'GET', url: '/v1/flows', query: { projectId: mockProject.id, status: 'ENABLED', }, headers: { authorization: `Bearer ${mockToken}`, }, }) // assert expect(response?.statusCode).toBe(StatusCodes.OK) }) }) })

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/activepieces/activepieces'

If you have feedback or need assistance with the MCP directory API, please join our Discord server