callback.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /* global jest:false, test:false, expect:false, describe:false */
  2. jest.mock('../../src/server/helpers/oauth-state', () => require('../mockoauthstate')())
  3. const request = require('supertest')
  4. const tokenService = require('../../src/server/helpers/jwt')
  5. const { getServer } = require('../mockserver')
  6. const authServer = getServer()
  7. const authData = {
  8. dropbox: 'token value',
  9. drive: 'token value',
  10. }
  11. const token = tokenService.generateEncryptedToken(authData, process.env.COMPANION_SECRET)
  12. describe('test authentication callback', () => {
  13. test('authentication callback redirects to send-token url', () => {
  14. return request(authServer)
  15. .get('/drive/callback')
  16. .expect(302)
  17. .expect((res) => {
  18. expect(res.header.location).toContain('http://localhost:3020/drive/send-token?uppyAuthToken=')
  19. })
  20. })
  21. test('the token gets sent via cookie and html', () => {
  22. // see mock ../../src/server/helpers/oauth-state above for state values
  23. return request(authServer)
  24. .get(`/dropbox/send-token?uppyAuthToken=${token}&state=state-with-newer-version`)
  25. .expect(200)
  26. .expect((res) => {
  27. const authToken = res.header['set-cookie'][0].split(';')[0].split('uppyAuthToken--dropbox=')[1]
  28. expect(authToken).toEqual(token)
  29. const body = `
  30. <!DOCTYPE html>
  31. <html>
  32. <head>
  33. <meta charset="utf-8" />
  34. <script>
  35. window.opener.postMessage({"token":"${token}"}, "http://localhost:3020")
  36. window.close()
  37. </script>
  38. </head>
  39. <body></body>
  40. </html>`
  41. expect(res.text).toBe(body)
  42. })
  43. })
  44. })