From 1277d804b1f6be90e7f0b5016d8304a923838f10 Mon Sep 17 00:00:00 2001 From: CD Cabrera Date: Wed, 8 Jan 2020 12:03:16 -0500 Subject: [PATCH] fix(userServices): issues/159 emulate response error * user auth, emulate a response for app level error handling --- .../__snapshots__/userServices.test.js.snap | 15 ++++++++++-- src/services/userServices.js | 24 ++++++++++++------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/services/__tests__/__snapshots__/userServices.test.js.snap b/src/services/__tests__/__snapshots__/userServices.test.js.snap index 382e13b00..44e962809 100644 --- a/src/services/__tests__/__snapshots__/userServices.test.js.snap +++ b/src/services/__tests__/__snapshots__/userServices.test.js.snap @@ -1,6 +1,11 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`UserServices should return a failed authorized user: failed authorized user 1`] = `[Error: { getUser } = insights.chrome.auth]`; +exports[`UserServices should return a failed authorized user: failed authorized user 1`] = ` +Object { + "message": "{ getUser } = insights.chrome.auth", + "status": 418, +} +`; exports[`UserServices should return a specific locale cookie value 1`] = ` Object { @@ -11,7 +16,13 @@ Object { } `; -exports[`UserServices should return a successful authorized user: success authorized user 1`] = `"lorem ipsum"`; +exports[`UserServices should return a successful authorized user: success authorized user 1`] = ` +Object { + "data": "lorem ipsum", + "message": "{ getUser } = insights.chrome.auth", + "status": 200, +} +`; exports[`UserServices should return default locale if no locale cookie is present 1`] = ` Object { diff --git a/src/services/userServices.js b/src/services/userServices.js index b721f683d..5edadd45e 100644 --- a/src/services/userServices.js +++ b/src/services/userServices.js @@ -2,26 +2,34 @@ import Cookies from 'js-cookie'; import LocaleCode from 'locale-code'; import { helpers } from '../common/helpers'; +/** + * Emulate service response http status to aid in error handling. + * @returns {Promise<{statusText: string, message: string, status: number}>} + */ const authorizeUser = async () => { + const response = { + status: 418, + message: '{ getUser } = insights.chrome.auth' + }; let getUserData = (helpers.TEST_MODE || helpers.DEV_MODE) && {}; - let platformResponse; if (!helpers.DEV_MODE && window.insights && window.insights.chrome.auth.getUser) { getUserData = await window.insights.chrome.auth.getUser(); } /** - * ToDo: evaluate this periodically, expecting specific platform behavior, this could be simplified - * Basic check for missing user data. Allowing GUI auth to pass in those cases affects our API - * auth for RHSM, so we block it. + * ToDo: evaluate this periodically, expecting specific platform behavior. + * Basic check for missing user data. Allowing GUI auth to pass with missing data affects our API + * auth for RHSM, so we block it. An additional, more specific, check for "account_number" may be needed. */ if (getUserData) { - platformResponse = Promise.resolve(getUserData); - } else { - platformResponse = Promise.reject(new Error('{ getUser } = insights.chrome.auth')); + response.status = 200; + response.data = getUserData; + return Promise.resolve(response); } - return platformResponse; + const emulatedError = { ...new Error('{ getUser } = insights.chrome.auth'), ...response }; + return Promise.reject(emulatedError); }; const getLocaleFromCookie = () => {