ede566eed9
* prep for new resources algo * typescriptifying stuff * minor types fix * migrate to resources col * repo & creation updated, WIP processing/retrieval * WIP invite processing * finished finalization refactor * project invite management * transformed all invites services * fixed up projects & core serverinvites resolvers * test fixes * WIP workspace create GQL & test * basic invite creation test works * a buncha working tests * more tests * cancelation tests * minor invite use refactor * invite retrieval tasks * invite use() works as expected * filtering out broken invites * enabled invite retrieval by token irregardless of who is it for * minor adjustments * tests fix * test config improvements * test env adjustment * extra test case * making resource access limits harder to ignore * linter fixes * eventBus type cleanup * better generic names * refactored serverinvites resource migration * fix(server): better error message in project invite edge case
73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
import { StreamAcl } from '@/modules/core/dbSchema'
|
|
import { StreamAclRecord, StreamRecord } from '@/modules/core/helpers/types'
|
|
import { createStream } from '@/modules/core/services/streams'
|
|
import { removeStreamCollaborator } from '@/modules/core/services/streams/streamAccessService'
|
|
import { Nullable } from '@/modules/shared/helpers/typeHelper'
|
|
import { BasicTestUser } from '@/test/authHelper'
|
|
import { ensureError } from '@speckle/shared'
|
|
import { omit } from 'lodash'
|
|
|
|
export type BasicTestStream = {
|
|
name: string
|
|
isPublic: boolean
|
|
/**
|
|
* The ID of the owner user. Will be filled in by createTestStream().
|
|
*/
|
|
ownerId: string
|
|
/**
|
|
* The ID of the stream. Will be filled in by createTestStream().
|
|
*/
|
|
id: string
|
|
} & Partial<StreamRecord>
|
|
|
|
/**
|
|
* Create multiple test streams with their IDs filled in
|
|
*/
|
|
export async function createTestStreams(
|
|
streamOwnerPairs: [BasicTestStream, BasicTestUser][]
|
|
) {
|
|
await Promise.all(streamOwnerPairs.map((p) => createTestStream(p[0], p[1])))
|
|
}
|
|
|
|
/**
|
|
* Create basic stream for testing and update streamObj to have a real ID
|
|
*/
|
|
export async function createTestStream(
|
|
streamObj: BasicTestStream,
|
|
owner: BasicTestUser
|
|
) {
|
|
const id = await createStream({
|
|
...omit(streamObj, ['id', 'ownerId']),
|
|
ownerId: owner.id
|
|
})
|
|
streamObj.id = id
|
|
streamObj.ownerId = owner.id
|
|
}
|
|
|
|
export async function leaveStream(streamObj: BasicTestStream, user: BasicTestUser) {
|
|
await removeStreamCollaborator(streamObj.id, user.id, user.id, null).catch((e) => {
|
|
if (ensureError(e).message === 'User is not a stream collaborator') {
|
|
return
|
|
}
|
|
|
|
throw e
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Get the role user has for the specified stream
|
|
*/
|
|
export async function getUserStreamRole(
|
|
userId: string,
|
|
streamId: string
|
|
): Promise<Nullable<string>> {
|
|
const entry = await StreamAcl.knex<StreamAclRecord>()
|
|
.where({
|
|
[StreamAcl.col.resourceId]: streamId,
|
|
[StreamAcl.col.userId]: userId
|
|
})
|
|
.first()
|
|
|
|
return entry?.role || null
|
|
}
|