Skip to content

Commit c38fe6e

Browse files
committed
fix 1774: changed account manager error checking, changed loadUser function to properly render html, updated unit test
1 parent 88d3a86 commit c38fe6e

File tree

3 files changed

+25
-6
lines changed

3 files changed

+25
-6
lines changed

lib/models/account-manager.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@ class AccountManager {
537537
throw new Error('Email service is not set up')
538538
}
539539

540-
if (!userAccount.email) {
540+
if (userAccount && !userAccount.email) {
541541
throw new Error('Account recovery email has not been provided')
542542
}
543543
}

lib/requests/password-reset-email-request.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,15 @@ class PasswordResetEmailRequest extends AuthRequest {
123123
return this.accountManager.accountExists(username)
124124
.then(exists => {
125125
if (!exists) {
126-
throw new Error('Account not found for that username')
126+
try {
127+
const userAccount = this.accountManager.userAccountFrom({ username })
128+
this.accountManager.verifyEmailDependencies(userAccount)
129+
} catch (err) {
130+
console.log(err.message)
131+
if (err.message === 'Account recovery email has not been provided') {
132+
return this.renderSuccess()
133+
}
134+
}
127135
}
128136

129137
const userData = { username }

test/unit/password-reset-email-request-test.js

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const HttpMocks = require('node-mocks-http')
1414
const PasswordResetEmailRequest = require('../../lib/requests/password-reset-email-request')
1515
const AccountManager = require('../../lib/models/account-manager')
1616
const SolidHost = require('../../lib/models/solid-host')
17+
const EmailService = require('../../lib/services/email-service')
1718

1819
describe('PasswordResetEmailRequest', () => {
1920
describe('constructor()', () => {
@@ -175,16 +176,26 @@ describe('PasswordResetEmailRequest', () => {
175176
it('should throw an error if the user does not exist', done => {
176177
const host = SolidHost.from({ serverUri: 'https://example.com' })
177178
const store = { suffixAcl: '.acl' }
178-
const accountManager = AccountManager.from({ host, multiuser: true, store })
179+
const emailService = sinon.stub().returns(EmailService)
180+
const accountManager = AccountManager.from({ host, multiuser: true, store, emailService })
179181
accountManager.accountExists = sinon.stub().resolves(false)
180182
const username = 'alice'
181-
182183
const options = { accountManager, username }
183184
const request = new PasswordResetEmailRequest(options)
184185

186+
sinon.spy(request, 'renderSuccess')
187+
sinon.spy(accountManager, 'userAccountFrom')
188+
sinon.spy(accountManager, 'verifyEmailDependencies')
189+
185190
request.loadUser()
186-
.catch(error => {
187-
expect(error.message).to.equal('Account not found for that username')
191+
.then(() => {
192+
expect(accountManager.userAccountFrom).to.have.been.called()
193+
expect(accountManager.verifyEmailDependencies).to.have.been.called()
194+
expect(accountManager.verifyEmailDependencies).to.throw()
195+
done()
196+
})
197+
.catch(() => {
198+
expect(request.renderSuccess).to.have.been.called()
188199
done()
189200
})
190201
})

0 commit comments

Comments
 (0)