dashboard-transloadit.spec.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. describe('Dashboard with Transloadit', () => {
  2. beforeEach(() => {
  3. cy.visit('/dashboard-transloadit')
  4. cy.get('.uppy-Dashboard-input:first').as('file-input')
  5. cy.intercept('/assemblies').as('createAssemblies')
  6. cy.intercept('/assemblies/*').as('assemblies')
  7. cy.intercept('/resumable/*').as('resumable')
  8. })
  9. it('should upload cat image successfully', () => {
  10. cy.get('@file-input').selectFile('cypress/fixtures/images/cat.jpg', { force:true })
  11. cy.get('.uppy-StatusBar-actionBtn--upload').click()
  12. cy.wait('@assemblies')
  13. cy.wait('@resumable')
  14. cy.get('.uppy-StatusBar-statusPrimary').should('contain', 'Complete')
  15. })
  16. it('should close assembly polling when cancelled', () => {
  17. cy.get('@file-input').selectFile(['cypress/fixtures/images/cat.jpg', 'cypress/fixtures/images/traffic.jpg'], { force:true })
  18. cy.get('.uppy-StatusBar-actionBtn--upload').click()
  19. cy.intercept({
  20. method: 'GET',
  21. url: '/assemblies/*',
  22. }).as('assemblyPolling')
  23. cy.intercept(
  24. { method: 'PATCH', pathname: '/files/*', times: 1 },
  25. { statusCode: 204, body: {} },
  26. )
  27. cy.intercept(
  28. { method: 'DELETE', pathname: '/resumable/files/*', times: 1 },
  29. { statusCode: 204, body: {} },
  30. )
  31. cy.wait('@assemblyPolling')
  32. cy.window().then(({ uppy }) => {
  33. expect(Object.values(uppy.getPlugin('Transloadit').activeAssemblies).every((a: any) => a.pollInterval)).to.equal(true)
  34. })
  35. cy.get('button[data-cy=cancel]').click()
  36. cy.window().then(({ uppy }) => {
  37. expect(Object.values(uppy.getPlugin('Transloadit').activeAssemblies).some((a: any) => a.pollInterval)).to.equal(false)
  38. })
  39. })
  40. it('should not create assembly when all individual files have been cancelled', () => {
  41. cy.get('@file-input').selectFile(['cypress/fixtures/images/cat.jpg', 'cypress/fixtures/images/traffic.jpg'], { force: true })
  42. cy.get('.uppy-StatusBar-actionBtn--upload').click()
  43. cy.window().then(({ uppy }) => {
  44. expect(Object.values(uppy.getPlugin('Transloadit').activeAssemblies).length).to.equal(0)
  45. const { files } = uppy.getState()
  46. uppy.removeFiles(Object.keys(files))
  47. cy.wait('@createAssemblies').then(() => {
  48. expect(Object.values(uppy.getPlugin('Transloadit').activeAssemblies).some((a: any) => a.pollInterval)).to.equal(false)
  49. })
  50. })
  51. })
  52. // Not working, the upstream changes have not landed yet.
  53. it.skip('should create assembly if there is still one file to upload', () => {
  54. cy.get('@file-input').selectFile(['cypress/fixtures/images/cat.jpg', 'cypress/fixtures/images/traffic.jpg'], { force:true })
  55. cy.get('.uppy-StatusBar-actionBtn--upload').click()
  56. cy.window().then(({ uppy }) => {
  57. expect(Object.values(uppy.getPlugin('Transloadit').activeAssemblies).length).to.equal(0)
  58. const { files } = uppy.getState()
  59. const [fileID] = Object.keys(files)
  60. uppy.removeFile(fileID)
  61. cy.wait('@createAssemblies').then(() => {
  62. cy.wait('@resumable')
  63. cy.get('.uppy-StatusBar-statusPrimary').should('contain', 'Complete')
  64. })
  65. })
  66. })
  67. // Not working, the upstream changes have not landed yet.
  68. it.skip('should complete upload if one gets cancelled mid-flight', () => {
  69. cy.get('@file-input').selectFile(['cypress/fixtures/images/cat.jpg', 'cypress/fixtures/images/traffic.jpg'], { force:true })
  70. cy.get('.uppy-StatusBar-actionBtn--upload').click()
  71. cy.wait('@createAssemblies')
  72. cy.wait('@resumable')
  73. cy.window().then(({ uppy }) => {
  74. const { files } = uppy.getState()
  75. const [fileID] = Object.keys(files)
  76. uppy.removeFile(fileID)
  77. cy.get('.uppy-StatusBar-statusPrimary').should('contain', 'Complete')
  78. })
  79. })
  80. it('should not emit error if upload is cancelled right away', () => {
  81. cy.get('@file-input').selectFile('cypress/fixtures/images/cat.jpg', { force:true })
  82. cy.get('.uppy-StatusBar-actionBtn--upload').click()
  83. const handler = cy.spy()
  84. cy.window().then(({ uppy }) => {
  85. const { files } = uppy.getState()
  86. uppy.on('upload-error', handler)
  87. const [fileID] = Object.keys(files)
  88. uppy.removeFile(fileID)
  89. uppy.removeFile(fileID)
  90. cy.wait('@createAssemblies').then(() => expect(handler).not.to.be.called)
  91. })
  92. })
  93. })