aee14edc5b
* got rid of models emitter + added tests * got rid of projects emitter + added tests * replaced user event bus * test migrate
194 lines
6.4 KiB
JavaScript
194 lines
6.4 KiB
JavaScript
const { buildApolloServer } = require('@/app')
|
|
const { truncateTables } = require('@/test/hooks')
|
|
const { gql } = require('graphql-tag')
|
|
const { createBlobs } = require('@/modules/blobstorage/tests/helpers')
|
|
const { expect } = require('chai')
|
|
const { Users, Streams } = require('@/modules/core/dbSchema')
|
|
const { createAuthedTestContext, executeOperation } = require('@/test/graphqlHelper')
|
|
const {
|
|
getStreamFactory,
|
|
createStreamFactory
|
|
} = require('@/modules/core/repositories/streams')
|
|
const { db } = require('@/db/knex')
|
|
const {
|
|
legacyCreateStreamFactory,
|
|
createStreamReturnRecordFactory
|
|
} = require('@/modules/core/services/streams/management')
|
|
const {
|
|
inviteUsersToProjectFactory
|
|
} = require('@/modules/serverinvites/services/projectInviteManagement')
|
|
const {
|
|
createAndSendInviteFactory
|
|
} = require('@/modules/serverinvites/services/creation')
|
|
const {
|
|
findUserByTargetFactory,
|
|
insertInviteAndDeleteOldFactory,
|
|
deleteServerOnlyInvitesFactory,
|
|
updateAllInviteTargetsFactory
|
|
} = require('@/modules/serverinvites/repositories/serverInvites')
|
|
const {
|
|
collectAndValidateCoreTargetsFactory
|
|
} = require('@/modules/serverinvites/services/coreResourceCollection')
|
|
const {
|
|
buildCoreInviteEmailContentsFactory
|
|
} = require('@/modules/serverinvites/services/coreEmailContents')
|
|
const { getEventBus } = require('@/modules/shared/services/eventBus')
|
|
const { createBranchFactory } = require('@/modules/core/repositories/branches')
|
|
const {
|
|
getUsersFactory,
|
|
getUserFactory,
|
|
storeUserFactory,
|
|
countAdminUsersFactory,
|
|
storeUserAclFactory
|
|
} = require('@/modules/core/repositories/users')
|
|
const {
|
|
findEmailFactory,
|
|
createUserEmailFactory,
|
|
ensureNoPrimaryEmailForUserFactory
|
|
} = require('@/modules/core/repositories/userEmails')
|
|
const {
|
|
requestNewEmailVerificationFactory
|
|
} = require('@/modules/emails/services/verification/request')
|
|
const {
|
|
deleteOldAndInsertNewVerificationFactory
|
|
} = require('@/modules/emails/repositories')
|
|
const { renderEmail } = require('@/modules/emails/services/emailRendering')
|
|
const { sendEmail } = require('@/modules/emails/services/sending')
|
|
const { createUserFactory } = require('@/modules/core/services/users/management')
|
|
const {
|
|
validateAndCreateUserEmailFactory
|
|
} = require('@/modules/core/services/userEmails')
|
|
const {
|
|
finalizeInvitedServerRegistrationFactory
|
|
} = require('@/modules/serverinvites/services/processing')
|
|
const { getServerInfoFactory } = require('@/modules/core/repositories/server')
|
|
|
|
const getServerInfo = getServerInfoFactory({ db })
|
|
const getUser = getUserFactory({ db })
|
|
const getUsers = getUsersFactory({ db })
|
|
const getStream = getStreamFactory({ db })
|
|
const createStream = legacyCreateStreamFactory({
|
|
createStreamReturnRecord: createStreamReturnRecordFactory({
|
|
inviteUsersToProject: inviteUsersToProjectFactory({
|
|
createAndSendInvite: createAndSendInviteFactory({
|
|
findUserByTarget: findUserByTargetFactory({ db }),
|
|
insertInviteAndDeleteOld: insertInviteAndDeleteOldFactory({ db }),
|
|
collectAndValidateResourceTargets: collectAndValidateCoreTargetsFactory({
|
|
getStream
|
|
}),
|
|
buildInviteEmailContents: buildCoreInviteEmailContentsFactory({
|
|
getStream
|
|
}),
|
|
emitEvent: ({ eventName, payload }) =>
|
|
getEventBus().emit({
|
|
eventName,
|
|
payload
|
|
}),
|
|
getUser,
|
|
getServerInfo
|
|
}),
|
|
getUsers
|
|
}),
|
|
createStream: createStreamFactory({ db }),
|
|
createBranch: createBranchFactory({ db }),
|
|
emitEvent: getEventBus().emit
|
|
})
|
|
})
|
|
|
|
const findEmail = findEmailFactory({ db })
|
|
const requestNewEmailVerification = requestNewEmailVerificationFactory({
|
|
findEmail,
|
|
getUser: getUserFactory({ db }),
|
|
getServerInfo,
|
|
deleteOldAndInsertNewVerification: deleteOldAndInsertNewVerificationFactory({ db }),
|
|
renderEmail,
|
|
sendEmail
|
|
})
|
|
const createUser = createUserFactory({
|
|
getServerInfo,
|
|
findEmail,
|
|
storeUser: storeUserFactory({ db }),
|
|
countAdminUsers: countAdminUsersFactory({ db }),
|
|
storeUserAcl: storeUserAclFactory({ db }),
|
|
validateAndCreateUserEmail: validateAndCreateUserEmailFactory({
|
|
createUserEmail: createUserEmailFactory({ db }),
|
|
ensureNoPrimaryEmailForUser: ensureNoPrimaryEmailForUserFactory({ db }),
|
|
findEmail,
|
|
updateEmailInvites: finalizeInvitedServerRegistrationFactory({
|
|
deleteServerOnlyInvites: deleteServerOnlyInvitesFactory({ db }),
|
|
updateAllInviteTargets: updateAllInviteTargetsFactory({ db })
|
|
}),
|
|
requestNewEmailVerification
|
|
}),
|
|
emitEvent: getEventBus().emit
|
|
})
|
|
|
|
describe('Blobs graphql @blobstorage', () => {
|
|
/** @type {import('@/test/graphqlHelper').ServerAndContext} */
|
|
let graphqlServer
|
|
|
|
const user = {
|
|
name: 'Baron Von Blubba',
|
|
email: 'zebarron@bubble.bobble',
|
|
password: 'bubblesAreMyBlobs'
|
|
}
|
|
before(async () => {
|
|
await truncateTables(['blob_storage', Users.name, Streams.name])
|
|
user.id = await createUser(user)
|
|
graphqlServer = {
|
|
apollo: await buildApolloServer(),
|
|
context: await createAuthedTestContext(user.id)
|
|
}
|
|
})
|
|
|
|
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 executeOperation(graphqlServer, query, {
|
|
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 executeOperation(graphqlServer, query, { streamId })
|
|
expect(result.data.stream.blobs.totalCount).to.equal(number)
|
|
expect(result.data.stream.blobs.totalSize).to.equal(number * fileSize)
|
|
})
|
|
})
|