diff --git a/src/module/setChartData.js b/src/module/setChartData.js index d8278bb..872b85b 100644 --- a/src/module/setChartData.js +++ b/src/module/setChartData.js @@ -155,6 +155,24 @@ export function timeRange(minTime, maxTime, amount) { timeRange = timeRange.map((value) => Math.round(value)); return timeRange; } +/** + * Cubic Bezier curve formula. + * @param {number} t - The interpolation parameter (0 to 1). + * @param {number} a1 - Control point 1. + * @param {number} a2 - Control point 2. + * @param {number} a3 - Control point 3. + * @param {number} a4 - Control point 4. + * @returns {number} The interpolated value. + */ +function threebsr(t, a1, a2, a3, a4) { + return ( + (1 - t) * (1 - t) * (1 - t) * a1 + + 3 * t * (1 - t) * (1 - t) * a2 + + 3 * t * t * (1 - t) * a3 + + t * t * t * a4 + ); +} + /** * Generates smooth Y-axis values using cubic Bezier interpolation * to produce evenly spaced ticks matching the X-axis divisions. @@ -169,16 +187,6 @@ export function yTimeRange(data, yAmount, yMax) { const yRange = []; const yGap = 1 / (yAmount - 1); - // Cubic Bezier curve formula - const threebsr = function (t, a1, a2, a3, a4) { - return ( - (1 - t) * (1 - t) * (1 - t) * a1 + - 3 * t * (1 - t) * (1 - t) * a2 + - 3 * t * t * (1 - t) * a3 + - t * t * t * a4 - ); - }; - for (let j = 0; j < data.length - 1; j++) { for (let i = 0; i <= 1; i += yGap * 11) { yRange.push( diff --git a/tests/router/routerGuard.test.js b/tests/router/routerGuard.test.js index 77e1a94..2e4b2b5 100644 --- a/tests/router/routerGuard.test.js +++ b/tests/router/routerGuard.test.js @@ -7,6 +7,32 @@ import { describe, it, expect, beforeEach } from "vitest"; import { decodeReturnTo } from "@/utils/returnToEncoding"; import { evaluateAuthNavigation } from "@/router/authGuard"; +// Run the real auth guard decision logic from src/router/authGuard.ts +async function runGuard(to, options = {}) { + const { refreshSucceeds = true } = options; + return evaluateAuthNavigation(to, { + getCookie: (name) => { + const cookieArr = document.cookie.split(";"); + for (const cookie of cookieArr) { + const c = cookie.trim(); + if (c.startsWith(`${name}=`)) { + return c.slice(name.length + 1); + } + } + return null; + }, + refreshSession: async () => { + if (!refreshSucceeds) { + throw new Error("refresh failed"); + } + }, + setLoginMarker: () => { + document.cookie = "isLuciaLoggedIn=true"; + }, + encodeReturnTo: (path) => btoa(path), + }); +} + describe("router beforeEach guard logic", () => { beforeEach(() => { // Clear cookies @@ -18,32 +44,6 @@ describe("router beforeEach guard logic", () => { }); }); - // Run the real auth guard decision logic from src/router/authGuard.ts - async function runGuard(to, options = {}) { - const { refreshSucceeds = true } = options; - return evaluateAuthNavigation(to, { - getCookie: (name) => { - const cookieArr = document.cookie.split(";"); - for (const cookie of cookieArr) { - const c = cookie.trim(); - if (c.startsWith(`${name}=`)) { - return c.slice(name.length + 1); - } - } - return null; - }, - refreshSession: async () => { - if (!refreshSucceeds) { - throw new Error("refresh failed"); - } - }, - setLoginMarker: () => { - document.cookie = "isLuciaLoggedIn=true"; - }, - encodeReturnTo: (path) => btoa(path), - }); - } - it("redirects logged-in user from Login to Files", () => { document.cookie = "isLuciaLoggedIn=true"; document.cookie = "luciaToken=token";