test.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /* global browser, expect */
  2. const { spawn } = require('child_process')
  3. const testURL = 'http://localhost:4567/providers'
  4. describe('File upload with Providers', () => {
  5. let companion
  6. function prematureExit () {
  7. throw new Error('Companion exited early')
  8. }
  9. before(() => {
  10. companion = spawn('npm', ['run', 'start:companion'], {
  11. stdio: 'pipe'
  12. })
  13. return new Promise((resolve, reject) => {
  14. companion.on('error', reject)
  15. companion.stdout.on('data', (chunk) => {
  16. if (`${chunk}`.includes('Listening on')) {
  17. resolve()
  18. }
  19. })
  20. companion.on('error', console.error)
  21. companion.stderr.pipe(process.stderr)
  22. companion.on('exit', prematureExit)
  23. })
  24. })
  25. after(() => {
  26. return new Promise((resolve) => {
  27. companion.removeListener('exit', prematureExit)
  28. companion.on('exit', () => resolve())
  29. companion.kill('SIGINT')
  30. })
  31. })
  32. beforeEach(() => {
  33. browser.url(testURL)
  34. })
  35. afterEach(() => {
  36. browser.reload()
  37. })
  38. it('should upload a file completely with Google Drive', function () {
  39. if (process.env.UPPY_GOOGLE_EMAIL === undefined) {
  40. return this.skip()
  41. }
  42. startUploadTest(browser, 'GoogleDrive')
  43. signIntoGoogle(browser)
  44. finishUploadTest(browser)
  45. })
  46. it('should upload a file completely with Instagram', function () {
  47. if (process.env.UPPY_INSTAGRAM_USERNAME === undefined) {
  48. return this.skip()
  49. }
  50. startUploadTest(browser, 'Instagram')
  51. // do oauth authentication
  52. browser.waitForExist('input[name=username]')
  53. browser.setValue('input[name=username]', process.env.UPPY_INSTAGRAM_USERNAME)
  54. browser.setValue('input[name=password]', process.env.UPPY_INSTAGRAM_PASSWORD)
  55. browser.click('form button')
  56. finishUploadTest(browser)
  57. })
  58. it('should upload a file completely with Dropbox', function () {
  59. if (process.env.UPPY_GOOGLE_EMAIL === undefined) {
  60. return this.skip()
  61. }
  62. startUploadTest(browser, 'Dropbox')
  63. // do oauth authentication
  64. browser.waitForVisible('button.auth-google')
  65. browser.click('button.auth-google')
  66. // we login with google to avoid captcha
  67. signIntoGoogle(browser)
  68. // finish oauth
  69. browser.waitForVisible('button[name=allow_access]')
  70. browser.click('button[name=allow_access]')
  71. finishUploadTest(browser)
  72. })
  73. })
  74. const startUploadTest = (browser, providerName) => {
  75. browser.click(`.uppy-DashboardTab-btn[aria-controls=uppy-DashboardContent-panel--${providerName}]`)
  76. browser.waitForVisible('.uppy-Provider-authBtn', 3000)
  77. browser.click('.uppy-Provider-authBtn')
  78. // move control to instagram auth tab
  79. browser.switchTab(browser.getTabIds()[1])
  80. }
  81. const finishUploadTest = (browser) => {
  82. // switch back to uppy tab
  83. browser.switchTab(browser.getTabIds()[0])
  84. browser.waitForVisible('.uppy-ProviderBrowser-list li.uppy-ProviderBrowserItem')
  85. browser.click('.uppy-ProviderBrowser-list li.uppy-ProviderBrowserItem:last-child button')
  86. browser.waitForVisible('.uppy-ProviderBrowser-footer .uppy-u-reset.uppy-c-btn.uppy-c-btn-primary')
  87. browser.click('.uppy-ProviderBrowser-footer .uppy-u-reset.uppy-c-btn.uppy-c-btn-primary')
  88. browser.waitForVisible('.uppy-StatusBar-content[title="Complete"]', 20000)
  89. }
  90. const signIntoGoogle = (browser) => {
  91. browser.waitForExist('#identifierId')
  92. browser.setValue('#identifierId', process.env.UPPY_GOOGLE_EMAIL)
  93. browser.click('#identifierNext')
  94. browser.waitForVisible('input[name=password]')
  95. browser.setValue('input[name=password]', process.env.UPPY_GOOGLE_PASSWORD)
  96. browser.click('#passwordNext')
  97. }