chote(core): fix tests
This commit is contained in:
@@ -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
|
||||
)
|
||||
}
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user