3a1f3af6a4
* Rename files to mjs * Migrate files to ESM * Fix imports * Misc. fixes: Fixup InsititutionsAPI import, ObjectId import, ... * Rename test files to mjs * Convert test files to ESM * Fix tests * Update UserMembershipErrors imports * Convert some tests: sinon -> vitest * Fixup UserMembershipHandler.test.mjs * Convert UserMembershipErrors to ESM GitOrigin-RevId: 05d34c7e112a567f9c59398740ae0830ef93d32f
129 lines
3.9 KiB
JavaScript
129 lines
3.9 KiB
JavaScript
import { vi, expect } from 'vitest'
|
|
import sinon from 'sinon'
|
|
import mongodb from 'mongodb-legacy'
|
|
import {
|
|
isObjectIdInstance,
|
|
normalizeQuery,
|
|
} from '../../../../app/src/Features/Helpers/Mongo.js'
|
|
|
|
const assertCalledWith = sinon.assert.calledWith
|
|
const assertNotCalled = sinon.assert.notCalled
|
|
|
|
const { ObjectId } = mongodb
|
|
|
|
const modulePath =
|
|
'../../../../app/src/Features/UserMembership/UserMembershipViewModel'
|
|
|
|
describe('UserMembershipViewModel', function () {
|
|
beforeEach(async function (ctx) {
|
|
ctx.UserGetter = { promises: { getUsers: sinon.stub() } }
|
|
|
|
vi.doMock('mongodb-legacy', () => ({
|
|
default: { ObjectId },
|
|
}))
|
|
|
|
vi.doMock('../../../../app/src/Features/Helpers/Mongo', () => ({
|
|
isObjectIdInstance,
|
|
normalizeQuery,
|
|
}))
|
|
|
|
vi.doMock('../../../../app/src/Features/User/UserGetter', () => ({
|
|
default: ctx.UserGetter,
|
|
}))
|
|
|
|
ctx.UserMembershipViewModel = (await import(modulePath)).default
|
|
ctx.email = 'mock-email@bar.com'
|
|
ctx.user = {
|
|
_id: 'mock-user-id',
|
|
email: 'mock-email@baz.com',
|
|
first_name: 'Name',
|
|
lastLoggedIn: '2020-05-20T10:41:11.407Z',
|
|
enrollment: {
|
|
managedBy: 'mock-group-id',
|
|
enrolledAt: new Date(),
|
|
sso: {
|
|
groupId: 'abc123abc123',
|
|
linkedAt: new Date(),
|
|
primary: true,
|
|
},
|
|
},
|
|
}
|
|
})
|
|
|
|
describe('build', function () {
|
|
it('build email', function (ctx) {
|
|
const viewModel = ctx.UserMembershipViewModel.build(ctx.email)
|
|
expect(viewModel).to.deep.equal({
|
|
email: ctx.email,
|
|
invite: true,
|
|
last_active_at: null,
|
|
last_logged_in_at: null,
|
|
first_name: null,
|
|
last_name: null,
|
|
_id: null,
|
|
enrollment: undefined,
|
|
})
|
|
})
|
|
|
|
it('build user', function (ctx) {
|
|
const viewModel = ctx.UserMembershipViewModel.build(ctx.user)
|
|
expect(viewModel).to.deep.equal({
|
|
email: ctx.user.email,
|
|
invite: false,
|
|
last_active_at: ctx.user.lastLoggedIn,
|
|
last_logged_in_at: ctx.user.lastLoggedIn,
|
|
first_name: ctx.user.first_name,
|
|
last_name: null,
|
|
_id: ctx.user._id,
|
|
enrollment: ctx.user.enrollment,
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('build async', function () {
|
|
beforeEach(function (ctx) {
|
|
ctx.UserMembershipViewModel.build = sinon.stub()
|
|
})
|
|
|
|
it('build email', async function (ctx) {
|
|
ctx.UserGetter.promises.getUsers.resolves([])
|
|
await ctx.UserMembershipViewModel.buildAsync([ctx.email])
|
|
assertCalledWith(ctx.UserMembershipViewModel.build, ctx.email)
|
|
})
|
|
|
|
it('build user', async function (ctx) {
|
|
ctx.UserGetter.promises.getUsers.resolves([])
|
|
await ctx.UserMembershipViewModel.buildAsync([ctx.user])
|
|
assertCalledWith(ctx.UserMembershipViewModel.build, ctx.user)
|
|
})
|
|
|
|
it('build user id', async function (ctx) {
|
|
const user = {
|
|
...ctx.user,
|
|
_id: new ObjectId(),
|
|
}
|
|
ctx.UserGetter.promises.getUsers.resolves([user])
|
|
const [viewModel] = await ctx.UserMembershipViewModel.buildAsync([
|
|
user._id,
|
|
])
|
|
assertNotCalled(ctx.UserMembershipViewModel.build)
|
|
expect(viewModel._id.toString()).to.equal(user._id.toString())
|
|
expect(viewModel.email).to.equal(user.email)
|
|
expect(viewModel.first_name).to.equal(user.first_name)
|
|
expect(viewModel.invite).to.equal(false)
|
|
expect(viewModel.email).to.exist
|
|
expect(viewModel.enrollment).to.exist
|
|
expect(viewModel.enrollment).to.deep.equal(user.enrollment)
|
|
})
|
|
|
|
it('build user id with error', async function (ctx) {
|
|
ctx.UserGetter.promises.getUsers.rejects(new Error('nope'))
|
|
const userId = new ObjectId()
|
|
const [viewModel] = await ctx.UserMembershipViewModel.buildAsync([userId])
|
|
assertNotCalled(ctx.UserMembershipViewModel.build)
|
|
expect(viewModel._id).to.equal(userId.toString())
|
|
expect(viewModel.email).not.to.exist
|
|
})
|
|
})
|
|
})
|