Files
speckle-server/packages/server/modules/previews/tests/unit/createObjectPreview.spec.ts
T
Gergő Jedlicska 61609de97e gergo/previews (#3765)
* feat(preview-generator): add new preview generator webapp

* wip(preview-service): reworking the preview service backend

* feat(previews): logging

* feat(preview-service): streamline payloads

* fix(preview-service): do not log the full payload

* feat(preview-service): build new preview service

* feat(preview-service): add separate response queue

* feat(previews): integrate preview queues with the server

* feat(previews): use module alias

* chore(previews): remove old preview service code

* feat(previews): log stuff on job statuses

* fix(previews): add missing deps and scripts

* fix(previews): package deps fix

* fix(server): moar typing fixes

* Metrics related to jobs: total count, request failures, response errors & durations

* duration should include unit.
- histogram metric should be summary
- error responses include duration in seconds
- attempt to remove metric before adding it (prevent errors with duplicate metrics)

* fix(server, frontend): some ts fixes

* fixes

* fix(frontend): remove unneeded ts-expect-error

* chore(preview-service): eslint

* TS fix

* feat(previews): more smoal fixes

* fix(preview-service): alias loading

* feat(helm): updates for new preview service queue setup

* feat(preview-service): launch new browser for each job

* feat(preview-service): add timeout, fix liveliness

* fix(helm): add access to new secret in service accounts

* tidy metrics into a separate file

* Remove broken preview service acceptance test

* fix broken import

* Add metrics to test

* feat(preview-service): handle preview service shutdown properly

* fix(previews): merge bork

---------

Co-authored-by: Iain Sproat <68657+iainsproat@users.noreply.github.com>
Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>
2025-03-06 14:26:56 +01:00

59 lines
2.2 KiB
TypeScript

import { LimitedUserWithStreamRole } from '@/modules/core/domain/streams/types'
import {
ObjectPreviewInput,
ObjectPreviewRequest
} from '@/modules/previews/domain/operations'
import { createObjectPreviewFactory } from '@/modules/previews/services/createObjectPreview'
import { Roles } from '@speckle/shared'
import { expect } from 'chai'
import cryptoRandomString from 'crypto-random-string'
describe('object preview @previews', () => {
describe('createObjectPreviewFactory creates a function, that', () => {
it('requests and stores an object preview', async () => {
const appToken = cryptoRandomString({ length: 40 })
const streamOwner: LimitedUserWithStreamRole = {
id: cryptoRandomString({ length: 10 }),
avatar: null,
bio: null,
company: null,
createdAt: new Date(),
name: 'Preview User',
role: Roles.Server.User,
streamRole: Roles.Stream.Owner,
verified: true
}
let userId: string | undefined = undefined
let objectPreviewInput: ObjectPreviewInput | undefined = undefined
const serverOrigin = 'https://example.org'
let objectPreviewRequest: ObjectPreviewRequest | undefined = undefined
const createObjectPreview = createObjectPreviewFactory({
serverOrigin,
getStreamCollaborators: async () => [streamOwner],
createAppToken: async (tokenArgs) => {
userId = tokenArgs.userId
return appToken
},
storeObjectPreview: async (objectPreview) => {
objectPreviewInput = objectPreview
},
requestObjectPreview: async (previewRequest) => {
objectPreviewRequest = previewRequest
}
})
const objectId = cryptoRandomString({ length: 32 })
const streamId = cryptoRandomString({ length: 10 })
const priority = 0
await createObjectPreview({ objectId, streamId, priority })
expect(objectPreviewInput).to.deep.equal({ objectId, streamId, priority })
expect(userId).to.deep.equal(streamOwner.id)
expect(objectPreviewRequest).to.deep.equal({
url: `${serverOrigin}/projects/${streamId}/models/${objectId}`,
jobId: `${streamId}.${objectId}`,
token: appToken
})
})
})
})