test.js 3.9 KB

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