Try to catch unhandled exception (#19360)

This commit is contained in:
Joshua Wehner 2023-05-09 17:10:29 +02:00 committed by GitHub
parent 4d7fcb7359
commit 3097781882
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 6 deletions

View file

@ -1,6 +1,6 @@
import { getUserDataAndCsrfToken } from '@utilities/getUserDataAndCsrfToken';
import { getUserDataAndCsrfTokenSafely } from '@utilities/getUserDataAndCsrfToken';
getUserDataAndCsrfToken().then(({ currentUser }) => {
getUserDataAndCsrfTokenSafely().then(({ currentUser }) => {
const currentUserId = currentUser && currentUser.id;
document.querySelectorAll('.bookmark-button').forEach((button) => {

View file

@ -1,4 +1,7 @@
import { getUserDataAndCsrfToken } from '../getUserDataAndCsrfToken';
import {
getUserDataAndCsrfToken,
getUserDataAndCsrfTokenSafely,
} from '../getUserDataAndCsrfToken';
const ERROR_MESSAGE = "Couldn't find user data on page.";
@ -54,3 +57,16 @@ describe('getUserDataAndCsrfToken', () => {
});
});
});
describe('getUserDataAndCsrfTokenSafely', () => {
afterEach(() => {
document.head.innerHTML = '';
document.body.removeAttribute('data-user');
});
test('should not reject if no user or csrf token found.', async () => {
await expect(getUserDataAndCsrfTokenSafely(document)).resolves.toEqual(
expect.anything(),
);
});
});

View file

@ -4,13 +4,23 @@ export function getCsrfToken() {
return element !== null ? element.content : undefined;
}
const getWaitOnUserDataHandler = ({ resolve, reject, waitTime = 20 }) => {
const getWaitOnUserDataHandler = ({
resolve,
reject,
safe = false,
waitTime = 20,
}) => {
let totalTimeWaiting = 0;
return function waitingOnUserData() {
if (totalTimeWaiting === 3000) {
reject(new Error("Couldn't find user data on page."));
return;
if (!safe) {
reject(new Error("Couldn't find user data on page."));
return;
}
resolve({ user, csrfToken });
return;
}
const csrfToken = getCsrfToken(document);
@ -28,6 +38,13 @@ const getWaitOnUserDataHandler = ({ resolve, reject, waitTime = 20 }) => {
};
};
export function getUserDataAndCsrfTokenSafely() {
return new Promise((resolve, reject) => {
const safe = true;
getWaitOnUserDataHandler({ resolve, reject, safe })();
});
}
export function getUserDataAndCsrfToken() {
return new Promise((resolve, reject) => {
getWaitOnUserDataHandler({ resolve, reject })();