Skip to content

Commit 07d5a50

Browse files
committed
Create a testing library for ui-extensions (proof of concept)
1 parent 4fbf529 commit 07d5a50

14 files changed

Lines changed: 501 additions & 0 deletions

File tree

examples/testing/checkout-basic-testing-example/extensions/checkout-basic-testing-example/dist/checkout-basic-testing-example.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/testing/checkout-basic-testing-example/extensions/checkout-basic-testing-example/dist/checkout-basic-testing-example.js.map

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/testing/point-of-sale-testing-example/extensions/point-of-sale-testing-example/dist/point-of-sale-testing-example.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/testing/point-of-sale-testing-example/extensions/point-of-sale-testing-example/dist/point-of-sale-testing-example.js.map

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# @shopify/ui-extensions-tester
2+
3+
A testing utility package for Shopify UI Extensions.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import {createPackage} from '@shopify/loom';
2+
import {defaultProjectPlugin} from '../../config/loom';
3+
4+
export default createPackage((pkg) => {
5+
pkg.entry({root: './src/index.ts'});
6+
pkg.entry({name: 'checkout', root: './src/checkout/index.ts'});
7+
pkg.use(defaultProjectPlugin());
8+
});
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
{
2+
"name": "@shopify/ui-extensions-tester",
3+
"version": "2026.4.0-rc.1",
4+
"main": "index.js",
5+
"module": "index.mjs",
6+
"esnext": "index.esnext",
7+
"types": "./build/ts/index.d.ts",
8+
"exports": {
9+
".": {
10+
"types": "./build/ts/index.d.ts",
11+
"esnext": "./index.esnext",
12+
"import": "./index.mjs",
13+
"require": "./index.js"
14+
},
15+
"./checkout": {
16+
"types": "./build/ts/checkout/index.d.ts",
17+
"esnext": "./checkout.esnext",
18+
"import": "./checkout.mjs",
19+
"require": "./checkout.js"
20+
}
21+
},
22+
"typesVersions": {
23+
"*": {
24+
"checkout": [
25+
"./build/ts/checkout/index.d.ts"
26+
]
27+
}
28+
},
29+
"license": "MIT",
30+
"dependencies": {
31+
"@shopify/ui-extensions": "*"
32+
},
33+
"peerDependencies": {
34+
"preact": "^10.0.0"
35+
},
36+
"peerDependenciesMeta": {
37+
"preact": {
38+
"optional": true
39+
}
40+
},
41+
"devDependencies": {
42+
"typescript": "^4.9.0"
43+
},
44+
"publishConfig": {
45+
"access": "public",
46+
"@shopify:registry": "https://registry.npmjs.org/"
47+
},
48+
"repository": {
49+
"type": "git",
50+
"url": "https://github.com/Shopify/ui-extensions.git",
51+
"directory": "packages/ui-extensions-tester"
52+
},
53+
"files": [
54+
"build",
55+
"src",
56+
"index.*",
57+
"checkout.*",
58+
"README.md"
59+
]
60+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import type {
2+
SubscribableSignalLike,
3+
AppMetafieldEntry,
4+
} from '@shopify/ui-extensions/checkout';
5+
6+
import type {AnyExtensionTarget, ApiForTarget} from '../targets';
7+
import {createSubscribableSignalLike} from '../mocks/signals';
8+
9+
/**
10+
* Creates a mock `SubscribableSignalLike<AppMetafieldEntry[]>` for use
11+
* as the `appMetafields` override in `mockGlobalShopify`.
12+
*/
13+
export function createAppMetafields(
14+
entries: AppMetafieldEntry[],
15+
): SubscribableSignalLike<AppMetafieldEntry[]> {
16+
return createSubscribableSignalLike(entries);
17+
}
18+
19+
/**
20+
* Creates a mock API for checkout extension targets.
21+
*/
22+
export function createMockCheckoutTargetApi<T extends AnyExtensionTarget>(
23+
_target: T,
24+
): Partial<ApiForTarget<T>> {
25+
return {
26+
appMetafields: createSubscribableSignalLike([]),
27+
applyMetafieldChange: async () => ({type: 'success' as const}),
28+
} as unknown as Partial<ApiForTarget<T>>;
29+
}

0 commit comments

Comments
 (0)