A lot of refectoring
This commit is contained in:
@@ -1,100 +1,98 @@
|
||||
import { act, renderHook } from '@testing-library/react'
|
||||
import { beforeEach, describe, expect, it } from 'vitest'
|
||||
import { act, renderHook } from '@testing-library/react';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { MantineBetterMenusStoreProvider, useMantineBetterMenus } from './Store'
|
||||
import { MantineBetterMenusStoreProvider, useMantineBetterMenus } from './Store';
|
||||
|
||||
// Mock dependencies
|
||||
vi.mock('@warkypublic/artemis-kit', () => ({
|
||||
getUUID: () => 'test-uuid-123'
|
||||
}))
|
||||
getUUID: () => 'test-uuid-123',
|
||||
}));
|
||||
|
||||
const createWrapper = () => {
|
||||
return ({ children }: { children: React.ReactNode }) => (
|
||||
<MantineBetterMenusStoreProvider>
|
||||
{children}
|
||||
</MantineBetterMenusStoreProvider>
|
||||
)
|
||||
}
|
||||
<MantineBetterMenusStoreProvider>{children}</MantineBetterMenusStoreProvider>
|
||||
);
|
||||
};
|
||||
|
||||
describe('MantineBetterMenus Store', () => {
|
||||
let wrapper: ReturnType<typeof createWrapper>
|
||||
let wrapper: ReturnType<typeof createWrapper>;
|
||||
|
||||
beforeEach(() => {
|
||||
wrapper = createWrapper()
|
||||
})
|
||||
wrapper = createWrapper();
|
||||
});
|
||||
|
||||
it('initializes with empty menus array', () => {
|
||||
const { result } = renderHook(() => useMantineBetterMenus(), { wrapper })
|
||||
const { result } = renderHook(() => useMantineBetterMenus(), { wrapper });
|
||||
|
||||
expect(result.current.menus).toEqual([])
|
||||
})
|
||||
expect(result.current.menus).toEqual([]);
|
||||
});
|
||||
|
||||
it('can show a menu', () => {
|
||||
const { result } = renderHook(() => useMantineBetterMenus(), { wrapper })
|
||||
const { result } = renderHook(() => useMantineBetterMenus(), { wrapper });
|
||||
|
||||
act(() => {
|
||||
result.current.show('test-menu', {
|
||||
items: [{ label: 'Test Item' }],
|
||||
x: 100,
|
||||
y: 200
|
||||
})
|
||||
})
|
||||
y: 200,
|
||||
});
|
||||
});
|
||||
|
||||
expect(result.current.menus).toHaveLength(1)
|
||||
expect(result.current.menus).toHaveLength(1);
|
||||
expect(result.current.menus[0]).toMatchObject({
|
||||
id: 'test-menu',
|
||||
items: [{ label: 'Test Item' }],
|
||||
visible: true,
|
||||
x: 100,
|
||||
y: 200
|
||||
})
|
||||
})
|
||||
y: 200,
|
||||
});
|
||||
});
|
||||
|
||||
it('can hide a menu', () => {
|
||||
const { result } = renderHook(() => useMantineBetterMenus(), { wrapper })
|
||||
const { result } = renderHook(() => useMantineBetterMenus(), { wrapper });
|
||||
|
||||
// First show a menu
|
||||
act(() => {
|
||||
result.current.show('test-menu', { x: 100, y: 200 })
|
||||
})
|
||||
result.current.show('test-menu', { x: 100, y: 200 });
|
||||
});
|
||||
|
||||
expect(result.current.menus[0].visible).toBe(true)
|
||||
expect(result.current.menus[0].visible).toBe(true);
|
||||
|
||||
// Then hide it
|
||||
act(() => {
|
||||
result.current.hide('test-menu')
|
||||
})
|
||||
result.current.hide('test-menu');
|
||||
});
|
||||
|
||||
expect(result.current.menus[0].visible).toBe(false)
|
||||
})
|
||||
expect(result.current.menus[0].visible).toBe(false);
|
||||
});
|
||||
|
||||
it('can update instance state', () => {
|
||||
const { result } = renderHook(() => useMantineBetterMenus(), { wrapper })
|
||||
const { result } = renderHook(() => useMantineBetterMenus(), { wrapper });
|
||||
|
||||
// Show a menu
|
||||
act(() => {
|
||||
result.current.show('test-menu', { x: 100, y: 200 })
|
||||
})
|
||||
result.current.show('test-menu', { x: 100, y: 200 });
|
||||
});
|
||||
|
||||
// Update its position
|
||||
act(() => {
|
||||
result.current.setInstanceState('test-menu', 'x', 300)
|
||||
})
|
||||
result.current.setInstanceState('test-menu', 'x', 300);
|
||||
});
|
||||
|
||||
expect(result.current.menus[0].x).toBe(300)
|
||||
expect(result.current.menus[0].y).toBe(200) // Should remain unchanged
|
||||
})
|
||||
expect(result.current.menus[0].x).toBe(300);
|
||||
expect(result.current.menus[0].y).toBe(200); // Should remain unchanged
|
||||
});
|
||||
|
||||
it('handles multiple menus', () => {
|
||||
const { result } = renderHook(() => useMantineBetterMenus(), { wrapper })
|
||||
const { result } = renderHook(() => useMantineBetterMenus(), { wrapper });
|
||||
|
||||
act(() => {
|
||||
result.current.show('menu-1', { x: 100, y: 200 })
|
||||
result.current.show('menu-2', { x: 300, y: 400 })
|
||||
})
|
||||
result.current.show('menu-1', { x: 100, y: 200 });
|
||||
result.current.show('menu-2', { x: 300, y: 400 });
|
||||
});
|
||||
|
||||
expect(result.current.menus).toHaveLength(2)
|
||||
expect(result.current.menus.find(m => m.id === 'menu-1')).toBeDefined()
|
||||
expect(result.current.menus.find(m => m.id === 'menu-2')).toBeDefined()
|
||||
})
|
||||
})
|
||||
expect(result.current.menus).toHaveLength(2);
|
||||
expect(result.current.menus.find((m) => m.id === 'menu-1')).toBeDefined();
|
||||
expect(result.current.menus.find((m) => m.id === 'menu-2')).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user