dashboard-aws-multipart.spec.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. describe('Dashboard with @uppy/aws-s3-multipart', () => {
  2. beforeEach(() => {
  3. cy.visit('/dashboard-aws-multipart')
  4. cy.get('.uppy-Dashboard-input:first').as('file-input')
  5. cy.intercept({ method: 'POST', pathname: '/s3/multipart' }).as('post')
  6. cy.intercept({ method: 'GET', pathname: '/s3/multipart/*/1' }).as('get')
  7. cy.intercept({ method: 'PUT' }).as('put')
  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(['@post', '@get', '@put'])
  13. cy.get('.uppy-StatusBar-statusPrimary').should('contain', 'Complete')
  14. })
  15. it('should handle retry request gracefully', () => {
  16. cy.get('@file-input').selectFile('cypress/fixtures/images/cat.jpg', { force:true })
  17. cy.intercept('POST', '/s3/multipart', { forceNetworkError: true, times: 1 }).as('createMultipartUpload-fails')
  18. cy.get('.uppy-StatusBar-actionBtn--upload').click()
  19. cy.wait(['@createMultipartUpload-fails'])
  20. cy.get('.uppy-StatusBar-statusPrimary').should('contain', 'Upload failed')
  21. cy.intercept('POST', '/s3/multipart', { statusCode: 200, times: 1, body: JSON.stringify({ key:'mocked-key-attempt1', uploadId:'mocked-uploadId-attempt1' }) }).as('createMultipartUpload-attempt1')
  22. cy.intercept('GET', '/s3/multipart/mocked-uploadId-attempt1/1?key=mocked-key-attempt1', { forceNetworkError: true }).as('signPart-fails')
  23. cy.get('.uppy-StatusBar-actions > .uppy-c-btn').click()
  24. cy.wait(['@createMultipartUpload-attempt1', '@signPart-fails'])
  25. cy.get('.uppy-StatusBar-statusPrimary').should('contain', 'Upload failed')
  26. cy.intercept('POST', '/s3/multipart', { statusCode: 200, times: 1, body: JSON.stringify({ key:'mocked-key-attempt2', uploadId:'mocked-uploadId-attempt2' }) }).as('createMultipartUpload-attempt2')
  27. cy.intercept('GET', '/s3/multipart/mocked-uploadId-attempt2/1?key=mocked-key-attempt2', {
  28. statusCode: 200,
  29. headers: {
  30. ETag: 'W/"222-GXE2wLoMKDihw3wxZFH1APdUjHM"',
  31. },
  32. body: JSON.stringify({ url:'/put-fail', expires:8 }),
  33. }).as('signPart-toFail')
  34. cy.intercept('PUT', '/put-fail', { forceNetworkError: true }).as('put-fails')
  35. cy.get('.uppy-StatusBar-actions > .uppy-c-btn').click()
  36. cy.wait(['@createMultipartUpload-attempt2', '@signPart-toFail', ...Array(5).fill('@put-fails')], { timeout: 10_000 })
  37. cy.get('.uppy-StatusBar-statusPrimary').should('contain', 'Upload failed')
  38. cy.intercept('GET', '/s3/multipart/mocked-uploadId-attempt2/1?key=mocked-key-attempt2', {
  39. statusCode: 200,
  40. headers: {
  41. ETag: 'ETag-attempt2',
  42. },
  43. body: JSON.stringify({ url:'/put-success-attempt2', expires:8 }),
  44. }).as('signPart-attempt2')
  45. cy.intercept('PUT', '/put-success-attempt2', {
  46. statusCode: 200,
  47. headers: {
  48. ETag: 'ETag-attempt2',
  49. },
  50. }).as('put-attempt2')
  51. cy.intercept('POST', '/s3/multipart/mocked-uploadId-attempt2/complete?key=mocked-key-attempt2', { forceNetworkError: true }).as('completeMultipartUpload-fails')
  52. cy.get('.uppy-StatusBar-actions > .uppy-c-btn').click()
  53. cy.wait(['@createMultipartUpload-attempt2', '@signPart-attempt2', '@put-attempt2', '@completeMultipartUpload-fails'])
  54. cy.get('.uppy-StatusBar-statusPrimary').should('contain', 'Upload failed')
  55. cy.intercept('POST', '/s3/multipart', { statusCode: 200, times: 1, body: JSON.stringify({ key:'mocked-key-attempt3', uploadId:'mocked-uploadId-attempt3' }) }).as('createMultipartUpload-attempt3')
  56. cy.intercept('GET', '/s3/multipart/mocked-uploadId-attempt3/1?key=mocked-key-attempt3', {
  57. statusCode: 200,
  58. headers: {
  59. ETag: 'ETag-attempt3',
  60. },
  61. body: JSON.stringify({ url:'/put-success-attempt3', expires:8 }),
  62. }).as('signPart-attempt3')
  63. cy.intercept('PUT', '/put-success-attempt3', {
  64. statusCode: 200,
  65. headers: {
  66. ETag: 'ETag-attempt3',
  67. },
  68. }).as('put-attempt3')
  69. cy.intercept('POST', '/s3/multipart/mocked-uploadId-attempt3/complete?key=mocked-key-attempt3', {
  70. statusCode: 200,
  71. body: JSON.stringify({
  72. location: 'someLocation',
  73. }),
  74. }).as('completeMultipartUpload-attempt3')
  75. cy.get('.uppy-StatusBar-actions > .uppy-c-btn').click()
  76. cy.wait(['@createMultipartUpload-attempt3', '@signPart-attempt3', '@put-attempt3', '@completeMultipartUpload-attempt3'])
  77. cy.get('.uppy-StatusBar-statusPrimary').should('contain', 'Complete')
  78. })
  79. })