diff --git a/jest.config.base.js b/jest.config.base.js
index a5f902bad2..3e1d49b841 100644
--- a/jest.config.base.js
+++ b/jest.config.base.js
@@ -29,6 +29,7 @@ module.exports = {
'!./src/**/*.test.tsx',
'!./src/**/*.test.browser.ts',
'!./src/test-utils/**/*.ts',
+ '!./src/test-utils/**/*.tsx',
'!./src/**/*.d.ts',
'!./src/**/__test__/**',
'!./src/**/__mocks__/**',
diff --git a/packages/examples/packages/images/snap.config.ts b/packages/examples/packages/images/snap.config.ts
index ce31ca55a0..2c0327f5be 100644
--- a/packages/examples/packages/images/snap.config.ts
+++ b/packages/examples/packages/images/snap.config.ts
@@ -1,7 +1,7 @@
import type { SnapConfig } from '@metamask/snaps-cli';
const config: SnapConfig = {
- input: './src/index.ts',
+ input: './src/index.tsx',
server: {
port: 8026,
},
diff --git a/packages/examples/packages/images/snap.manifest.json b/packages/examples/packages/images/snap.manifest.json
index 659f7e00a4..ec73b9e78f 100644
--- a/packages/examples/packages/images/snap.manifest.json
+++ b/packages/examples/packages/images/snap.manifest.json
@@ -7,7 +7,7 @@
"url": "https://github.com/MetaMask/snaps.git"
},
"source": {
- "shasum": "1naltBL/H7TBXHn+Zxgrq7wz6HUKiUUxFQTYTbp5KkQ=",
+ "shasum": "A2pzU53b9kEBkckTMFDxcPr9/lbaEsOvNUJK+rNx3/8=",
"location": {
"npm": {
"filePath": "dist/bundle.js",
diff --git a/packages/examples/packages/images/src/index.test.ts b/packages/examples/packages/images/src/index.test.tsx
similarity index 70%
rename from packages/examples/packages/images/src/index.test.ts
rename to packages/examples/packages/images/src/index.test.tsx
index bc50ae4bf8..9c36ee857b 100644
--- a/packages/examples/packages/images/src/index.test.ts
+++ b/packages/examples/packages/images/src/index.test.tsx
@@ -1,11 +1,11 @@
import { expect } from '@jest/globals';
-import { installSnap } from '@metamask/snaps-jest';
-import { DialogType, image, panel, text } from '@metamask/snaps-sdk';
+import { installSnap, assertIsAlertDialog } from '@metamask/snaps-jest';
+import { Box, Text, Image } from '@metamask/snaps-sdk/jsx';
import { renderSVG } from 'uqr';
describe('onRpcRequest', () => {
it('throws an error if the requested method does not exist', async () => {
- const { request, close } = await installSnap();
+ const { request } = await installSnap();
const response = await request({
method: 'foo',
@@ -20,8 +20,6 @@ describe('onRpcRequest', () => {
cause: null,
},
});
-
- await close();
});
describe('getQrCode', () => {
@@ -36,24 +34,25 @@ describe('onRpcRequest', () => {
});
const ui = await response.getInterface();
+ assertIsAlertDialog(ui);
+
expect(ui).toRender(
- panel([
- text(`The following is a QR code for the data "Hello, world!":`),
- image(renderSVG('Hello, world!')),
- ]),
+
+
+ The following is a QR code for the data "{'Hello, world!'}":
+
+
+ ,
);
- // TODO(ritave): Fix types in SnapInterface
- await (ui as any).ok();
+ await ui.ok();
expect(await response).toRespondWith(null);
});
});
describe('getCat', () => {
- // This test is flaky, so we disable it for now.
- // eslint-disable-next-line jest/no-disabled-tests
- it.skip('shows a cat', async () => {
+ it('shows a cat using an external URL', async () => {
const { request } = await installSnap();
const response = request({
@@ -61,27 +60,16 @@ describe('onRpcRequest', () => {
});
const ui = await response.getInterface();
- expect(ui).toStrictEqual(
- expect.objectContaining({
- type: DialogType.Alert,
- content: {
- type: 'panel',
- children: [
- {
- type: 'text',
- value: 'Enjoy your cat!',
- },
- {
- type: 'image',
- value: expect.any(String),
- },
- ],
- },
- }),
+ assertIsAlertDialog(ui);
+
+ expect(ui).toRender(
+
+ Enjoy your cat!
+
+ ,
);
- // TODO(ritave): Fix types in SnapInterface
- await (ui as any).ok();
+ await ui.ok();
expect(await response).toRespondWith(null);
});
@@ -96,6 +84,8 @@ describe('onRpcRequest', () => {
});
const ui = await response.getInterface();
+ assertIsAlertDialog(ui);
+
// eslint-disable-next-line jest/prefer-strict-equal
expect(ui.content).toEqual({
type: 'Box',
@@ -120,8 +110,7 @@ describe('onRpcRequest', () => {
key: null,
});
- // TODO(ritave): Fix types in SnapInterface
- await (ui as any).ok();
+ await ui.ok();
expect(await response).toRespondWith(null);
});
@@ -136,6 +125,8 @@ describe('onRpcRequest', () => {
});
const ui = await response.getInterface();
+ assertIsAlertDialog(ui);
+
// eslint-disable-next-line jest/prefer-strict-equal
expect(ui.content).toEqual({
type: 'Box',
@@ -160,8 +151,7 @@ describe('onRpcRequest', () => {
key: null,
});
- // TODO(ritave): Fix types in SnapInterface
- await (ui as any).ok();
+ await ui.ok();
expect(await response).toRespondWith(null);
});
diff --git a/packages/examples/packages/images/src/index.ts b/packages/examples/packages/images/src/index.tsx
similarity index 64%
rename from packages/examples/packages/images/src/index.ts
rename to packages/examples/packages/images/src/index.tsx
index 42e71a7f17..10388acb2d 100644
--- a/packages/examples/packages/images/src/index.ts
+++ b/packages/examples/packages/images/src/index.tsx
@@ -1,12 +1,6 @@
import type { OnRpcRequestHandler } from '@metamask/snaps-sdk';
-import {
- DialogType,
- getImageComponent,
- image,
- panel,
- text,
- MethodNotFoundError,
-} from '@metamask/snaps-sdk';
+import { DialogType, MethodNotFoundError } from '@metamask/snaps-sdk';
+import { Box, Text, Image } from '@metamask/snaps-sdk/jsx';
import { renderSVG } from 'uqr';
import pngIcon from './images/icon.png';
@@ -26,10 +20,8 @@ type GetQrCodeParams = {
* `wallet_invokeSnap` method. This handler handles two methods:
*
* - `getQrCode`: Show a QR code to the user. The QR code is generated using
- * the `uqr` library, and rendered using the `image` component.
- * - `getCat`: Show a cat to the user. The cat image is fetched using the
- * `getImageComponent` helper. The helper returns an `image` component, which
- * can be rendered in a Snap dialog, for example.
+ * the `uqr` library, and rendered using the `Image` component.
+ * - `getCat`: Show a cat to the user using an external image.
*
* @param params - The request parameters.
* @param params.request - The JSON-RPC request object.
@@ -44,17 +36,19 @@ export const onRpcRequest: OnRpcRequestHandler = async ({ request }) => {
const { data } = request.params as GetQrCodeParams;
// `renderSVG` returns a `