UserThirdPartyIdentityTests.coffee 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. Errors = require "../../../app/js/Features/Errors/Errors"
  2. Settings = require "settings-sharelatex"
  3. User = require "./helpers/User"
  4. ThirdPartyIdentityManager = require "../../../app/js/Features/User/ThirdPartyIdentityManager"
  5. chai = require "chai"
  6. expect = chai.expect
  7. describe "ThirdPartyIdentityManager", ->
  8. beforeEach (done) ->
  9. @provider = "provider"
  10. @externalUserId = "external-user-id"
  11. @externalData = test: "data"
  12. @user = new User()
  13. @user.ensureUserExists done
  14. afterEach (done) ->
  15. @user.full_delete_user @user.email, done
  16. describe "login", ->
  17. describe "when third party identity exists", ->
  18. beforeEach (done) ->
  19. ThirdPartyIdentityManager.link @user.id, @provider, @externalUserId, @externalData, done
  20. it "should return user", (done) ->
  21. ThirdPartyIdentityManager.login @provider, @externalUserId, @externalData, (err, user) =>
  22. expect(err).to.be.null
  23. expect(user._id.toString()).to.equal @user.id
  24. done()
  25. return
  26. it "should merge external data", (done) ->
  27. @externalData =
  28. test: "different"
  29. another: "key"
  30. ThirdPartyIdentityManager.login @provider, @externalUserId, @externalData, (err, user) =>
  31. expect(err).to.be.null
  32. expect(user.thirdPartyIdentifiers[0].externalData).to.deep.equal @externalData
  33. done()
  34. return
  35. describe "when third party identity does not exists", ->
  36. it "should return error", (done) ->
  37. ThirdPartyIdentityManager.login @provider, @externalUserId, @externalData, (err, user) =>
  38. expect(err.name).to.equal "ThirdPartyUserNotFoundError"
  39. done()
  40. return
  41. describe "link", ->
  42. describe "when provider not already linked", ->
  43. it "should link provider to user", (done) ->
  44. ThirdPartyIdentityManager.link @user.id, @provider, @externalUserId, @externalData, (err, res) ->
  45. expect(res.nModified).to.equal 1
  46. done()
  47. describe "when provider is already linked", ->
  48. beforeEach (done) ->
  49. ThirdPartyIdentityManager.link @user.id, @provider, @externalUserId, @externalData, done
  50. it "should link provider to user", (done) ->
  51. ThirdPartyIdentityManager.link @user.id, @provider, @externalUserId, @externalData, (err, res) ->
  52. expect(res.nModified).to.equal 1
  53. done()
  54. it "should not create duplicate thirdPartyIdentifiers", (done) ->
  55. ThirdPartyIdentityManager.link @user.id, @provider, @externalUserId, @externalData, (err, res) =>
  56. @user.get (err, user) ->
  57. expect(user.thirdPartyIdentifiers.length).to.equal 1
  58. done()
  59. it "should replace existing data", (done) ->
  60. @externalData = replace: "data"
  61. ThirdPartyIdentityManager.link @user.id, @provider, @externalUserId, @externalData, (err, res) =>
  62. @user.get (err, user) =>
  63. expect(user.thirdPartyIdentifiers[0].externalData).to.deep.equal @externalData
  64. done()
  65. describe "unlink", ->
  66. describe "when provider not already linked", ->
  67. it "should succeed", (done) ->
  68. ThirdPartyIdentityManager.unlink @user.id, @provider, (err, res) ->
  69. expect(err).to.be.null
  70. expect(res.nModified).to.equal 0
  71. done()
  72. describe "when provider is already linked", ->
  73. beforeEach (done) ->
  74. ThirdPartyIdentityManager.link @user.id, @provider, @externalUserId, @externalData, done
  75. it "should remove thirdPartyIdentifiers entry", (done) ->
  76. ThirdPartyIdentityManager.unlink @user.id, @provider, (err, res) =>
  77. @user.get (err, user) ->
  78. expect(user.thirdPartyIdentifiers.length).to.equal 0
  79. done()