From ca46ae6263bb6be471a758b20190dc5773fb74fa Mon Sep 17 00:00:00 2001 From: Alessandro Magionami Date: Fri, 20 Dec 2024 09:54:42 +0100 Subject: [PATCH] chote(core): fix tests --- .../tests/integration/objects.graph.spec.ts | 112 +++++++------- .../tests/integration/objects.rest.spec.ts | 141 +++++++++--------- 2 files changed, 132 insertions(+), 121 deletions(-) diff --git a/packages/server/modules/core/tests/integration/objects.graph.spec.ts b/packages/server/modules/core/tests/integration/objects.graph.spec.ts index c05e0d043..c6140c510 100644 --- a/packages/server/modules/core/tests/integration/objects.graph.spec.ts +++ b/packages/server/modules/core/tests/integration/objects.graph.spec.ts @@ -37,6 +37,7 @@ import { createUserFactory } from '@/modules/core/services/users/management' import { UsersEmitter } from '@/modules/core/events/usersEmitter' import { getServerInfoFactory } from '@/modules/core/repositories/server' import { WorkspaceReadOnlyError } from '@/modules/gatekeeper/errors/billing' +import { getFeatureFlags } from '@/modules/shared/helpers/envHelper' const getServerInfo = getServerInfoFactory({ db }) const getUser = legacyGetUserFactory({ db }) @@ -71,70 +72,75 @@ const createUser = createUserFactory({ usersEventsEmitter: UsersEmitter.emit }) +const { FF_BILLING_INTEGRATION_ENABLED } = getFeatureFlags() + describe('Objects graphql @core', () => { before(async () => { await beforeEachContext() }) describe('objectCreate mutation', () => { - it('should return error if project is read-only', async () => { - const userId = await createUser({ - name: 'emails user', - email: createRandomEmail(), - password: createRandomPassword() - }) + ;(FF_BILLING_INTEGRATION_ENABLED ? it : it.skip)( + 'should return error if project is read-only', + async () => { + const userId = await createUser({ + name: 'emails user', + email: createRandomEmail(), + password: createRandomPassword() + }) - const apollo = await testApolloServer({ authUserId: userId }) + const apollo = await testApolloServer({ authUserId: userId }) - const workspaceCreateRes = await apollo.execute(CreateWorkspaceDocument, { - input: { name: 'test ws' } - }) - expect(workspaceCreateRes).to.not.haveGraphQLErrors() + const workspaceCreateRes = await apollo.execute(CreateWorkspaceDocument, { + input: { name: 'test ws' } + }) + expect(workspaceCreateRes).to.not.haveGraphQLErrors() - const workspace = workspaceCreateRes.data?.workspaceMutations.create + const workspace = workspaceCreateRes.data?.workspaceMutations.create - const projectCreateRes = await apollo.execute(CreateWorkspaceProjectDocument, { - input: { workspaceId: workspace!.id, name: 'test project' } - }) - expect(projectCreateRes).to.not.haveGraphQLErrors() - const project = projectCreateRes.data?.workspaceMutations.projects.create + const projectCreateRes = await apollo.execute(CreateWorkspaceProjectDocument, { + input: { workspaceId: workspace!.id, name: 'test project' } + }) + expect(projectCreateRes).to.not.haveGraphQLErrors() + const project = projectCreateRes.data?.workspaceMutations.projects.create - // Make the project read-only - await db('workspace_plans') - .update({ status: 'expired' }) - .where({ workspaceId: workspace!.id }) + // Make the project read-only + await db('workspace_plans') + .update({ status: 'expired' }) + .where({ workspaceId: workspace!.id }) - const objectCreateRes = await apollo.execute(CreateObjectDocument, { - input: { - streamId: project!.id, - objects: [ - { - id: 'e5262a6fb51540974e6d07ac60b7fe5c', - name: 'Rhino Model', - elements: [ - { - referencedId: '581a822cdaa5c2972783510d57617f73', - /* eslint-disable camelcase */ - speckle_type: 'reference' - } - ], - __closure: { - '0086c072ee1fd70ac0a68c067a37e0eb': 3 - }, - speckleType: 'Speckle.Core.Models.Collection', - speckle_type: 'Speckle.Core.Models.Collection', - applicationId: null, - collectionType: 'rhino model', - totalChildrenCount: 610 - } - ] - } - }) - expect(objectCreateRes).to.haveGraphQLErrors() - expect(objectCreateRes.errors).to.have.length(1) - expect(objectCreateRes.errors![0].message).to.eq( - new WorkspaceReadOnlyError().message - ) - }) + const objectCreateRes = await apollo.execute(CreateObjectDocument, { + input: { + streamId: project!.id, + objects: [ + { + id: 'e5262a6fb51540974e6d07ac60b7fe5c', + name: 'Rhino Model', + elements: [ + { + referencedId: '581a822cdaa5c2972783510d57617f73', + /* eslint-disable camelcase */ + speckle_type: 'reference' + } + ], + __closure: { + '0086c072ee1fd70ac0a68c067a37e0eb': 3 + }, + speckleType: 'Speckle.Core.Models.Collection', + speckle_type: 'Speckle.Core.Models.Collection', + applicationId: null, + collectionType: 'rhino model', + totalChildrenCount: 610 + } + ] + } + }) + expect(objectCreateRes).to.haveGraphQLErrors() + expect(objectCreateRes.errors).to.have.length(1) + expect(objectCreateRes.errors![0].message).to.eq( + new WorkspaceReadOnlyError().message + ) + } + ) }) }) diff --git a/packages/server/modules/core/tests/integration/objects.rest.spec.ts b/packages/server/modules/core/tests/integration/objects.rest.spec.ts index 2e07d5b43..cf1eea38f 100644 --- a/packages/server/modules/core/tests/integration/objects.rest.spec.ts +++ b/packages/server/modules/core/tests/integration/objects.rest.spec.ts @@ -41,6 +41,7 @@ import { } from '@/modules/core/repositories/tokens' import { Scopes } from '@speckle/shared' import { expect } from 'chai' +import { getFeatureFlags } from '@/modules/shared/helpers/envHelper' const getServerInfo = getServerInfoFactory({ db }) const getUser = legacyGetUserFactory({ db }) @@ -84,82 +85,86 @@ const createPersonalAccessToken = createPersonalAccessTokenFactory({ storePersonalApiToken: storePersonalApiTokenFactory({ db }) }) +const { FF_BILLING_INTEGRATION_ENABLED } = getFeatureFlags() + describe('Objects REST @core', () => { let app: Express before(async () => { ;({ app } = await beforeEachContext()) }) + ;(FF_BILLING_INTEGRATION_ENABLED ? it : it.skip)( + 'should return an error if the project is read-only', + async () => { + const userId = await createUser({ + name: 'emails user', + email: createRandomEmail(), + password: createRandomPassword() + }) + const user = await getUser(userId) + const workspace = { + name: 'Test Workspace #1', + ownerId: userId, + id: '', + slug: '' + } + await createTestWorkspace(workspace, user, { + addPlan: { name: 'business', status: 'expired' } + }) - it('should return an error if the project is read-only', async () => { - const userId = await createUser({ - name: 'emails user', - email: createRandomEmail(), - password: createRandomPassword() - }) - const user = await getUser(userId) - const workspace = { - name: 'Test Workspace #1', - ownerId: userId, - id: '', - slug: '' - } - await createTestWorkspace(workspace, user, { - addPlan: { name: 'business', status: 'expired' } - }) + const project = { + id: '', + name: 'test project', + ownerId: userId, + workspaceId: workspace.id + } + await createTestStream(project as unknown as BasicTestStream, user) - const project = { - id: '', - name: 'test project', - ownerId: userId, - workspaceId: workspace.id - } - await createTestStream(project as unknown as BasicTestStream, user) + const token = `Bearer ${await createPersonalAccessToken( + user.id, + 'test token user A', + [ + Scopes.Streams.Read, + Scopes.Streams.Write, + Scopes.Users.Read, + Scopes.Users.Email, + Scopes.Tokens.Write, + Scopes.Tokens.Read, + Scopes.Profile.Read, + Scopes.Profile.Email + ] + )}` - const token = `Bearer ${await createPersonalAccessToken( - user.id, - 'test token user A', - [ - Scopes.Streams.Read, - Scopes.Streams.Write, - Scopes.Users.Read, - Scopes.Users.Email, - Scopes.Tokens.Write, - Scopes.Tokens.Read, - Scopes.Profile.Read, - Scopes.Profile.Email - ] - )}` - - const res = await request(app) - .post(`/objects/${project.id}`) - .set('Authorization', token) - .set('Content-type', 'multipart/form-data') - .attach( - 'batch1', - Buffer.from( - JSON.stringify({ - id: 'e5262a6fb51540974e6d07ac60b7fe5c', - name: 'Rhino Model', - elements: [ - { - referencedId: '581a822cdaa5c2972783510d57617f73', - /* eslint-disable camelcase */ - speckle_type: 'reference' - } - ], - __closure: { - '0086c072ee1fd70ac0a68c067a37e0eb': 3 - }, - speckleType: 'Speckle.Core.Models.Collection', - speckle_type: 'Speckle.Core.Models.Collection', - applicationId: null, - collectionType: 'rhino model', - totalChildrenCount: 610 - }), - 'utf8' + const res = await request(app) + .post(`/objects/${project.id}`) + .set('Authorization', token) + .set('Content-type', 'multipart/form-data') + .attach( + 'batch1', + Buffer.from( + JSON.stringify({ + id: 'e5262a6fb51540974e6d07ac60b7fe5c', + name: 'Rhino Model', + elements: [ + { + referencedId: '581a822cdaa5c2972783510d57617f73', + /* eslint-disable camelcase */ + speckle_type: 'reference' + } + ], + __closure: { + '0086c072ee1fd70ac0a68c067a37e0eb': 3 + }, + speckleType: 'Speckle.Core.Models.Collection', + speckle_type: 'Speckle.Core.Models.Collection', + applicationId: null, + collectionType: 'rhino model', + totalChildrenCount: 610 + }), + 'utf8' + ) ) - ) - expect(res).to.have.status(403) - }) + expect(res).to.have.status(403) + } + ) })