Change eval to getBoolFromString helper
This commit is contained in:
parent
2a7f15df12
commit
a8a959e491
7 changed files with 184 additions and 13 deletions
19
src/helpers/boolean-helper.js
Normal file
19
src/helpers/boolean-helper.js
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
export function getBoolFromString(str) {
|
||||||
|
// Catch edge cases
|
||||||
|
if (str === null || str === undefined) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof str === "boolean") {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof str !== "string") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// string logic
|
||||||
|
const toLower = str?.toLowerCase();
|
||||||
|
|
||||||
|
return toLower === "true";
|
||||||
|
}
|
||||||
146
src/helpers/boolean-helper.spec.js
Normal file
146
src/helpers/boolean-helper.spec.js
Normal file
|
|
@ -0,0 +1,146 @@
|
||||||
|
import { getBoolFromString } from "./boolean-helper";
|
||||||
|
|
||||||
|
describe("getBoolFromString", () => {
|
||||||
|
describe("Happy paths", () => {
|
||||||
|
test("\"true\" -> true", () => {
|
||||||
|
const input = "true";
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("\"false\" -> false", () => {
|
||||||
|
const input = "false";
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("\"other string\" -> false", () => {
|
||||||
|
const input = "some random value";
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("Capitalization", () => {
|
||||||
|
test("\"TRUE\" -> true", () => {
|
||||||
|
const input = "TRUE";
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("\"True\" -> true", () => {
|
||||||
|
const input = "True";
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("\"FALSE\" -> false", () => {
|
||||||
|
const input = "FALSE";
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("\"False\" -> false", () => {
|
||||||
|
const input = "False";
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("Graceful type errors", () => {
|
||||||
|
describe("Boolean", () => {
|
||||||
|
test("true -> true", () => {
|
||||||
|
const input = true;
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("false -> false", () => {
|
||||||
|
const input = false;
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("Empty", () => {
|
||||||
|
test("undefined -> false", () => {
|
||||||
|
const input = undefined;
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("null -> false", () => {
|
||||||
|
const input = null;
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("{} -> false", () => {
|
||||||
|
const input = {};
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("Other types", () => {
|
||||||
|
test("1 -> false", () => {
|
||||||
|
const input = 1;
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("Object -> false", () => {
|
||||||
|
const input = {
|
||||||
|
test: true,
|
||||||
|
true: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("function -> false", () => {
|
||||||
|
const input = () => true;
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("array -> false", () => {
|
||||||
|
const input = [true];
|
||||||
|
|
||||||
|
const output = getBoolFromString(input);
|
||||||
|
|
||||||
|
expect(output).toBe(false);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -156,6 +156,7 @@ import { mapTaxedLineItemsToStoreFormat } from "../../store";
|
||||||
import { coverageStatus } from "@/constants/insurance";
|
import { coverageStatus } from "@/constants/insurance";
|
||||||
import { containsLineItemWithPartType } from "@/helpers/service-package-helper";
|
import { containsLineItemWithPartType } from "@/helpers/service-package-helper";
|
||||||
import { containsRecalParts } from "@/helpers/recal-helper";
|
import { containsRecalParts } from "@/helpers/recal-helper";
|
||||||
|
import { getBoolFromString } from "@/helpers/boolean-helper";
|
||||||
|
|
||||||
defineRule("payment-method-required", required(errorMessages.OPTION_REQUIRED));
|
defineRule("payment-method-required", required(errorMessages.OPTION_REQUIRED));
|
||||||
defineRule("recal-ack-required", required(errorMessages.RECAL_ACK_REQUIRED));
|
defineRule("recal-ack-required", required(errorMessages.RECAL_ACK_REQUIRED));
|
||||||
|
|
@ -429,7 +430,7 @@ export default {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
{
|
{
|
||||||
const log = getQuerystringParameter(queryStrings.LOG);
|
const log = getQuerystringParameter(queryStrings.LOG);
|
||||||
const logAsBool = (log?.toLowerCase() === "true");
|
const logAsBool = getBoolFromString(log);
|
||||||
if (logAsBool || !preReqResult) {
|
if (logAsBool || !preReqResult) {
|
||||||
console.log("------------- payment-method.vue pagePrereqs start -----------------");
|
console.log("------------- payment-method.vue pagePrereqs start -----------------");
|
||||||
console.log(new Date() + " serviceLocationReqs::isMobile: " + isMobile);
|
console.log(new Date() + " serviceLocationReqs::isMobile: " + isMobile);
|
||||||
|
|
@ -786,7 +787,7 @@ export default {
|
||||||
shouldDisplayPiaAlert() {
|
shouldDisplayPiaAlert() {
|
||||||
return (
|
return (
|
||||||
this.$route.query[queryStrings.DISPLAY_PIA_ALERT] ||
|
this.$route.query[queryStrings.DISPLAY_PIA_ALERT] ||
|
||||||
eval(window.history.state.displayPiaAlert)
|
getBoolFromString(window.history.state.displayPiaAlert)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
// Necessary to make the watcher of lineItems work
|
// Necessary to make the watcher of lineItems work
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,7 @@ import { submitWorkOrder } from "@/helpers/heritage-integration/order-helper.js"
|
||||||
import iframeResize from "../../../node_modules/iframe-resizer/js/iframeResizer.js";
|
import iframeResize from "../../../node_modules/iframe-resizer/js/iframeResizer.js";
|
||||||
import { routerParams } from "@/router/router-constants/router-params";
|
import { routerParams } from "@/router/router-constants/router-params";
|
||||||
import { coverageStatus } from "@/constants/insurance";
|
import { coverageStatus } from "@/constants/insurance";
|
||||||
|
import { getBoolFromString } from "@/helpers/boolean-helper.js";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "payment",
|
name: "payment",
|
||||||
|
|
@ -800,7 +801,7 @@ export default {
|
||||||
shouldDisplayPiaAlert(payMethod) {
|
shouldDisplayPiaAlert(payMethod) {
|
||||||
return (
|
return (
|
||||||
this.$route.query[queryStrings.DISPLAY_PIA_ALERT] === payMethod ||
|
this.$route.query[queryStrings.DISPLAY_PIA_ALERT] === payMethod ||
|
||||||
eval(window.history.state.displayPiaAlert)
|
getBoolFromString(window.history.state.displayPiaAlert)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -159,6 +159,7 @@ import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigat
|
||||||
import { containsRecalParts } from "@/helpers/recal-helper";
|
import { containsRecalParts } from "@/helpers/recal-helper";
|
||||||
import { externalParameterStatus } from "@/constants/external-parameters";
|
import { externalParameterStatus } from "@/constants/external-parameters";
|
||||||
import { saveQuote } from "@/helpers/heritage-integration/order-helper.js";
|
import { saveQuote } from "@/helpers/heritage-integration/order-helper.js";
|
||||||
|
import { getBoolFromString } from "@/helpers/boolean-helper";
|
||||||
|
|
||||||
defineRule("option-required", required(errorMessages.OPTION_REQUIRED));
|
defineRule("option-required", required(errorMessages.OPTION_REQUIRED));
|
||||||
|
|
||||||
|
|
@ -298,7 +299,7 @@ export default {
|
||||||
// to restore, uncomment the 2 lines below
|
// to restore, uncomment the 2 lines below
|
||||||
// vm.showSaveProgressPopup = showSaveProgressPopup;
|
// vm.showSaveProgressPopup = showSaveProgressPopup;
|
||||||
// vm.showSaveProgressModal = showSaveProgressModal;
|
// vm.showSaveProgressModal = showSaveProgressModal;
|
||||||
|
|
||||||
vm.addableVaps = addableVaps;
|
vm.addableVaps = addableVaps;
|
||||||
vm.lineItems = lineItems;
|
vm.lineItems = lineItems;
|
||||||
vm.availableLineItems = pricingResults;
|
vm.availableLineItems = pricingResults;
|
||||||
|
|
@ -407,7 +408,7 @@ export default {
|
||||||
baseMixin.methods.ResetExternalParamsAndHideModal();
|
baseMixin.methods.ResetExternalParamsAndHideModal();
|
||||||
} else {
|
} else {
|
||||||
// user came from an external source, however, the externalParms may have been reset on service-zip, property-questions, etc...
|
// user came from an external source, however, the externalParms may have been reset on service-zip, property-questions, etc...
|
||||||
if (eval(store.getters.externalParameterQuote?.isInsurance)) {
|
if (getBoolFromString(store.getters.externalParameterQuote?.isInsurance)) {
|
||||||
// did user intentionally select insurance?
|
// did user intentionally select insurance?
|
||||||
vm.isInsuranceSelected = true;
|
vm.isInsuranceSelected = true;
|
||||||
vm.servicePackage = store.getters.externalParameterQuote.servicePackage;
|
vm.servicePackage = store.getters.externalParameterQuote.servicePackage;
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,7 @@ import { routerParams } from "@/router/router-constants/router-params";
|
||||||
import store from "@/store";
|
import store from "@/store";
|
||||||
import baseMixin from "@/mixins/base-mixin";
|
import baseMixin from "@/mixins/base-mixin";
|
||||||
import { nextTick } from "vue";
|
import { nextTick } from "vue";
|
||||||
|
import { getBoolFromString } from "@/helpers/boolean-helper";
|
||||||
// DEFINE VALIDATION RULES
|
// DEFINE VALIDATION RULES
|
||||||
defineRule("replace-options-required", required(errorMessages.REPLACE_OPTIONS_REQUIRED));
|
defineRule("replace-options-required", required(errorMessages.REPLACE_OPTIONS_REQUIRED));
|
||||||
|
|
||||||
|
|
@ -622,7 +623,7 @@ export default {
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
shouldDisplayVehicleChangeAlert() {
|
shouldDisplayVehicleChangeAlert() {
|
||||||
return eval(window.history.state.displayVehicleChangeAlert);
|
return getBoolFromString(window.history.state.displayVehicleChangeAlert);
|
||||||
},
|
},
|
||||||
shouldHideBackButton() {
|
shouldHideBackButton() {
|
||||||
return this.$store.getters.requiresVerifiedRedirecting;
|
return this.$store.getters.requiresVerifiedRedirecting;
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ import { applicationConfig } from "../constants/application-config";
|
||||||
import { shouldStripPromoQueryString } from "@/helpers/promotions-helper";
|
import { shouldStripPromoQueryString } from "@/helpers/promotions-helper";
|
||||||
import bailout from "@/layouts/bailout/bailout";
|
import bailout from "@/layouts/bailout/bailout";
|
||||||
import { nextTick } from "vue";
|
import { nextTick } from "vue";
|
||||||
|
import { getBoolFromString } from "@/helpers/boolean-helper";
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
|
|
@ -57,7 +58,7 @@ const routes = [
|
||||||
log(` --from.redirectedFrom:>${JSON.stringify(from.redirectedFrom)}<`, "");
|
log(` --from.redirectedFrom:>${JSON.stringify(from.redirectedFrom)}<`, "");
|
||||||
|
|
||||||
await analyticsMixin.methods.validateSession();
|
await analyticsMixin.methods.validateSession();
|
||||||
|
|
||||||
// after session is validated, remove the fromHeritage querystring if it exists so session expiration works
|
// after session is validated, remove the fromHeritage querystring if it exists so session expiration works
|
||||||
if (to.query) {
|
if (to.query) {
|
||||||
delete to.query[queryStrings.FROM_HERITAGE];
|
delete to.query[queryStrings.FROM_HERITAGE];
|
||||||
|
|
@ -178,8 +179,9 @@ const routes = [
|
||||||
// clear part related state because heritage selected a new vehicle
|
// clear part related state because heritage selected a new vehicle
|
||||||
if (
|
if (
|
||||||
to.query.fmgPage === fmgPageValues.VEHICLE &&
|
to.query.fmgPage === fmgPageValues.VEHICLE &&
|
||||||
eval(getFunnelCookie()?.HasDelayedClaimRegistration &&
|
getBoolFromString(
|
||||||
!fromReturnUser)
|
getFunnelCookie()?.HasDelayedClaimRegistration && !fromReturnUser
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
store.commit(storeMutations.RESET_GLASS_PARTS_STATE);
|
store.commit(storeMutations.RESET_GLASS_PARTS_STATE);
|
||||||
}
|
}
|
||||||
|
|
@ -187,7 +189,7 @@ const routes = [
|
||||||
// if coming from the return user page, clear the destination page so implicit navigation runs
|
// if coming from the return user page, clear the destination page so implicit navigation runs
|
||||||
log(" --to.query ", JSON.stringify(to.query));
|
log(" --to.query ", JSON.stringify(to.query));
|
||||||
if (fromReturnUser && to.query) {
|
if (fromReturnUser && to.query) {
|
||||||
log( " --clear to.query");
|
log(" --clear to.query");
|
||||||
delete to.query[queryStrings.FMG_PAGE];
|
delete to.query[queryStrings.FMG_PAGE];
|
||||||
|
|
||||||
//to.query[queryStrings.FMG_PAGE] = "";
|
//to.query[queryStrings.FMG_PAGE] = "";
|
||||||
|
|
@ -427,7 +429,7 @@ router.afterEach(async (to, from) => {
|
||||||
store.commit(storeMutations.UPDATE_LAST_PAGE_VISITED, to.name);
|
store.commit(storeMutations.UPDATE_LAST_PAGE_VISITED, to.name);
|
||||||
|
|
||||||
// If saving on navigation is requested, check for saved SessionId or EmailAddress to determine if saving is appropriate
|
// If saving on navigation is requested, check for saved SessionId or EmailAddress to determine if saving is appropriate
|
||||||
if (eval(window.history.state.isSavingNavigation)) {
|
if (getBoolFromString(window.history.state.isSavingNavigation)) {
|
||||||
if (
|
if (
|
||||||
store.getters.applicationUser.savedSessionId ||
|
store.getters.applicationUser.savedSessionId ||
|
||||||
store.getters.order.customer?.emailAddress
|
store.getters.order.customer?.emailAddress
|
||||||
|
|
@ -571,7 +573,7 @@ async function navigate(
|
||||||
const pageError = getQuerystringParameter(queryStrings.PAGE_ERROR);
|
const pageError = getQuerystringParameter(queryStrings.PAGE_ERROR);
|
||||||
const logQs = getQuerystringParameter(queryStrings.LOG);
|
const logQs = getQuerystringParameter(queryStrings.LOG);
|
||||||
baseMixin.methods.dispatchStoreAction(storeActions.SAVE_LOGGING_OPTION, logQs, false);
|
baseMixin.methods.dispatchStoreAction(storeActions.SAVE_LOGGING_OPTION, logQs, false);
|
||||||
|
|
||||||
log("------------- router index.js navigate start -----------------");
|
log("------------- router index.js navigate start -----------------");
|
||||||
log(" --scenario: ", scenario);
|
log(" --scenario: ", scenario);
|
||||||
log(" --isSavingNavigation: ", isSavingNavigation);
|
log(" --isSavingNavigation: ", isSavingNavigation);
|
||||||
|
|
@ -636,7 +638,7 @@ function getNavigationMap(scenario, currentRoute) {
|
||||||
function log(message, data) {
|
function log(message, data) {
|
||||||
const log = getQuerystringParameter(queryStrings.LOG);
|
const log = getQuerystringParameter(queryStrings.LOG);
|
||||||
baseMixin.methods.dispatchStoreAction(storeActions.SAVE_LOGGING_OPTION, log, false);
|
baseMixin.methods.dispatchStoreAction(storeActions.SAVE_LOGGING_OPTION, log, false);
|
||||||
|
|
||||||
data = data ?? "";
|
data = data ?? "";
|
||||||
const outData = typeof data === "object" ? JSON.stringify(data) : data;
|
const outData = typeof data === "object" ? JSON.stringify(data) : data;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue