Parcourir la source

e2e test for providers (#990)

Ifedapo .A. Olarewaju il y a 6 ans
Parent
commit
d0cbac80c7

+ 1 - 1
bin/endtoend-build-tests

@@ -11,7 +11,7 @@ __file="${__dir}/$(basename "${BASH_SOURCE[0]}")"
 __base="$(basename ${__file} .sh)"
 __root="$(cd "$(dirname "${__dir}")" && pwd)"
 
-tests="tus-drag-drop tus-dashboard i18n-drag-drop xhr-limit"
+tests="tus-drag-drop tus-dashboard i18n-drag-drop xhr-limit providers"
 
 for t in $tests; do
   mkdir -p "${__root}/test/endtoend/$t/dist"

+ 28 - 0
test/endtoend/providers/index.html

@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <title>Uppy test page</title>
+</head>
+
+<body>
+  <style>
+    main {
+      max-width: 700px;
+      margin: auto;
+    }
+  </style>
+  <main>
+    <h2>Uppy Providers</h2>
+    <div>
+      <div id="uppyDashboard"></div>
+    </div>
+  </main>
+
+  <link href="uppy.min.css" rel="stylesheet">
+  <script src="bundle.js"></script>
+</body>
+
+</html>

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

@@ -0,0 +1,22 @@
+require('es6-promise/auto')
+require('whatwg-fetch')
+const Uppy = require('@uppy/core')
+const Dashboard = require('@uppy/dashboard')
+const GoogleDrive = require('@uppy/google-drive')
+const Instagram = require('@uppy/instagram')
+const Dropbox = require('@uppy/dropbox')
+const Tus = require('@uppy/tus')
+
+Uppy({
+  id: 'uppyProvider',
+  debug: true,
+  autoProceed: true
+})
+  .use(Dashboard, {
+    target: '#uppyDashboard',
+    inline: true
+  })
+  .use(GoogleDrive, { target: Dashboard, serverUrl: 'http://localhost:3020' })
+  .use(Instagram, { target: Dashboard, serverUrl: 'http://localhost:3020' })
+  .use(Dropbox, { target: Dashboard, serverUrl: 'http://localhost:3020' })
+  .use(Tus, { endpoint: 'https://master.tus.io/files/' })

+ 71 - 0
test/endtoend/providers/test.js

@@ -0,0 +1,71 @@
+/* global browser, expect  */
+const testURL = 'http://localhost:4567/providers'
+
+describe('File upload with Providers', () => {
+  beforeEach(() => {
+    browser.url(testURL)
+  })
+
+  afterEach(() => {
+    browser.reload()
+  })
+
+  it('should upload a file completely with Google Drive', () => {
+    startUploadTest(browser, 'GoogleDrive')
+    signIntoGoogle(browser)
+    finishUploadTest(browser)
+  })
+
+  it('should upload a file completely with Instagram', () => {
+    startUploadTest(browser, 'Instagram')
+    // do oauth authentication
+    browser.waitForExist('input[name=username]')
+    browser.setValue('input[name=username]', process.env.UPPY_INSTAGRAM_USERNAME)
+    browser.setValue('input[name=password]', process.env.UPPY_INSTAGRAM_PASSWORD)
+    browser.click('button')
+
+    finishUploadTest(browser)
+  })
+
+  it('should upload a file completely with Dropbox', () => {
+    startUploadTest(browser, 'Dropbox')
+    // do oauth authentication
+    browser.waitForVisible('button.auth-google')
+    browser.click('button.auth-google')
+    // we login with google to avoid captcha
+    signIntoGoogle(browser)
+    // finish oauth
+    browser.waitForVisible('button[name=allow_access]')
+    browser.click('button[name=allow_access]')
+
+    finishUploadTest(browser)
+  })
+})
+
+const startUploadTest = (browser, providerName) => {
+  browser.click(`.uppy-DashboardTab-btn[aria-controls=uppy-DashboardContent-panel--${providerName}]`)
+  browser.waitForVisible('.uppy-Provider-authBtn', 3000)
+  browser.click('.uppy-Provider-authBtn')
+  // move control to instagram auth tab
+  browser.switchTab(browser.getTabIds()[1])
+}
+
+const finishUploadTest = (browser) => {
+  // switch back to uppy tab
+  browser.switchTab(browser.getTabIds()[0])
+  browser.waitForVisible('.uppy-ProviderBrowser-list li.uppy-ProviderBrowserItem')
+  browser.click('.uppy-ProviderBrowser-list li.uppy-ProviderBrowserItem:last-child button')
+
+  browser.waitForVisible('.uppy-ProviderBrowser-footer .uppy-u-reset.uppy-c-btn.uppy-c-btn-primary')
+  browser.click('.uppy-ProviderBrowser-footer .uppy-u-reset.uppy-c-btn.uppy-c-btn-primary')
+  browser.waitForVisible('.uppy-StatusBar-content[title="Complete"]', 20000)
+}
+
+const signIntoGoogle = (browser) => {
+  browser.waitForExist('#identifierId')
+  browser.setValue('#identifierId', process.env.UPPY_GOOGLE_EMAIL)
+  browser.click('#identifierNext')
+  browser.waitForVisible('input[name=password]')
+  browser.setValue('input[name=password]', process.env.UPPY_GOOGLE_PASSWORD)
+  browser.click('#passwordNext')
+}

+ 1 - 0
test/endtoend/wdio.base.conf.js

@@ -91,6 +91,7 @@ exports.config = {
     { mount: '/i18n-drag-drop', path: './test/endtoend/i18n-drag-drop/dist' },
     { mount: '/tus-drag-drop', path: './test/endtoend/tus-drag-drop/dist' },
     { mount: '/xhr-limit', path: './test/endtoend/xhr-limit/dist' },
+    { mount: '/providers', path: './test/endtoend/providers/dist' },
     { mount: '/create-react-app', path: './test/endtoend/create-react-app/build' }
   ],
 

+ 8 - 1
test/endtoend/wdio.local.conf.js

@@ -19,5 +19,12 @@ exports.config = Object.assign(base.config, {
   // Services take over a specific job you don't want to take care of. They enhance
   // your test setup with almost no effort. Unlike plugins, they don't add new
   // commands. Instead, they hook themselves up into the test process.
-  services: ['static-server']
+  services: ['static-server'],
+
+  // Options to be passed to Mocha.
+  // See the full list at http://mochajs.org/
+  mochaOpts: {
+    ui: 'dot',
+    timeout: 60000
+  }
 })