From c47851ba41e8fa15627839f0109b7f854b19e93f Mon Sep 17 00:00:00 2001 From: Vincent BONMARCHAND Date: Wed, 9 Oct 2024 14:51:37 +0200 Subject: [PATCH] fix(kms): keep data after unmount component on credential creation ref: MANAGER-15319 Signed-off-by: Vincent BONMARCHAND --- .../create/CreateCredential.page.tsx | 3 + .../CreateGeneralInformations.component.tsx | 5 +- .../CreateGeneralInformationsValidity.tsx | 14 ++++- .../credential/validityDateUtils.spec.ts | 57 ++++++++++++++++++- .../src/utils/credential/validityDateUtils.ts | 7 +++ 5 files changed, 79 insertions(+), 7 deletions(-) diff --git a/packages/manager/apps/key-management-service/src/pages/credential/create/CreateCredential.page.tsx b/packages/manager/apps/key-management-service/src/pages/credential/create/CreateCredential.page.tsx index 3e0cbdbe345e..bdd13278305b 100644 --- a/packages/manager/apps/key-management-service/src/pages/credential/create/CreateCredential.page.tsx +++ b/packages/manager/apps/key-management-service/src/pages/credential/create/CreateCredential.page.tsx @@ -31,6 +31,7 @@ const CreateCredential = () => { const [csr, setCsr] = useState(null); const [identityURNs, setIdentityURNs] = useState([]); const [okmsCredential, setOkmsCredential] = useState(); + const [isCustomCsr, setIsCustomCsr] = useState(false); const { createKmsCredential } = useCreateOkmsCredential({ okmsId, onSuccess: (credential) => { @@ -102,6 +103,8 @@ const CreateCredential = () => { setDescription={setDescription} csr={csr} setCsr={setCsr} + isCustomCsr={isCustomCsr} + setIsCustomCsr={setIsCustomCsr} nextStep={() => setStep(2)} /> )} diff --git a/packages/manager/apps/key-management-service/src/pages/credential/create/CreateGeneralInformations.component.tsx b/packages/manager/apps/key-management-service/src/pages/credential/create/CreateGeneralInformations.component.tsx index 3bd53f0c1e05..737366c2a7a9 100644 --- a/packages/manager/apps/key-management-service/src/pages/credential/create/CreateGeneralInformations.component.tsx +++ b/packages/manager/apps/key-management-service/src/pages/credential/create/CreateGeneralInformations.component.tsx @@ -25,6 +25,8 @@ type CreateGeneralInformationsProps = { setDescription: Dispatch>; csr: string | null; setCsr: Dispatch>; + isCustomCsr: boolean; + setIsCustomCsr: Dispatch>; nextStep: () => void; }; @@ -37,6 +39,8 @@ const CreateGeneralInformations = ({ setDescription, csr, setCsr, + isCustomCsr, + setIsCustomCsr, nextStep, }: CreateGeneralInformationsProps) => { const { t } = useTranslation('key-management-service/credential'); @@ -46,7 +50,6 @@ const CreateGeneralInformations = ({ const credentialDescriptionError = validateCredentialDescription(description); const credentialValidityError = validateValidityDate(validity); const credentialCreationMethodError = validateCredentialCreationMethod(csr); - const [isCustomCsr, setIsCustomCsr] = useState(false); useEffect(() => { if (!isCustomCsr) { diff --git a/packages/manager/apps/key-management-service/src/pages/credential/create/generalInformations/CreateGeneralInformationsValidity.tsx b/packages/manager/apps/key-management-service/src/pages/credential/create/generalInformations/CreateGeneralInformationsValidity.tsx index 2f90a76c7965..2211f6c9d882 100644 --- a/packages/manager/apps/key-management-service/src/pages/credential/create/generalInformations/CreateGeneralInformationsValidity.tsx +++ b/packages/manager/apps/key-management-service/src/pages/credential/create/generalInformations/CreateGeneralInformationsValidity.tsx @@ -14,8 +14,8 @@ import { VALIDITY_PERIOD_PRESET } from '../CreateGeneralInformations.constants'; import { ValidityPeriodErrorsType } from '@/utils/credential/validateValidityDate'; import { addDaysToDate, + getDateFromDays, getDaysFromDate, - getNextMonth, } from '@/utils/credential/validityDateUtils'; type CreateGeneralInformationsValidityProps = { @@ -30,9 +30,15 @@ const CreateGeneralInformationsValidity = ({ credentialValidityError, }: CreateGeneralInformationsValidityProps) => { const { t } = useTranslation('key-management-service/credential'); - const [validityPresetPeriod, setValidityPresetPeriod] = useState(validity); + + const getPresetForDays = (days: number): number => + VALIDITY_PERIOD_PRESET.find((preset) => preset.days === days)?.days ?? -1; + + const [validityPresetPeriod, setValidityPresetPeriod] = useState( + getPresetForDays(validity), + ); const [validityDatepicker, setValidityDatepicker] = useState( - getNextMonth(), + getDateFromDays(validity), ); const getValidityErrorMessage = (error: ValidityPeriodErrorsType) => { @@ -50,6 +56,7 @@ const CreateGeneralInformationsValidity = ({ return null; } }; + useEffect(() => { if (validityPresetPeriod !== -1) { setValidity(validityPresetPeriod); @@ -58,6 +65,7 @@ const CreateGeneralInformationsValidity = ({ setValidity(getDaysFromDate(validityDatepicker)); } }, [validityPresetPeriod, validityDatepicker]); + return (
diff --git a/packages/manager/apps/key-management-service/src/utils/credential/validityDateUtils.spec.ts b/packages/manager/apps/key-management-service/src/utils/credential/validityDateUtils.spec.ts index 3e34dcef2fe7..0f33cf2cba1b 100644 --- a/packages/manager/apps/key-management-service/src/utils/credential/validityDateUtils.spec.ts +++ b/packages/manager/apps/key-management-service/src/utils/credential/validityDateUtils.spec.ts @@ -3,6 +3,7 @@ import { getNextMonth, getDaysFromDate, addDaysToDate, + getDateFromDays, } from './validityDateUtils'; describe('getNextMonth', () => { @@ -59,8 +60,8 @@ describe('getDaysFromDate', () => { }); it('should handle leap years correctly', () => { - const referenceDate = new Date(2024, 1, 28); // 28 février 2024 - const leapDay = new Date(2024, 1, 29); // 29 février 2024 + const referenceDate = new Date(2024, 1, 28); + const leapDay = new Date(2024, 1, 29); const diffInDays = Math.floor( (leapDay.getTime() - referenceDate.getTime()) / (24 * 60 * 60 * 1000), @@ -84,9 +85,59 @@ describe('addDaysToDate', () => { }); it('should handle leap years correctly', () => { - const result = addDaysToDate(365); // Ajoute 365 jours à une année bissextile + const result = addDaysToDate(365); const expectedDate = new Date(); expectedDate.setFullYear(expectedDate.getFullYear() + 1); expect(result.getUTCFullYear()).toBe(expectedDate.getUTCFullYear()); }); }); + +describe('getDateFromDays', () => { + it('should return the correct date when adding positive days', () => { + const today = new Date(); + const daysToAdd = 10; + const futureDate = getDateFromDays(daysToAdd); + + const expectedDate = new Date(today); + expectedDate.setDate(today.getDate() + daysToAdd); + + expect(futureDate.getUTCDate()).toBe(expectedDate.getUTCDate()); + expect(futureDate.getUTCMonth()).toBe(expectedDate.getUTCMonth()); + expect(futureDate.getUTCFullYear()).toBe(expectedDate.getUTCFullYear()); + }); + + it('should return the correct date when adding negative days', () => { + const today = new Date(); + const daysToSubtract = -10; + const pastDate = getDateFromDays(daysToSubtract); + + const expectedDate = new Date(today); + expectedDate.setDate(today.getDate() + daysToSubtract); + + expect(pastDate.getUTCDate()).toBe(expectedDate.getUTCDate()); + expect(pastDate.getUTCMonth()).toBe(expectedDate.getUTCMonth()); + expect(pastDate.getUTCFullYear()).toBe(expectedDate.getUTCFullYear()); + }); + + it("should return today's date when adding 0 days", () => { + const today = new Date(); + const result = getDateFromDays(0); + + expect(result.getUTCDate()).toBe(today.getUTCDate()); + expect(result.getUTCMonth()).toBe(today.getUTCMonth()); + expect(result.getUTCFullYear()).toBe(today.getUTCFullYear()); + }); + + it('should correctly handle large numbers of days', () => { + const today = new Date(); + const daysToAdd = 3650; // 10 years + const futureDate = getDateFromDays(daysToAdd); + + const expectedDate = new Date(today); + expectedDate.setDate(today.getDate() + daysToAdd); + + expect(futureDate.getUTCDate()).toBe(expectedDate.getUTCDate()); + expect(futureDate.getUTCMonth()).toBe(expectedDate.getUTCMonth()); + expect(futureDate.getUTCFullYear()).toBe(expectedDate.getUTCFullYear()); + }); +}); diff --git a/packages/manager/apps/key-management-service/src/utils/credential/validityDateUtils.ts b/packages/manager/apps/key-management-service/src/utils/credential/validityDateUtils.ts index 39bdbc7aae7d..377a580c682d 100644 --- a/packages/manager/apps/key-management-service/src/utils/credential/validityDateUtils.ts +++ b/packages/manager/apps/key-management-service/src/utils/credential/validityDateUtils.ts @@ -22,3 +22,10 @@ export function getDaysFromDate(date: Date): number { ); return Math.floor(diffInTime / oneDay); } + +export function getDateFromDays(days: number): Date { + const referenceDate = new Date(); + const oneDay = 24 * 60 * 60 * 1000; + const futureDate = new Date(referenceDate.getTime() + days * oneDay); + return futureDate; +}