Merge pull request #28850 from overleaf/mfb-promisify-user-membership-view-model

Promisify UserMembershipViewModel.js

GitOrigin-RevId: d06b44ca7df65886f420332a1f9fc3d5f9c989af
This commit is contained in:
Maria Florencia Besteiro Gonzalez
2025-10-09 16:58:50 +02:00
committed by Copybot
parent e29de2b881
commit 2bd9ffbd6d
2 changed files with 67 additions and 125 deletions
@@ -1,15 +1,3 @@
/* eslint-disable
n/handle-callback-err,
max-len,
no-return-assign,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
const { expect } = require('chai')
const sinon = require('sinon')
const assertCalledWith = sinon.assert.calledWith
@@ -25,7 +13,7 @@ const {
describe('UserMembershipViewModel', function () {
beforeEach(function () {
this.UserGetter = { getUsers: sinon.stub() }
this.UserGetter = { promises: { getUsers: sinon.stub() } }
this.UserMembershipViewModel = SandboxedModule.require(modulePath, {
requires: {
'mongodb-legacy': { ObjectId },
@@ -54,7 +42,7 @@ describe('UserMembershipViewModel', function () {
describe('build', function () {
it('build email', function () {
const viewModel = this.UserMembershipViewModel.build(this.email)
return expect(viewModel).to.deep.equal({
expect(viewModel).to.deep.equal({
email: this.email,
invite: true,
last_active_at: null,
@@ -83,67 +71,49 @@ describe('UserMembershipViewModel', function () {
describe('build async', function () {
beforeEach(function () {
return (this.UserMembershipViewModel.build = sinon.stub())
this.UserMembershipViewModel.build = sinon.stub()
})
it('build email', function (done) {
this.UserGetter.getUsers.yields(null, [])
return this.UserMembershipViewModel.buildAsync(
[this.email],
(error, [viewModel]) => {
assertCalledWith(this.UserMembershipViewModel.build, this.email)
return done()
}
)
it('build email', async function () {
this.UserGetter.promises.getUsers.resolves([])
await this.UserMembershipViewModel.buildAsync([this.email])
assertCalledWith(this.UserMembershipViewModel.build, this.email)
})
it('build user', function (done) {
this.UserGetter.getUsers.yields(null, [])
return this.UserMembershipViewModel.buildAsync(
[this.user],
(error, [viewModel]) => {
assertCalledWith(this.UserMembershipViewModel.build, this.user)
return done()
}
)
it('build user', async function () {
this.UserGetter.promises.getUsers.resolves([])
await this.UserMembershipViewModel.buildAsync([this.user])
assertCalledWith(this.UserMembershipViewModel.build, this.user)
})
it('build user id', function (done) {
it('build user id', async function () {
const user = {
...this.user,
_id: new ObjectId(),
}
this.UserGetter.getUsers.yields(null, [user])
return this.UserMembershipViewModel.buildAsync(
[user._id],
(error, [viewModel]) => {
expect(error).not.to.exist
assertNotCalled(this.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)
return done()
}
)
this.UserGetter.promises.getUsers.resolves([user])
const [viewModel] = await this.UserMembershipViewModel.buildAsync([
user._id,
])
assertNotCalled(this.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', function (done) {
this.UserGetter.getUsers.yields(new Error('nope'), [])
it('build user id with error', async function () {
this.UserGetter.promises.getUsers.rejects(new Error('nope'))
const userId = new ObjectId()
return this.UserMembershipViewModel.buildAsync(
[userId],
(error, [viewModel]) => {
expect(error).not.to.exist
assertNotCalled(this.UserMembershipViewModel.build)
expect(viewModel._id).to.equal(userId.toString())
expect(viewModel.email).not.to.exist
return done()
}
)
const [viewModel] = await this.UserMembershipViewModel.buildAsync([
userId,
])
assertNotCalled(this.UserMembershipViewModel.build)
expect(viewModel._id).to.equal(userId.toString())
expect(viewModel.email).not.to.exist
})
})
})