disabled.test.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /* global browser, expect */
  2. /*
  3. WARNING! PLEASE READ THIS BEFORE ENABLING THIS TEST ON TRAVIS.
  4. Before enabling this test on travis, please keep in mind that with this "no_ssl_bump_domains" option set
  5. here https://github.com/transloadit/uppy/blob/998c7b1805acb8d305a562dd9726ebae98575e07/.travis.yml#L33
  6. SSL encryption may not be enabled between the running companion and the testing browser client.
  7. Hence, provider tokens (Google, Instagram, Dropbox) may be at risk of getting hijacked.
  8. */
  9. const testURL = 'http://localhost:4567/providers'
  10. describe('File upload with Providers', () => {
  11. beforeEach(() => {
  12. browser.url(testURL)
  13. })
  14. // not using arrow functions as cb so to keep mocha in the 'this' context
  15. it('should upload a file completely with Google Drive', function () {
  16. if (process.env.UPPY_GOOGLE_EMAIL || process.env.UPPY_GOOGLE_EMAIL === undefined) {
  17. console.log('skipping Google Drive integration test')
  18. return this.skip()
  19. }
  20. // ensure session is cleared
  21. browser.reload()
  22. startUploadTest(browser, 'GoogleDrive')
  23. signIntoGoogle(browser)
  24. finishUploadTest(browser)
  25. })
  26. // not using arrow functions as cb so to keep mocha in the 'this' context
  27. it('should upload a file completely with Instagram', function () {
  28. if (process.env.UPPY_INSTAGRAM_USERNAME || process.env.UPPY_INSTAGRAM_USERNAME === undefined) {
  29. console.log('skipping Instagram integration test')
  30. return this.skip()
  31. }
  32. // ensure session is cleared
  33. browser.reload()
  34. startUploadTest(browser, 'Instagram')
  35. // do oauth authentication
  36. browser.waitForExist('input[name=username]')
  37. browser.setValue('input[name=username]', process.env.UPPY_INSTAGRAM_USERNAME)
  38. browser.setValue('input[name=password]', process.env.UPPY_INSTAGRAM_PASSWORD)
  39. browser.click('form button')
  40. finishUploadTest(browser)
  41. })
  42. // not using arrow functions as cb so to keep mocha in the 'this' context
  43. it('should upload a file completely with Dropbox', function () {
  44. if (process.env.UPPY_GOOGLE_EMAIL || process.env.UPPY_GOOGLE_EMAIL === undefined) {
  45. console.log('skipping Dropbox integration test')
  46. return this.skip()
  47. }
  48. // ensure session is cleared
  49. browser.reload()
  50. startUploadTest(browser, 'Dropbox')
  51. // do oauth authentication
  52. browser.waitForVisible('button.auth-google')
  53. browser.click('button.auth-google')
  54. // we login with google to avoid captcha
  55. signIntoGoogle(browser)
  56. // finish oauth
  57. browser.waitForVisible('button[name=allow_access]')
  58. browser.click('button[name=allow_access]')
  59. finishUploadTest(browser)
  60. })
  61. })
  62. const startUploadTest = (browser, providerName) => {
  63. browser.click(`.uppy-DashboardTab-btn[aria-controls=uppy-DashboardContent-panel--${providerName}]`)
  64. browser.waitForVisible('.uppy-Provider-authBtn', 3000)
  65. browser.click('.uppy-Provider-authBtn')
  66. // move control to instagram auth tab
  67. browser.switchTab(browser.getTabIds()[1])
  68. }
  69. const finishUploadTest = (browser) => {
  70. // switch back to uppy tab
  71. browser.switchTab(browser.getTabIds()[0])
  72. browser.waitForVisible('.uppy-ProviderBrowser-list li.uppy-ProviderBrowserItem')
  73. browser.click('.uppy-ProviderBrowser-list li.uppy-ProviderBrowserItem:last-child button')
  74. browser.waitForVisible('.uppy-ProviderBrowser-footer .uppy-u-reset.uppy-c-btn.uppy-c-btn-primary')
  75. browser.click('.uppy-ProviderBrowser-footer .uppy-u-reset.uppy-c-btn.uppy-c-btn-primary')
  76. browser.waitForVisible('.uppy-StatusBar-content[title="Complete"]', 20000)
  77. }
  78. const signIntoGoogle = (browser) => {
  79. browser.waitForExist('#identifierId')
  80. browser.setValue('#identifierId', process.env.UPPY_GOOGLE_EMAIL)
  81. browser.click('#identifierNext')
  82. browser.waitForVisible('input[name=password]')
  83. browser.setValue('input[name=password]', process.env.UPPY_GOOGLE_PASSWORD)
  84. browser.click('#passwordNext')
  85. // if suspicious login was detected, the window will remain unclosed
  86. // so we have to confirm the recovery email or phone no
  87. if (browser.getTabIds().length > 1) {
  88. // confirm recovery email option
  89. if (browser.isExisting('li div[data-challengetype="12"]')) {
  90. browser.click('li div[data-challengetype="12"]')
  91. browser.waitForVisible('input[name=knowledgePreregisteredEmailResponse]')
  92. browser.setValue('input[name=knowledgePreregisteredEmailResponse]', process.env.UPPY_GOOGLE_RECOVERY_EMAIL)
  93. // confirm recovery phone number
  94. } else if (browser.isExisting('#countryList')) {
  95. browser.click('div#countryList')
  96. browser.click('div[data-value=nl]')
  97. browser.setValue('input#phoneNumberId', process.env.UPPY_GOOGLE_PHONE_NO)
  98. }
  99. browser.click('#next[role=button]')
  100. }
  101. }