Better e-mail adapter testing (#2208)

This commit is contained in:
Tyler Brock
2016-07-05 12:08:46 -07:00
committed by GitHub
parent 48b33d3889
commit 2f2ff377eb
3 changed files with 97 additions and 8 deletions

View File

@@ -393,6 +393,94 @@ describe("Custom Pages, Email Verification, Password Reset", () => {
}); });
}); });
it_exclude_dbs(['postgres'])('fails if you include an emailAdapter, have an appName, but have no publicServerURL and send a password reset email', done => {
reconfigureServer({
appName: undefined,
emailAdapter: MockEmailAdapterWithOptions({
fromAddress: 'parse@example.com',
apiKey: 'k',
domain: 'd',
}),
})
.then(() => {
let user = new Parse.User();
user.setPassword("asdf");
user.setUsername("zxcv");
user.set("email", "testInvalidConfig@parse.com");
user.signUp(null)
.then(user => Parse.User.requestPasswordReset("testInvalidConfig@parse.com"))
.then(result => {
console.log(result);
fail('sending password reset email should not have succeeded');
done();
}, error => {
expect(error.message).toEqual('An appName, publicServerURL, and emailAdapter are required for password reset functionality.')
done();
});
})
.catch(error => {
fail(JSON.stringify(error));
done();
});
});
it_exclude_dbs(['postgres'])('fails if you set a publicServerURL, have an appName, but no emailAdapter and send a password reset email', done => {
reconfigureServer({
appName: 'unused',
publicServerURL: 'http://localhost:1337/1',
emailAdapter: undefined,
})
.then(() => {
let user = new Parse.User();
user.setPassword("asdf");
user.setUsername("zxcv");
user.set("email", "testInvalidConfig@parse.com");
user.signUp(null)
.then(user => Parse.User.requestPasswordReset("testInvalidConfig@parse.com"))
.then(result => {
console.log(result);
fail('sending password reset email should not have succeeded');
done();
}, error => {
expect(error.message).toEqual('An appName, publicServerURL, and emailAdapter are required for password reset functionality.')
done();
});
})
.catch(error => {
fail(JSON.stringify(error));
done();
});
});
it_exclude_dbs(['postgres'])('succeeds sending a password reset email if appName, publicServerURL, and email adapter are prodvided', done => {
reconfigureServer({
appName: 'coolapp',
publicServerURL: 'http://localhost:1337/1',
emailAdapter: MockEmailAdapterWithOptions({
fromAddress: 'parse@example.com',
apiKey: 'k',
domain: 'd',
}),
})
.then(() => {
let user = new Parse.User();
user.setPassword("asdf");
user.setUsername("zxcv");
user.set("email", "testInvalidConfig@parse.com");
user.signUp(null)
.then(user => Parse.User.requestPasswordReset("testInvalidConfig@parse.com"))
.then(result => {
done();
}, error => {
done(error);
});
})
.catch(error => {
fail(JSON.stringify(error));
done();
});
});
it('does not send verification email if email verification is disabled', done => { it('does not send verification email if email verification is disabled', done => {
var emailAdapter = { var emailAdapter = {
sendVerificationEmail: () => Promise.resolve(), sendVerificationEmail: () => Promise.resolve(),

View File

@@ -83,13 +83,14 @@ export class Config {
} }
static validateEmailConfiguration({emailAdapter, appName, publicServerURL}) { static validateEmailConfiguration({emailAdapter, appName, publicServerURL}) {
if (emailAdapter) { if (!emailAdapter) {
if (typeof appName !== 'string') { throw 'An emailAdapter is required for e-mail verification and password resets.';
throw 'An app name is required for e-mail verification and password resets.'; }
} if (typeof appName !== 'string') {
if (typeof publicServerURL !== 'string') { throw 'An app name is required for e-mail verification and password resets.';
throw 'A public server url is required for e-mail verification and password resets.'; }
} if (typeof publicServerURL !== 'string') {
throw 'A public server url is required for e-mail verification and password resets.';
} }
} }

View File

@@ -163,7 +163,7 @@ export class UsersRouter extends ClassesRouter {
handleResetRequest(req) { handleResetRequest(req) {
try { try {
Config.validateEmailConfiguration({ Config.validateEmailConfiguration({
emailAdapter: req.config.userController, emailAdapter: req.config.userController.adapter,
appName: req.config.appName, appName: req.config.appName,
publicServerURL: req.config.publicServerURL, publicServerURL: req.config.publicServerURL,
}); });