From 853d1c63cb1618ea4a5eb5cf0f5dbfe5aed3185e Mon Sep 17 00:00:00 2001 From: Lukas Lieb Date: Mon, 20 Jan 2025 16:24:25 +0100 Subject: [PATCH] add test --- .../components/editors/part/usePart.test.ts | 39 +++++++++++++++++-- .../src/components/editors/part/usePart.ts | 2 +- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/packages/inscription-view/src/components/editors/part/usePart.test.ts b/packages/inscription-view/src/components/editors/part/usePart.test.ts index 9f9fd191..149012d7 100644 --- a/packages/inscription-view/src/components/editors/part/usePart.test.ts +++ b/packages/inscription-view/src/components/editors/part/usePart.test.ts @@ -1,10 +1,10 @@ import { renderHook } from 'test-utils'; -import type { PartStateFlag } from './usePart'; -import { usePartState } from './usePart'; +import type { PartProps, PartStateFlag } from './usePart'; +import { useAccordionState, usePartState } from './usePart'; import type { ValidationResult } from '@axonivy/process-editor-inscription-protocol'; import { describe, test, expect } from 'vitest'; -describe('PartState', () => { +describe('usePartState', () => { function assertState(expectedState: PartStateFlag, data?: unknown, message?: ValidationResult[]) { const { result } = renderHook(() => usePartState({}, data ?? {}, message ?? [])); expect(result.current.state).toEqual(expectedState); @@ -25,3 +25,36 @@ describe('PartState', () => { ]); }); }); + +describe('useAccordionState', () => { + const ACCORDION_STORAGE_KEY = 'process-inscription-accordion'; + + test('empty storage', () => { + const parts = [{ name: 'General' }, { name: 'Dialog' }] as Array; + const { result } = renderHook(() => useAccordionState(parts)); + expect(result.current.value).toEqual(''); + }); + + test('wrong storage', () => { + const parts = [{ name: 'General' }, { name: 'Dialog' }] as Array; + sessionStorage.setItem(ACCORDION_STORAGE_KEY, 'wrong'); + const { result } = renderHook(() => useAccordionState(parts)); + expect(result.current.value).toEqual(''); + }); + + test('other storage', () => { + const parts = [{ name: 'General' }, { name: 'Dialog' }] as Array; + sessionStorage.setItem(ACCORDION_STORAGE_KEY, `["Result"]`); + const { result } = renderHook(() => useAccordionState(parts)); + expect(result.current.value).toEqual(''); + }); + + test('matching storage', () => { + const parts = [{ name: 'General' }, { name: 'Dialog' }] as Array; + sessionStorage.setItem(ACCORDION_STORAGE_KEY, `["Result", "Dialog"]`); + const { result } = renderHook(() => useAccordionState(parts)); + expect(result.current.value).toEqual('Dialog'); + result.current.updateValue(''); + expect(sessionStorage.getItem(ACCORDION_STORAGE_KEY)).toEqual(`["Result"]`); + }); +}); diff --git a/packages/inscription-view/src/components/editors/part/usePart.ts b/packages/inscription-view/src/components/editors/part/usePart.ts index 5d843d35..937ddf45 100644 --- a/packages/inscription-view/src/components/editors/part/usePart.ts +++ b/packages/inscription-view/src/components/editors/part/usePart.ts @@ -39,7 +39,7 @@ export function usePartDirty(initData: unknown, data: unknown): boolean { const ACCORDION_STORAGE_KEY = 'process-inscription-accordion'; -export const useAccordionState = (parts: PartProps[]) => { +export const useAccordionState = (parts: Array) => { const [value, setValue] = useState(() => { try { const storage = sessionStorage.getItem(ACCORDION_STORAGE_KEY) ?? '[]';