mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-06-05 15:19:02 +02:00
beb6f6d484
[web] last features esm conversion GitOrigin-RevId: a35ab995bf654f1cdfe0e0062d8806761ecccf2d
126 lines
3.9 KiB
JavaScript
126 lines
3.9 KiB
JavaScript
import { vi, expect } from 'vitest'
|
|
import sinon from 'sinon'
|
|
import mongodb from 'mongodb-legacy'
|
|
import MongoHelpers from '../../../../app/src/Features/Helpers/Mongo.mjs'
|
|
|
|
const assertCalledWith = sinon.assert.calledWith
|
|
const assertNotCalled = sinon.assert.notCalled
|
|
|
|
const { isObjectIdInstance, normalizeQuery } = MongoHelpers
|
|
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', () => ({
|
|
default: { 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
|
|
})
|
|
})
|
|
})
|