Files
speckle-server/packages/server/test/speckle-helpers/streamHelper.ts
T
Kristaps Fabians Geikins ede566eed9 feat(server): serverInvites refactor + workspace invites CRUD & GQL API (#2530)
* 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
2024-07-29 14:37:54 +03:00

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
}