Parcourir la source

test: e2e for fastRetry in providers (#1766)

Ifedapo .A. Olarewaju il y a 5 ans
Parent
commit
f967403100

+ 22 - 0
test/endtoend/providers/helper.js

@@ -23,3 +23,25 @@ exports.startUploadTest = async (browser, providerName, tabMatch) => {
   // move control to provider oauth tab
   // move control to provider oauth tab
   await browser.switchWindow(tabMatch)
   await browser.switchWindow(tabMatch)
 }
 }
+
+exports.uploadWithRetry = async (browser, providerName, testURL) => {
+  await browser.url(testURL + '?socketerr=true')
+
+  const providerButton = await browser.$(
+    `.uppy-DashboardTab-btn[aria-controls=uppy-DashboardContent-panel--${providerName}]`)
+  await providerButton.click()
+  await browser.pause(2000)
+
+  const fileItem = await browser.$('.uppy-ProviderBrowser-list li.uppy-ProviderBrowserItem:last-child button')
+  await fileItem.waitForDisplayed()
+  await fileItem.click()
+
+  const uploadButton = await browser.$('.uppy-ProviderBrowser-footer .uppy-u-reset.uppy-c-btn.uppy-c-btn-primary')
+  await uploadButton.click()
+  const retryButton = await browser.$('.uppy-StatusBar-actionBtn--retry')
+  await retryButton.waitForDisplayed(10000)
+  await retryButton.click()
+
+  const completeBar = await browser.$('.uppy-StatusBar-content[title="Complete"]')
+  await completeBar.waitForDisplayed(20000)
+}

+ 10 - 0
test/endtoend/providers/main.js

@@ -23,3 +23,13 @@ window.uppy = Uppy({
   .use(Instagram, { target: Dashboard, companionUrl })
   .use(Instagram, { target: Dashboard, companionUrl })
   .use(Dropbox, { target: Dashboard, companionUrl })
   .use(Dropbox, { target: Dashboard, companionUrl })
   .use(Tus, { endpoint: 'https://master.tus.io/files/' })
   .use(Tus, { endpoint: 'https://master.tus.io/files/' })
+
+if (window.location.search === '?socketerr=true') {
+  const emitError = (file, data) => {
+    // trigger fake socket error
+    data.uploader.uploaderSockets[file.id].emit(
+      'error', { error: { message: 'nobody likes me, thats ok' } })
+    window.uppy.off('upload-progress', emitError)
+  }
+  window.uppy.on('upload-progress', emitError)
+}

+ 11 - 1
test/endtoend/providers/provider.dropbox.test.js

@@ -9,7 +9,7 @@
 
 
   Hence, provider tokens (Google, Instagram, Dropbox) may be at risk of getting hijacked.
   Hence, provider tokens (Google, Instagram, Dropbox) may be at risk of getting hijacked.
 */
 */
-const { finishUploadTest, startUploadTest } = require('./helper')
+const { finishUploadTest, startUploadTest, uploadWithRetry } = require('./helper')
 const testURL = 'http://localhost:4567/providers'
 const testURL = 'http://localhost:4567/providers'
 
 
 describe('File upload with Dropbox Provider', () => {
 describe('File upload with Dropbox Provider', () => {
@@ -49,6 +49,16 @@ describe('File upload with Dropbox Provider', () => {
 
 
     await finishUploadTest(browser)
     await finishUploadTest(browser)
   })
   })
+
+  // not using arrow functions as cb so to keep mocha in the 'this' context
+  it('should resume uploads when retry is triggered with Dropbox', async function () {
+    if (!process.env.UPPY_GOOGLE_EMAIL) {
+      console.log('skipping Dropbox integration test')
+      return this.skip()
+    }
+
+    await uploadWithRetry(browser, 'Dropbox', testURL)
+  })
 })
 })
 
 
 const signIntoGoogle = async (browser) => {
 const signIntoGoogle = async (browser) => {

+ 11 - 1
test/endtoend/providers/provider.google.test.js

@@ -9,7 +9,7 @@
 
 
   Hence, provider tokens (Google, Instagram, Dropbox) may be at risk of getting hijacked.
   Hence, provider tokens (Google, Instagram, Dropbox) may be at risk of getting hijacked.
 */
 */
-const { finishUploadTest, startUploadTest } = require('./helper')
+const { finishUploadTest, startUploadTest, uploadWithRetry } = require('./helper')
 const testURL = 'http://localhost:4567/providers'
 const testURL = 'http://localhost:4567/providers'
 
 
 describe('File upload with Google Drive Provider', () => {
 describe('File upload with Google Drive Provider', () => {
@@ -29,6 +29,16 @@ describe('File upload with Google Drive Provider', () => {
     await signIntoGoogle(browser)
     await signIntoGoogle(browser)
     await finishUploadTest(browser)
     await finishUploadTest(browser)
   })
   })
+
+  // not using arrow functions as cb so to keep mocha in the 'this' context
+  it('should resume uploads when retry is triggered with Google Drive', async function () {
+    if (!process.env.UPPY_GOOGLE_EMAIL) {
+      console.log('skipping Google Drive integration test')
+      return this.skip()
+    }
+
+    await uploadWithRetry(browser, 'GoogleDrive', testURL)
+  })
 })
 })
 
 
 const signIntoGoogle = async (browser) => {
 const signIntoGoogle = async (browser) => {

+ 11 - 1
test/endtoend/providers/provider.instagram.test.js

@@ -9,7 +9,7 @@
 
 
   Hence, provider tokens (Google, Instagram, Dropbox) may be at risk of getting hijacked.
   Hence, provider tokens (Google, Instagram, Dropbox) may be at risk of getting hijacked.
 */
 */
-const { finishUploadTest, startUploadTest } = require('./helper')
+const { finishUploadTest, startUploadTest, uploadWithRetry } = require('./helper')
 const testURL = 'http://localhost:4567/providers'
 const testURL = 'http://localhost:4567/providers'
 
 
 describe('File upload with Instagram Provider', () => {
 describe('File upload with Instagram Provider', () => {
@@ -64,4 +64,14 @@ describe('File upload with Instagram Provider', () => {
 
 
     await finishUploadTest(browser)
     await finishUploadTest(browser)
   })
   })
+
+  // not using arrow functions as cb so to keep mocha in the 'this' context
+  it('should resume uploads when retry is triggered Instagram', async function () {
+    if (!process.env.UPPY_INSTAGRAM_USERNAME) {
+      console.log('skipping Instagram integration test')
+      return this.skip()
+    }
+
+    await uploadWithRetry(browser, 'Instagram', testURL)
+  })
 })
 })