test.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /* global browser, expect */
  2. const testURL = 'http://localhost:4567/providers'
  3. describe('File upload with Providers', () => {
  4. beforeEach(() => {
  5. browser.url(testURL)
  6. })
  7. afterEach(() => {
  8. browser.reload()
  9. })
  10. // not using arrow functions as cb so to keep mocha in the 'this' context
  11. it('should upload a file completely with Google Drive', function () {
  12. if (process.env.UPPY_GOOGLE_EMAIL === undefined) {
  13. console.log('skipping Google Drive integration test')
  14. return this.skip()
  15. }
  16. startUploadTest(browser, 'GoogleDrive')
  17. signIntoGoogle(browser)
  18. finishUploadTest(browser)
  19. })
  20. // not using arrow functions as cb so to keep mocha in the 'this' context
  21. it('should upload a file completely with Instagram', function () {
  22. if (process.env.UPPY_INSTAGRAM_USERNAME === undefined) {
  23. console.log('skipping Instagram integration test')
  24. return this.skip()
  25. }
  26. startUploadTest(browser, 'Instagram')
  27. // do oauth authentication
  28. browser.waitForExist('input[name=username]')
  29. browser.setValue('input[name=username]', process.env.UPPY_INSTAGRAM_USERNAME)
  30. browser.setValue('input[name=password]', process.env.UPPY_INSTAGRAM_PASSWORD)
  31. browser.click('form button')
  32. finishUploadTest(browser)
  33. })
  34. // not using arrow functions as cb so to keep mocha in the 'this' context
  35. it('should upload a file completely with Dropbox', function () {
  36. if (process.env.UPPY_GOOGLE_EMAIL === undefined) {
  37. console.log('skipping Dropbox integration test')
  38. return this.skip()
  39. }
  40. startUploadTest(browser, 'Dropbox')
  41. // do oauth authentication
  42. browser.waitForVisible('button.auth-google')
  43. browser.click('button.auth-google')
  44. // we login with google to avoid captcha
  45. signIntoGoogle(browser)
  46. // finish oauth
  47. browser.waitForVisible('button[name=allow_access]')
  48. browser.click('button[name=allow_access]')
  49. finishUploadTest(browser)
  50. })
  51. })
  52. const startUploadTest = (browser, providerName) => {
  53. browser.click(`.uppy-DashboardTab-btn[aria-controls=uppy-DashboardContent-panel--${providerName}]`)
  54. browser.waitForVisible('.uppy-Provider-authBtn', 3000)
  55. browser.click('.uppy-Provider-authBtn')
  56. // move control to instagram auth tab
  57. browser.switchTab(browser.getTabIds()[1])
  58. }
  59. const finishUploadTest = (browser) => {
  60. // switch back to uppy tab
  61. browser.switchTab(browser.getTabIds()[0])
  62. browser.waitForVisible('.uppy-ProviderBrowser-list li.uppy-ProviderBrowserItem')
  63. browser.click('.uppy-ProviderBrowser-list li.uppy-ProviderBrowserItem:last-child button')
  64. browser.waitForVisible('.uppy-ProviderBrowser-footer .uppy-u-reset.uppy-c-btn.uppy-c-btn-primary')
  65. browser.click('.uppy-ProviderBrowser-footer .uppy-u-reset.uppy-c-btn.uppy-c-btn-primary')
  66. browser.waitForVisible('.uppy-StatusBar-content[title="Complete"]', 20000)
  67. }
  68. const signIntoGoogle = (browser) => {
  69. browser.waitForExist('#identifierId')
  70. browser.setValue('#identifierId', process.env.UPPY_GOOGLE_EMAIL)
  71. browser.click('#identifierNext')
  72. browser.waitForVisible('input[name=password]')
  73. browser.setValue('input[name=password]', process.env.UPPY_GOOGLE_PASSWORD)
  74. browser.click('#passwordNext')
  75. // if suspicious login was detected, the window will remain unclosed
  76. // so we have to confirm the recovery email or phone no
  77. if (browser.getTabIds().length > 1) {
  78. // confirm recovery email option
  79. if (browser.isExisting('li div[data-challengetype="12"]')) {
  80. browser.click('li div[data-challengetype="12"]')
  81. browser.waitForVisible('input[name=knowledgePreregisteredEmailResponse]')
  82. browser.setValue('input[name=knowledgePreregisteredEmailResponse]', process.env.UPPY_GOOGLE_RECOVERY_EMAIL)
  83. // confirm recovery phone number
  84. } else if (browser.isExisting('#countryList')) {
  85. browser.click('div#countryList')
  86. browser.click('div[data-value=nl]')
  87. browser.setValue('input#phoneNumberId', process.env.UPPY_GOOGLE_PHONE_NO)
  88. }
  89. browser.click('#next[role=button]')
  90. }
  91. }