UserMembershipViewModelTests.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /* eslint-disable
  2. n/handle-callback-err,
  3. max-len,
  4. no-return-assign,
  5. */
  6. // TODO: This file was created by bulk-decaffeinate.
  7. // Fix any style issues and re-enable lint.
  8. /*
  9. * decaffeinate suggestions:
  10. * DS102: Remove unnecessary code created because of implicit returns
  11. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  12. */
  13. const { expect } = require('chai')
  14. const sinon = require('sinon')
  15. const assertCalledWith = sinon.assert.calledWith
  16. const assertNotCalled = sinon.assert.notCalled
  17. const { ObjectId } = require('mongodb-legacy')
  18. const modulePath =
  19. '../../../../app/src/Features/UserMembership/UserMembershipViewModel'
  20. const SandboxedModule = require('sandboxed-module')
  21. const {
  22. isObjectIdInstance,
  23. normalizeQuery,
  24. } = require('../../../../app/src/Features/Helpers/Mongo')
  25. describe('UserMembershipViewModel', function () {
  26. beforeEach(function () {
  27. this.UserGetter = { getUsers: sinon.stub() }
  28. this.UserMembershipViewModel = SandboxedModule.require(modulePath, {
  29. requires: {
  30. 'mongodb-legacy': { ObjectId },
  31. '../Helpers/Mongo': { isObjectIdInstance, normalizeQuery },
  32. '../User/UserGetter': this.UserGetter,
  33. },
  34. })
  35. this.email = 'mock-email@bar.com'
  36. this.user = {
  37. _id: 'mock-user-id',
  38. email: 'mock-email@baz.com',
  39. first_name: 'Name',
  40. lastLoggedIn: '2020-05-20T10:41:11.407Z',
  41. enrollment: {
  42. managedBy: 'mock-group-id',
  43. enrolledAt: new Date(),
  44. sso: {
  45. groupId: 'abc123abc123',
  46. linkedAt: new Date(),
  47. primary: true,
  48. },
  49. },
  50. }
  51. })
  52. describe('build', function () {
  53. it('build email', function () {
  54. const viewModel = this.UserMembershipViewModel.build(this.email)
  55. return expect(viewModel).to.deep.equal({
  56. email: this.email,
  57. invite: true,
  58. last_active_at: null,
  59. last_logged_in_at: null,
  60. first_name: null,
  61. last_name: null,
  62. _id: null,
  63. enrollment: undefined,
  64. })
  65. })
  66. it('build user', function () {
  67. const viewModel = this.UserMembershipViewModel.build(this.user)
  68. expect(viewModel).to.deep.equal({
  69. email: this.user.email,
  70. invite: false,
  71. last_active_at: this.user.lastLoggedIn,
  72. last_logged_in_at: this.user.lastLoggedIn,
  73. first_name: this.user.first_name,
  74. last_name: null,
  75. _id: this.user._id,
  76. enrollment: this.user.enrollment,
  77. })
  78. })
  79. })
  80. describe('build async', function () {
  81. beforeEach(function () {
  82. return (this.UserMembershipViewModel.build = sinon.stub())
  83. })
  84. it('build email', function (done) {
  85. this.UserGetter.getUsers.yields(null, [])
  86. return this.UserMembershipViewModel.buildAsync(
  87. [this.email],
  88. (error, [viewModel]) => {
  89. assertCalledWith(this.UserMembershipViewModel.build, this.email)
  90. return done()
  91. }
  92. )
  93. })
  94. it('build user', function (done) {
  95. this.UserGetter.getUsers.yields(null, [])
  96. return this.UserMembershipViewModel.buildAsync(
  97. [this.user],
  98. (error, [viewModel]) => {
  99. assertCalledWith(this.UserMembershipViewModel.build, this.user)
  100. return done()
  101. }
  102. )
  103. })
  104. it('build user id', function (done) {
  105. const user = {
  106. ...this.user,
  107. _id: new ObjectId(),
  108. }
  109. this.UserGetter.getUsers.yields(null, [user])
  110. return this.UserMembershipViewModel.buildAsync(
  111. [user._id],
  112. (error, [viewModel]) => {
  113. expect(error).not.to.exist
  114. assertNotCalled(this.UserMembershipViewModel.build)
  115. expect(viewModel._id.toString()).to.equal(user._id.toString())
  116. expect(viewModel.email).to.equal(user.email)
  117. expect(viewModel.first_name).to.equal(user.first_name)
  118. expect(viewModel.invite).to.equal(false)
  119. expect(viewModel.email).to.exist
  120. expect(viewModel.enrollment).to.exist
  121. expect(viewModel.enrollment).to.deep.equal(user.enrollment)
  122. return done()
  123. }
  124. )
  125. })
  126. it('build user id with error', function (done) {
  127. this.UserGetter.getUsers.yields(new Error('nope'), [])
  128. const userId = new ObjectId()
  129. return this.UserMembershipViewModel.buildAsync(
  130. [userId],
  131. (error, [viewModel]) => {
  132. expect(error).not.to.exist
  133. assertNotCalled(this.UserMembershipViewModel.build)
  134. expect(viewModel._id).to.equal(userId.toString())
  135. expect(viewModel.email).not.to.exist
  136. return done()
  137. }
  138. )
  139. })
  140. })
  141. })