Skip to content

Commit

Permalink
Merge pull request #1291 from rainlanguage/2025-02-13-composed-rainlang
Browse files Browse the repository at this point in the history
Creating compose rainlang function in rust
  • Loading branch information
hardyjosh authored Feb 13, 2025
2 parents 43535eb + 6c4127f commit 3e75bd5
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 19 deletions.
11 changes: 11 additions & 0 deletions crates/js_api/src/gui/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,17 @@ impl DotrainOrderGui {
);
Ok(dotrain)
}

#[wasm_bindgen(js_name = "getComposedRainlang")]
pub async fn get_composed_rainlang(&mut self) -> Result<String, GuiError> {
self.update_scenario_bindings()?;
let dotrain = self.generate_dotrain_text()?;
let dotrain_order = DotrainOrder::new(dotrain, None).await?;
let rainlang = dotrain_order
.compose_deployment_to_rainlang(self.selected_deployment.clone())
.await?;
Ok(rainlang)
}
}

#[derive(Error, Debug)]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, fireEvent, waitFor } from '@testing-library/svelte';
import ComposedRainlangModal from '../lib/components/deployment/ComposedRainlangModal.svelte';
import type { DotrainOrderGui } from '@rainlanguage/orderbook/js_api';

vi.mock('svelte-codemirror-editor', async () => {
const mockCodeMirror = (await import('../lib/__mocks__/MockComponent.svelte')).default;
return { default: mockCodeMirror };
});

describe('ComposedRainlangModal', () => {
let composeRainlangMock: ReturnType<typeof vi.fn>;
const mockGui = {
getComposedRainlang: vi.fn(() => Promise.resolve('mocked rainlang text'))
} as unknown as DotrainOrderGui;

describe('ComposedRainlangModal', () => {
beforeEach(() => {
composeRainlangMock = vi.fn(() => Promise.resolve('mocked rainlang text'));
vi.clearAllMocks();
});

it('should open modal and display rainlang text when button is clicked', async () => {
const { getByText, getByTestId } = render(ComposedRainlangModal, {
props: {
composeRainlang: composeRainlangMock,
gui: mockGui,
codeMirrorStyles: {}
}
});
Expand All @@ -27,7 +29,7 @@ describe('ComposedRainlangModal', () => {
await fireEvent.click(button);

await waitFor(() => {
expect(composeRainlangMock).toHaveBeenCalled();
expect(mockGui.getComposedRainlang).toHaveBeenCalled();
expect(getByTestId('modal')).toBeInTheDocument();
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,17 @@
import { RainlangLR } from 'codemirror-rainlang';
import { lightCodeMirrorTheme } from '../../utils/codeMirrorThemes';
import { Button, Modal } from 'flowbite-svelte';
import type { DotrainOrderGui } from '@rainlanguage/orderbook/js_api';
export let composeRainlang: () => Promise<string | undefined>;
export let gui: DotrainOrderGui;
export let codeMirrorStyles = {};
let rainlangText: string | null = null;
let open = false;
async function generateRainlang() {
const rainlang = await composeRainlang();
if (!gui) return;
const rainlang = await gui.getComposedRainlang();
if (rainlang) {
rainlangText = rainlang;
open = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
type OrderIO,
type ApprovalCalldataResult,
type DepositAndAddOrderCalldataResult,
DotrainOrder,
type SelectTokens
} from '@rainlanguage/orderbook/js_api';
import { fade } from 'svelte/transition';
Expand Down Expand Up @@ -235,16 +234,6 @@
}
}
};
async function composeRainlang() {
if (!gui) return;
gui.updateScenarioBindings();
const deployment = gui.getCurrentDeployment();
const dotrain = gui.generateDotrainText();
const dotrainOrder = await DotrainOrder.create(dotrain);
const composedRainlang = await dotrainOrder.composeDeploymentToRainlang(deployment.key);
return composedRainlang;
}
</script>

<div>
Expand Down Expand Up @@ -290,7 +279,7 @@
<div class="flex gap-2">
{#if $wagmiConnected}
<Button size="lg" on:click={handleAddOrder}>Deploy Strategy</Button>
<ComposedRainlangModal {composeRainlang} />
<ComposedRainlangModal {gui} />
{:else}
<WalletConnect {appKitModal} connected={wagmiConnected} />
{/if}
Expand Down

0 comments on commit 3e75bd5

Please sign in to comment.