provider-manager.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /* global jest:false, test:false, expect:false, describe:false, beforeEach:false */
  2. const providerManager = require('../../src/server/provider')
  3. const { getCompanionOptions } = require('../../src/standalone/helper')
  4. let grantConfig
  5. let companionOptions
  6. describe('Test Provider options', () => {
  7. beforeEach(() => {
  8. grantConfig = require('../../src/config/grant')()
  9. companionOptions = getCompanionOptions()
  10. })
  11. test('adds provider options', () => {
  12. providerManager.addProviderOptions(companionOptions, grantConfig)
  13. expect(grantConfig.dropbox.key).toBe('dropbox_key')
  14. expect(grantConfig.dropbox.secret).toBe('dropbox_secret')
  15. expect(grantConfig.google.key).toBe('google_key')
  16. expect(grantConfig.google.secret).toBe('google_secret')
  17. expect(grantConfig.instagram.key).toBe('instagram_key')
  18. expect(grantConfig.instagram.secret).toBe('instagram_secret')
  19. })
  20. test('adds extra provider config', () => {
  21. process.env.COMPANION_INSTAGRAM_KEY = '123456'
  22. providerManager.addProviderOptions(getCompanionOptions(), grantConfig)
  23. expect(grantConfig.instagram).toEqual({
  24. transport: 'session',
  25. callback: '/instagram/callback',
  26. redirect_uri: 'http://localhost:3020/instagram/redirect',
  27. key: '123456',
  28. secret: 'instagram_secret',
  29. protocol: 'https',
  30. scope: ['user_profile', 'user_media']
  31. })
  32. expect(grantConfig.dropbox).toEqual({
  33. key: 'dropbox_key',
  34. secret: 'dropbox_secret',
  35. transport: 'session',
  36. redirect_uri: 'http://localhost:3020/dropbox/redirect',
  37. authorize_url: 'https://www.dropbox.com/oauth2/authorize',
  38. access_url: 'https://api.dropbox.com/oauth2/token',
  39. callback: '/dropbox/callback'
  40. })
  41. expect(grantConfig.google).toEqual({
  42. key: 'google_key',
  43. secret: 'google_secret',
  44. transport: 'session',
  45. redirect_uri: 'http://localhost:3020/drive/redirect',
  46. scope: [
  47. 'https://www.googleapis.com/auth/drive.readonly'
  48. ],
  49. callback: '/drive/callback'
  50. })
  51. })
  52. test('adds provider options for secret files', () => {
  53. process.env.COMPANION_DROPBOX_SECRET_FILE = process.env.PWD + '/test/resources/dropbox_secret_file'
  54. process.env.COMPANION_GOOGLE_SECRET_FILE = process.env.PWD + '/test/resources/google_secret_file'
  55. process.env.COMPANION_INSTAGRAM_SECRET_FILE = process.env.PWD + '/test/resources/instagram_secret_file'
  56. companionOptions = getCompanionOptions()
  57. providerManager.addProviderOptions(companionOptions, grantConfig)
  58. expect(grantConfig.dropbox.secret).toBe('xobpord')
  59. expect(grantConfig.google.secret).toBe('elgoog')
  60. expect(grantConfig.instagram.secret).toBe('margatsni')
  61. })
  62. test('does not add provider options if protocol and host are not set', () => {
  63. delete companionOptions.server.host
  64. delete companionOptions.server.protocol
  65. providerManager.addProviderOptions(companionOptions, grantConfig)
  66. expect(grantConfig.dropbox.key).toBeUndefined()
  67. expect(grantConfig.dropbox.secret).toBeUndefined()
  68. expect(grantConfig.google.key).toBeUndefined()
  69. expect(grantConfig.google.secret).toBeUndefined()
  70. expect(grantConfig.instagram.key).toBeUndefined()
  71. expect(grantConfig.instagram.secret).toBeUndefined()
  72. })
  73. test('sets a master redirect uri, if oauthDomain is set', () => {
  74. companionOptions.server.oauthDomain = 'domain.com'
  75. providerManager.addProviderOptions(companionOptions, grantConfig)
  76. expect(grantConfig.dropbox.redirect_uri).toBe('http://domain.com/dropbox/redirect')
  77. expect(grantConfig.google.redirect_uri).toBe('http://domain.com/drive/redirect')
  78. expect(grantConfig.instagram.redirect_uri).toBe('http://domain.com/instagram/redirect')
  79. })
  80. })
  81. describe('Test Custom Provider options', () => {
  82. test('adds custom provider options', () => {
  83. const providers = providerManager.getDefaultProviders()
  84. providerManager.addCustomProviders({
  85. foo: {
  86. config: {
  87. key: 'foo_key',
  88. secret: 'foo_secret'
  89. },
  90. module: jest.mock()
  91. }
  92. }, providers, grantConfig)
  93. expect(grantConfig.foo.key).toBe('foo_key')
  94. expect(grantConfig.foo.secret).toBe('foo_secret')
  95. expect(providers.foo).toBeTruthy()
  96. })
  97. })