uploader.js 2.1 KB

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