storybook-mocks.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { serverStore } from '$lib/stores/server.svelte';
  2. import { modelsStore } from '$lib/stores/models.svelte';
  3. /**
  4. * Mock server properties for Storybook testing
  5. * This utility allows setting mock server configurations without polluting production code
  6. */
  7. export function mockServerProps(props: Partial<ApiLlamaCppServerProps>): void {
  8. // Reset any pointer-events from previous tests (dropdown cleanup)
  9. const body = document.querySelector('body');
  10. if (body) body.style.pointerEvents = '';
  11. // Directly set the props for testing purposes
  12. (serverStore as unknown as { props: ApiLlamaCppServerProps }).props = {
  13. model_path: props.model_path || 'test-model',
  14. modalities: {
  15. vision: props.modalities?.vision ?? false,
  16. audio: props.modalities?.audio ?? false
  17. },
  18. ...props
  19. } as ApiLlamaCppServerProps;
  20. // Set router mode role so activeModelId can be set
  21. (serverStore as unknown as { props: ApiLlamaCppServerProps }).props.role = 'ROUTER';
  22. // Also mock modelsStore methods for modality checking
  23. const vision = props.modalities?.vision ?? false;
  24. const audio = props.modalities?.audio ?? false;
  25. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  26. (modelsStore as any).modelSupportsVision = () => vision;
  27. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  28. (modelsStore as any).modelSupportsAudio = () => audio;
  29. // Mock models list with a test model so activeModelId can be resolved
  30. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  31. (modelsStore as any).models = [
  32. {
  33. id: 'test-model',
  34. name: 'Test Model',
  35. model: 'test-model'
  36. }
  37. ];
  38. // Mock selectedModelId
  39. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  40. (modelsStore as any).selectedModelId = 'test-model';
  41. }
  42. /**
  43. * Reset server store to clean state for testing
  44. */
  45. export function resetServerStore(): void {
  46. (serverStore as unknown as { props: ApiLlamaCppServerProps }).props = {
  47. model_path: '',
  48. modalities: {
  49. vision: false,
  50. audio: false
  51. }
  52. } as ApiLlamaCppServerProps;
  53. (serverStore as unknown as { error: string }).error = '';
  54. (serverStore as unknown as { loading: boolean }).loading = false;
  55. }
  56. /**
  57. * Common mock configurations for Storybook stories
  58. */
  59. export const mockConfigs = {
  60. visionOnly: {
  61. modalities: { vision: true, audio: false }
  62. },
  63. audioOnly: {
  64. modalities: { vision: false, audio: true }
  65. },
  66. bothModalities: {
  67. modalities: { vision: true, audio: true }
  68. },
  69. noModalities: {
  70. modalities: { vision: false, audio: false }
  71. }
  72. } as const;