Files
speckle-server/packages/server/modules/blobstorage/tests/blobstorage.graph.spec.js
T
Gergő Jedlicska a54fa8c28f Test blob storage (#814)
* feat(server): add server authz pipeline rework first sketch

* feat(server authz): add new server authz middleware poc implementation

* test(server authz): add unittests for the new server authz workflow

* feat(wip rework of fileuploads vs blob storage): add basim impl of separate blob storage service

* feat(fileimport service): refactored file import service to utilize the new asssetstorage service

* refactor(server errors): refactor server errors to use the shared module definitions

Now all the errors inherit from BaseError

* refactor(fileimport service): cleanup after refactor

* feat(frontend fileimports): use the new blob storage for downloading the original file

* refactor(server fileimports): clean up the remnants of S3 storage from file imports

* refactor(server authz): centralize generic authz pipeline configs

* refactor(server blob storage): refactor / rename everything to use the `blob-storage` name

* ci(circleci): add s3 objectstorage environment variables

* ci(circleci): fix missing env variables

* ci(circleci): add minio test container

* ci(circleci): fix minio app startup

* ci(circleci): enable circleci remote docker

* ci(circleci): fix minio startup

* ci(cirleci): detach and wait properly for minio to start

* ci(circleci): revert to additional minio img config, it only fails when the container is stopped ?!

* ci(circleci): disable file uploads

* fix(fileimports): update with blob storage refactor leftovers

* feat(server blob storage): add blob storage graphql api

* refactor(server errors): merge new errors to shared module

* fix(server comments rte): fix import for RTE error

* chore(fileimports): remove node-fetch from dependency

* chore(server): remove body parser dependency

* fix(server blob storage): fix gql api

* fix(frontend): fix fileupload item not loading the new upload status, cause of premature event fire

* feat(server blob storage): fix file size limit and allow for public streams

* Update packages/server/modules/blobstorage/graph/schemas/blobstorage.graphql

Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>

* chore(blobstorage): fix PR review issues

* fix(server): fix import bugs

* test(server): blob storage first test

* test(server blob services): add tests for blob storage services

* test(server blob storage): add service and rest api tests

* test(server blob storage): add server blob storage graphql api tests

* feat(server blob storage): store and make available blob fileHash attribute

* feat(server authz): add fatal failure option to server authz pipeline

Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>
2022-06-23 16:35:42 +02:00

86 lines
2.6 KiB
JavaScript

const { buildApolloServer } = require('@/app')
const { addLoadersToCtx } = require('@/modules/shared')
const { truncateTables } = require('@/test/hooks')
const { Roles, AllScopes } = require('@/modules/core/helpers/mainConstants')
const { createStream } = require('@/modules/core/services/streams')
const { createUser } = require('@/modules/core/services/users')
const crs = require('crypto-random-string')
const { gql } = require('apollo-server-express')
const { createBlobs } = require('@/modules/blobstorage/tests/helpers')
const { expect } = require('chai')
describe('Blobs graphql @blobstorage', () => {
/** @type {import('apollo-server-express').ApolloServer} */
let apollo
const user = {
name: 'Baron Von Blubba',
email: 'barron@bubble.bobble',
password: 'bubblesAreMyBlobs'
}
before(async () => {
user.id = await createUser(user)
await truncateTables(['blob_storage'])
apollo = buildApolloServer({
context: () =>
addLoadersToCtx({
auth: true,
userId: crs({ length: 10 }),
role: Roles.Server.User,
token: 'asd',
scopes: AllScopes
})
})
})
it('Stream has blob metadata for a single blob', async () => {
const query = gql`
query ($streamId: String!, $blobId: String!) {
stream(id: $streamId) {
id
blob(id: $blobId) {
id
fileName
uploadStatus
fileSize
fileHash
}
}
}
`
const streamId = await createStream({ ownerId: user.id })
const [blob] = await createBlobs({ streamId, number: 1 })
const result = await apollo.executeOperation({
query,
variables: {
streamId,
blobId: blob.id
}
})
const blobMetadata = result.data.stream.blob
expect(blobMetadata.id).to.equal(blob.id)
expect(blobMetadata.fileSize).to.equal(blob.fileSize)
expect(blobMetadata.fileHash).to.equal(blob.fileHash)
})
it('Blob metadata collection returns proper summary values', async () => {
const query = gql`
query ($streamId: String!) {
stream(id: $streamId) {
id
blobs {
totalCount
totalSize
}
}
}
`
const streamId = await createStream({ ownerId: user.id })
const number = 10
const fileSize = 123
await createBlobs({ streamId, number, fileSize })
const result = await apollo.executeOperation({ query, variables: { streamId } })
expect(result.data.stream.blobs.totalCount).to.equal(number)
expect(result.data.stream.blobs.totalSize).to.equal(number * fileSize)
})
})