mirror of
https://github.com/meteor/meteor.git
synced 2026-01-09 23:58:19 -05:00
refactor: make logout steps awaitable and ensure user creation follows confirmed logout
This commit is contained in:
@@ -54,26 +54,37 @@ if (Meteor.isClient) (() => {
|
||||
const removeSkipCaseInsensitiveChecksForTest = (value, test, expect) =>
|
||||
Meteor.call('removeSkipCaseInsensitiveChecksForTest', value);
|
||||
|
||||
const createUserStep = function (test, expect) {
|
||||
Meteor.logout(expect(_ => {
|
||||
test.equal(Meteor.user(), null);
|
||||
}));
|
||||
// Make logout steps awaitable so subsequent test steps don't race.
|
||||
const logoutStep = async (test, expect) =>
|
||||
new Promise(resolve => {
|
||||
Meteor.logout(err => {
|
||||
if (err) {
|
||||
// keep original behavior: fail the test if logout errored
|
||||
test.fail(err.message);
|
||||
// still resolve so test runner can continue
|
||||
return resolve();
|
||||
}
|
||||
test.equal(Meteor.user(), null);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
// Create user only after a confirmed logout to avoid races between
|
||||
// tests that do login/logout operations.
|
||||
const createUserStep = async function (test, expect) {
|
||||
// Wait for the logout to complete synchronously.
|
||||
await logoutStep(test, expect);
|
||||
|
||||
// Hack because Tinytest does not clean the database between tests/runs
|
||||
this.randomSuffix = Random.id(10);
|
||||
this.username = `AdaLovelace${ this.randomSuffix }`;
|
||||
this.email = `Ada-intercept@lovelace.com${ this.randomSuffix }`;
|
||||
this.password = 'password';
|
||||
Accounts.createUser(
|
||||
{ username: this.username, email: this.email, password: this.password },
|
||||
loggedInAs(this.username, test, expect));
|
||||
};
|
||||
const logoutStep = (test, expect) =>
|
||||
Meteor.logout(expect(error => {
|
||||
if (error) {
|
||||
test.fail(error.message);
|
||||
}
|
||||
test.equal(Meteor.user(), null);
|
||||
}));
|
||||
|
||||
Accounts.createUser(
|
||||
{ username: this.username, email: this.email, password: this.password },
|
||||
loggedInAs(this.username, test, expect));
|
||||
};
|
||||
const loggedInAs = (someUsername, test, expect) => {
|
||||
return expect(error => {
|
||||
if (error) {
|
||||
@@ -82,18 +93,7 @@ if (Meteor.isClient) (() => {
|
||||
test.equal(Meteor.userId() && Meteor.user().username, someUsername);
|
||||
});
|
||||
};
|
||||
const loggedInUserHasEmail = (someEmail, test, expect) => {
|
||||
return expect(error => {
|
||||
if (error) {
|
||||
test.fail(error.message);
|
||||
}
|
||||
const user = Meteor.user();
|
||||
test.isTrue(user && user.emails.reduce(
|
||||
(prev, email) => prev || email.address === someEmail,
|
||||
false
|
||||
));
|
||||
});
|
||||
};
|
||||
|
||||
const expectError = (expectedError, test, expect) => expect(actualError => {
|
||||
test.equal(actualError && actualError.error, expectedError.error);
|
||||
test.equal(actualError && actualError.reason, expectedError.reason);
|
||||
|
||||
Reference in New Issue
Block a user