diff --git a/.vscode/settings.json b/.vscode/settings.json index 8bda8372f..237f93c57 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,6 @@ "svelte.enable-ts-plugin": true, "rust-analyzer.linkedProjects": ["./Cargo.toml", "tauri-app/src-tauri/Cargo.toml"], - "[rust]": { "editor.defaultFormatter": "rust-lang.rust-analyzer", "editor.formatOnSave": true, diff --git a/packages/ui-components/src/__tests__/CodeMirrorRainlang.test.svelte b/packages/ui-components/src/__tests__/CodeMirrorRainlang.test.svelte deleted file mode 100644 index 7e16c7f1a..000000000 --- a/packages/ui-components/src/__tests__/CodeMirrorRainlang.test.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - - -
{value}
-
-
diff --git a/packages/ui-components/src/__tests__/CodeMirrorRainlang.test.ts b/packages/ui-components/src/__tests__/CodeMirrorRainlang.test.ts index 45c2b9a1b..1a4cef907 100644 --- a/packages/ui-components/src/__tests__/CodeMirrorRainlang.test.ts +++ b/packages/ui-components/src/__tests__/CodeMirrorRainlang.test.ts @@ -1,8 +1,8 @@ -import { describe, it, expect, vi, beforeEach } from 'vitest'; -import { render } from '@testing-library/svelte'; -import CodeMirrorRainlang from './CodeMirrorRainlang.test.svelte'; +import { describe, it, expect, vi, beforeEach, type Mock } from 'vitest'; +import { render, waitFor } from '@testing-library/svelte'; +import CodeMirrorRainlang from '../lib/components/CodeMirrorRainlang.svelte'; import type { Order } from '@rainlanguage/orderbook/js_api'; -import * as orderBookApi from '@rainlanguage/orderbook/js_api'; +import { extendOrder } from '@rainlanguage/orderbook/js_api'; import { writable } from 'svelte/store'; // Mock the extendOrder function @@ -13,6 +13,15 @@ vi.mock('@rainlanguage/orderbook/js_api', () => ({ })) })); +vi.mock('codemirror-rainlang', () => ({ + RainlangLR: vi.fn() +})); + +vi.mock('svelte-codemirror-editor', async () => { + const mockCodeMirror = (await import('../lib/__mocks__/MockComponent.svelte')).default; + return { default: mockCodeMirror }; +}); + describe('CodeMirrorRainlang', () => { beforeEach(() => { vi.clearAllMocks(); @@ -21,47 +30,51 @@ describe('CodeMirrorRainlang', () => { it('should use extendOrder when order prop is provided', () => { const mockOrder: Order = {} as Order; - const { getByTestId } = render(CodeMirrorRainlang, { + render(CodeMirrorRainlang, { props: { - props: { - order: mockOrder, - rainlangText: 'original text', - codeMirrorTheme: writable({}) - } + order: mockOrder, + codeMirrorTheme: writable({}), + codeMirrorDisabled: false, + codeMirrorStyles: {} } }); - expect(orderBookApi.extendOrder).toHaveBeenCalledWith(mockOrder); - expect(getByTestId('test-value').textContent).toBe('mocked rainlang text'); + expect(extendOrder).toHaveBeenCalledWith(mockOrder); }); it('should use rainlangText when no order is provided', () => { const testText = 'test rainlang text'; - const { getByTestId } = render(CodeMirrorRainlang, { + render(CodeMirrorRainlang, { props: { - props: { - rainlangText: testText, - codeMirrorTheme: writable({}) - } + order: undefined, + rainlangText: testText, + codeMirrorTheme: writable({}), + codeMirrorDisabled: false, + codeMirrorStyles: {} } }); - expect(orderBookApi.extendOrder).not.toHaveBeenCalled(); - expect(getByTestId('test-value').textContent).toBe(testText); + expect(extendOrder).not.toHaveBeenCalled(); }); - it('should pass through disabled prop', () => { - const { getByTestId } = render(CodeMirrorRainlang, { + it('should pass through disabled prop', async () => { + const mockOrder: Order = {} as Order; + const mockExtendedOrder = { order: {} }; + + (extendOrder as Mock).mockReturnValue(mockExtendedOrder); + + const screen = render(CodeMirrorRainlang, { props: { - props: { - disabled: true, - rainlangText: 'test', - codeMirrorTheme: writable({}) - } + order: mockOrder, + codeMirrorTheme: writable({}), + codeMirrorDisabled: false, + codeMirrorStyles: {} } }); - expect(getByTestId('test-value')).toBeTruthy(); + await waitFor(() => { + expect(screen.getByTestId('rainlang-not-included')).toBeInTheDocument(); + }); }); }); diff --git a/packages/ui-components/src/lib/components/CodeMirrorRainlang.svelte b/packages/ui-components/src/lib/components/CodeMirrorRainlang.svelte index 1a56d1636..058cdad96 100644 --- a/packages/ui-components/src/lib/components/CodeMirrorRainlang.svelte +++ b/packages/ui-components/src/lib/components/CodeMirrorRainlang.svelte @@ -1,14 +1,38 @@ - +{#if extendedOrder?.rainlang} + +{:else if !extendedOrder?.rainlang && !rainlangText} +
+ Rain source not included in order meta +
+{/if} diff --git a/packages/ui-components/src/lib/components/detail/OrderDetail.svelte b/packages/ui-components/src/lib/components/detail/OrderDetail.svelte index 34d4728f4..078347c9b 100644 --- a/packages/ui-components/src/lib/components/detail/OrderDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/OrderDetail.svelte @@ -12,9 +12,6 @@ import { QKEY_ORDER } from '../../queries/keys'; import CodeMirrorRainlang from '../CodeMirrorRainlang.svelte'; import { queryClient } from '../../stores/queryClient'; - import CodeMirror from 'svelte-codemirror-editor'; - import { RainlangLR } from 'codemirror-rainlang'; - import { getOrder, type Order } from '@rainlanguage/orderbook/js_api'; import { createQuery } from '@tanstack/svelte-query'; import { Button, TabItem, Tabs } from 'flowbite-svelte'; @@ -157,26 +154,9 @@ - - - - + {codeMirrorDisabled} + {codeMirrorStyles} + > diff --git a/tauri-app/src/routes/orders/add/+page.svelte b/tauri-app/src/routes/orders/add/+page.svelte index d93f141b8..e09644ab7 100644 --- a/tauri-app/src/routes/orders/add/+page.svelte +++ b/tauri-app/src/routes/orders/add/+page.svelte @@ -275,7 +275,7 @@ > {#each Array.from($generatedRainlang.entries()) as [scenario, rainlangText]} - + {/each}