uploader.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /* global jest:false, test:false, expect:false, describe:false */
  2. jest.mock('tus-js-client')
  3. const fs = require('fs')
  4. const Uploader = require('../../src/server/Uploader')
  5. const socketClient = require('../mocksocket')
  6. const { companionOptions } = require('../../src/standalone')
  7. describe('uploader with tus protocol', () => {
  8. test('upload functions with tus protocol', () => {
  9. const fileContent = Buffer.from('Some file content')
  10. const opts = {
  11. companionOptions: companionOptions,
  12. endpoint: 'http://url.myendpoint.com/files',
  13. protocol: 'tus',
  14. size: fileContent.length,
  15. pathPrefix: companionOptions.filePath
  16. }
  17. const uploader = new Uploader(opts)
  18. const uploadToken = uploader.token
  19. expect(uploader.hasError()).toBe(false)
  20. expect(uploadToken).toBeTruthy()
  21. return new Promise((resolve) => {
  22. // validate that the test is resolved on socket connection
  23. uploader.onSocketReady(() => {
  24. const fileInfo = fs.statSync(uploader.path)
  25. expect(fileInfo.isFile()).toBe(true)
  26. expect(fileInfo.size).toBe(0)
  27. uploader.handleChunk(null, fileContent)
  28. uploader.handleChunk(null, null)
  29. })
  30. let progressReceived = 0
  31. // emulate socket connection
  32. socketClient.connect(uploadToken)
  33. socketClient.onProgress(uploadToken, (message) => {
  34. // validate that the file has been downloaded and saved into the file path
  35. const fileInfo = fs.statSync(uploader.path)
  36. expect(fileInfo.isFile()).toBe(true)
  37. expect(fileInfo.size).toBe(fileContent.length)
  38. progressReceived = message.payload.bytesUploaded
  39. expect(message.payload.bytesTotal).toBe(fileContent.length)
  40. })
  41. socketClient.onUploadSuccess(uploadToken, (message) => {
  42. expect(progressReceived).toBe(fileContent.length)
  43. // see __mocks__/tus-js-client.js
  44. expect(message.payload.url).toBe('https://tus.endpoint/files/foo-bar')
  45. setTimeout(() => {
  46. // check that file has been cleaned up
  47. expect(fs.existsSync(uploader.path)).toBe(false)
  48. resolve()
  49. }, 100)
  50. })
  51. })
  52. })
  53. })