a54fa8c28f
* 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>
86 lines
2.6 KiB
JavaScript
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)
|
|
})
|
|
})
|