@storyblok/management-api-client 1.0.0-alpha.1 → 1.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/client.cjs +9 -9
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +208 -200
- package/dist/client.d.mts +208 -200
- package/dist/client.mjs +9 -9
- package/dist/client.mjs.map +1 -1
- package/dist/generated/mapi/_internal.gen.d.cts +541 -0
- package/dist/generated/mapi/_internal.gen.d.mts +541 -0
- package/dist/generated/{shared → mapi}/client/client.gen.cjs +1 -1
- package/dist/generated/mapi/client/client.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/client/client.gen.mjs +1 -1
- package/dist/generated/mapi/client/client.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/client/types.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/client/types.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/client/utils.gen.cjs +1 -1
- package/dist/generated/mapi/client/utils.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/client/utils.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/client/utils.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/client/utils.gen.mjs +1 -1
- package/dist/generated/mapi/client/utils.gen.mjs.map +1 -0
- package/dist/generated/mapi/client.gen.cjs +10 -0
- package/dist/generated/mapi/client.gen.cjs.map +1 -0
- package/dist/generated/mapi/client.gen.mjs +10 -0
- package/dist/generated/mapi/client.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/auth.gen.cjs +1 -1
- package/dist/generated/mapi/core/auth.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/auth.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/core/auth.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/core/auth.gen.mjs +1 -1
- package/dist/generated/mapi/core/auth.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/bodySerializer.gen.cjs +1 -1
- package/dist/generated/mapi/core/bodySerializer.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/bodySerializer.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/core/bodySerializer.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/core/bodySerializer.gen.mjs +1 -1
- package/dist/generated/mapi/core/bodySerializer.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/params.gen.cjs +1 -1
- package/dist/generated/mapi/core/params.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/params.gen.mjs +1 -1
- package/dist/generated/mapi/core/params.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/pathSerializer.gen.cjs +1 -1
- package/dist/generated/mapi/core/pathSerializer.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/pathSerializer.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/core/pathSerializer.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/core/pathSerializer.gen.mjs +1 -1
- package/dist/generated/mapi/core/pathSerializer.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.cjs +1 -1
- package/dist/generated/mapi/core/serverSentEvents.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.mjs +1 -1
- package/dist/generated/mapi/core/serverSentEvents.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/types.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/core/types.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/core/utils.gen.cjs +1 -1
- package/dist/generated/mapi/core/utils.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/utils.gen.mjs +1 -1
- package/dist/generated/mapi/core/utils.gen.mjs.map +1 -0
- package/dist/generated/mapi/sdk.gen.cjs +1477 -0
- package/dist/generated/mapi/sdk.gen.cjs.map +1 -0
- package/dist/generated/mapi/sdk.gen.mjs +1399 -0
- package/dist/generated/mapi/sdk.gen.mjs.map +1 -0
- package/dist/generated/mapi/types-aliased.gen.d.cts +1428 -0
- package/dist/generated/mapi/types-aliased.gen.d.mts +1428 -0
- package/dist/generated/mapi/types.gen.d.cts +5075 -0
- package/dist/generated/mapi/types.gen.d.mts +5075 -0
- package/dist/generated/{components/types.gen.d.cts → overlay/_internal.gen.d.cts} +281 -457
- package/dist/generated/{components/types.gen.d.mts → overlay/_internal.gen.d.mts} +281 -457
- package/dist/generated/types/_utils.d.cts +7 -0
- package/dist/generated/types/_utils.d.mts +7 -0
- package/dist/generated/types/block.d.cts +30 -0
- package/dist/generated/types/block.d.mts +30 -0
- package/dist/generated/types/field.d.cts +75 -0
- package/dist/generated/types/field.d.mts +75 -0
- package/dist/generated/types/mapi-story.d.cts +29 -0
- package/dist/generated/types/mapi-story.d.mts +29 -0
- package/dist/index.d.cts +9 -4
- package/dist/index.d.mts +9 -4
- package/dist/resources/asset-folders.cjs +9 -9
- package/dist/resources/asset-folders.cjs.map +1 -1
- package/dist/resources/asset-folders.mjs +9 -9
- package/dist/resources/asset-folders.mjs.map +1 -1
- package/dist/resources/assets.cjs +64 -46
- package/dist/resources/assets.cjs.map +1 -1
- package/dist/resources/assets.d.cts +23 -28
- package/dist/resources/assets.d.mts +23 -28
- package/dist/resources/assets.mjs +64 -46
- package/dist/resources/assets.mjs.map +1 -1
- package/dist/resources/component-folders.cjs +9 -9
- package/dist/resources/component-folders.cjs.map +1 -1
- package/dist/resources/component-folders.mjs +9 -9
- package/dist/resources/component-folders.mjs.map +1 -1
- package/dist/resources/components.cjs +28 -20
- package/dist/resources/components.cjs.map +1 -1
- package/dist/resources/components.d.cts +76 -0
- package/dist/resources/components.d.mts +76 -0
- package/dist/resources/components.mjs +28 -20
- package/dist/resources/components.mjs.map +1 -1
- package/dist/resources/datasource-entries.cjs +28 -34
- package/dist/resources/datasource-entries.cjs.map +1 -1
- package/dist/resources/datasource-entries.mjs +29 -35
- package/dist/resources/datasource-entries.mjs.map +1 -1
- package/dist/resources/datasources.cjs +27 -9
- package/dist/resources/datasources.cjs.map +1 -1
- package/dist/resources/datasources.mjs +27 -9
- package/dist/resources/datasources.mjs.map +1 -1
- package/dist/resources/experiments.cjs +299 -0
- package/dist/resources/experiments.cjs.map +1 -0
- package/dist/resources/experiments.mjs +299 -0
- package/dist/resources/experiments.mjs.map +1 -0
- package/dist/resources/internal-tags.cjs +7 -7
- package/dist/resources/internal-tags.cjs.map +1 -1
- package/dist/resources/internal-tags.mjs +7 -7
- package/dist/resources/internal-tags.mjs.map +1 -1
- package/dist/resources/presets.cjs +9 -9
- package/dist/resources/presets.cjs.map +1 -1
- package/dist/resources/presets.mjs +9 -9
- package/dist/resources/presets.mjs.map +1 -1
- package/dist/resources/shared.cjs +15 -0
- package/dist/resources/shared.cjs.map +1 -1
- package/dist/resources/shared.mjs +15 -1
- package/dist/resources/shared.mjs.map +1 -1
- package/dist/resources/spaces.cjs +8 -7
- package/dist/resources/spaces.cjs.map +1 -1
- package/dist/resources/spaces.d.cts +8 -0
- package/dist/resources/spaces.d.mts +7 -0
- package/dist/resources/spaces.mjs +8 -7
- package/dist/resources/spaces.mjs.map +1 -1
- package/dist/resources/stories.cjs +20 -16
- package/dist/resources/stories.cjs.map +1 -1
- package/dist/resources/stories.d.cts +30 -42
- package/dist/resources/stories.d.mts +30 -42
- package/dist/resources/stories.mjs +20 -16
- package/dist/resources/stories.mjs.map +1 -1
- package/dist/resources/users.cjs +3 -3
- package/dist/resources/users.cjs.map +1 -1
- package/dist/resources/users.mjs +3 -3
- package/dist/resources/users.mjs.map +1 -1
- package/dist/utils/query-serializer.cjs +54 -0
- package/dist/utils/query-serializer.cjs.map +1 -0
- package/dist/utils/query-serializer.mjs +54 -0
- package/dist/utils/query-serializer.mjs.map +1 -0
- package/dist/utils/rate-limit.cjs +15 -74
- package/dist/utils/rate-limit.cjs.map +1 -1
- package/dist/utils/rate-limit.d.cts +5 -6
- package/dist/utils/rate-limit.d.mts +5 -6
- package/dist/utils/rate-limit.mjs +15 -74
- package/dist/utils/rate-limit.mjs.map +1 -1
- package/package.json +13 -13
- package/playground/integration-tests/README.md +24 -0
- package/playground/integration-tests/eslint.config.js +5 -0
- package/playground/integration-tests/node_modules/.bin/eslint +16 -0
- package/playground/integration-tests/node_modules/.bin/tsc +16 -0
- package/playground/integration-tests/node_modules/.bin/tsserver +16 -0
- package/playground/integration-tests/node_modules/.bin/vitest +16 -0
- package/playground/integration-tests/package.json +24 -0
- package/{test → playground/integration-tests/test}/setup.e2e.ts +2 -2
- package/{test → playground/integration-tests/test}/specs/mapi-round-trip.spec.e2e.ts +1 -1
- package/playground/integration-tests/test/types/components.test-d.ts +113 -0
- package/playground/integration-tests/test/types/resources.test-d.ts +364 -0
- package/playground/integration-tests/test/types/stories.test-d.ts +306 -0
- package/{vitest.config.e2e.ts → playground/integration-tests/vitest.config.e2e.ts} +1 -2
- package/playground/integration-tests/vitest.config.ts +13 -0
- package/test/GUIDE.md +2 -2
- package/vitest.config.ts +2 -0
- package/dist/generated/asset_folders/client.gen.cjs +0 -10
- package/dist/generated/asset_folders/client.gen.cjs.map +0 -1
- package/dist/generated/asset_folders/client.gen.mjs +0 -10
- package/dist/generated/asset_folders/client.gen.mjs.map +0 -1
- package/dist/generated/asset_folders/sdk.gen.cjs +0 -99
- package/dist/generated/asset_folders/sdk.gen.cjs.map +0 -1
- package/dist/generated/asset_folders/sdk.gen.mjs +0 -95
- package/dist/generated/asset_folders/sdk.gen.mjs.map +0 -1
- package/dist/generated/asset_folders/types.gen.d.cts +0 -130
- package/dist/generated/asset_folders/types.gen.d.mts +0 -130
- package/dist/generated/assets/client.gen.cjs +0 -10
- package/dist/generated/assets/client.gen.cjs.map +0 -1
- package/dist/generated/assets/client.gen.mjs +0 -10
- package/dist/generated/assets/client.gen.mjs.map +0 -1
- package/dist/generated/assets/sdk.gen.cjs +0 -179
- package/dist/generated/assets/sdk.gen.cjs.map +0 -1
- package/dist/generated/assets/sdk.gen.mjs +0 -171
- package/dist/generated/assets/sdk.gen.mjs.map +0 -1
- package/dist/generated/assets/types.gen.d.cts +0 -343
- package/dist/generated/assets/types.gen.d.mts +0 -343
- package/dist/generated/component_folders/client.gen.cjs +0 -10
- package/dist/generated/component_folders/client.gen.cjs.map +0 -1
- package/dist/generated/component_folders/client.gen.mjs +0 -10
- package/dist/generated/component_folders/client.gen.mjs.map +0 -1
- package/dist/generated/component_folders/sdk.gen.cjs +0 -99
- package/dist/generated/component_folders/sdk.gen.cjs.map +0 -1
- package/dist/generated/component_folders/sdk.gen.mjs +0 -95
- package/dist/generated/component_folders/sdk.gen.mjs.map +0 -1
- package/dist/generated/component_folders/types.gen.d.cts +0 -102
- package/dist/generated/component_folders/types.gen.d.mts +0 -102
- package/dist/generated/components/client.gen.cjs +0 -10
- package/dist/generated/components/client.gen.cjs.map +0 -1
- package/dist/generated/components/client.gen.mjs +0 -10
- package/dist/generated/components/client.gen.mjs.map +0 -1
- package/dist/generated/components/sdk.gen.cjs +0 -171
- package/dist/generated/components/sdk.gen.cjs.map +0 -1
- package/dist/generated/components/sdk.gen.mjs +0 -163
- package/dist/generated/components/sdk.gen.mjs.map +0 -1
- package/dist/generated/datasource_entries/client.gen.cjs +0 -10
- package/dist/generated/datasource_entries/client.gen.cjs.map +0 -1
- package/dist/generated/datasource_entries/client.gen.mjs +0 -10
- package/dist/generated/datasource_entries/client.gen.mjs.map +0 -1
- package/dist/generated/datasource_entries/sdk.gen.cjs +0 -89
- package/dist/generated/datasource_entries/sdk.gen.cjs.map +0 -1
- package/dist/generated/datasource_entries/sdk.gen.mjs +0 -85
- package/dist/generated/datasource_entries/sdk.gen.mjs.map +0 -1
- package/dist/generated/datasource_entries/types.gen.d.cts +0 -130
- package/dist/generated/datasource_entries/types.gen.d.mts +0 -130
- package/dist/generated/datasources/client.gen.cjs +0 -10
- package/dist/generated/datasources/client.gen.cjs.map +0 -1
- package/dist/generated/datasources/client.gen.mjs +0 -10
- package/dist/generated/datasources/client.gen.mjs.map +0 -1
- package/dist/generated/datasources/sdk.gen.cjs +0 -89
- package/dist/generated/datasources/sdk.gen.cjs.map +0 -1
- package/dist/generated/datasources/sdk.gen.mjs +0 -85
- package/dist/generated/datasources/sdk.gen.mjs.map +0 -1
- package/dist/generated/datasources/types.gen.d.cts +0 -165
- package/dist/generated/datasources/types.gen.d.mts +0 -165
- package/dist/generated/internal_tags/client.gen.cjs +0 -10
- package/dist/generated/internal_tags/client.gen.cjs.map +0 -1
- package/dist/generated/internal_tags/client.gen.mjs +0 -10
- package/dist/generated/internal_tags/client.gen.mjs.map +0 -1
- package/dist/generated/internal_tags/sdk.gen.cjs +0 -74
- package/dist/generated/internal_tags/sdk.gen.cjs.map +0 -1
- package/dist/generated/internal_tags/sdk.gen.mjs +0 -71
- package/dist/generated/internal_tags/sdk.gen.mjs.map +0 -1
- package/dist/generated/internal_tags/types.gen.d.cts +0 -102
- package/dist/generated/internal_tags/types.gen.d.mts +0 -102
- package/dist/generated/presets/client.gen.cjs +0 -10
- package/dist/generated/presets/client.gen.cjs.map +0 -1
- package/dist/generated/presets/client.gen.mjs +0 -10
- package/dist/generated/presets/client.gen.mjs.map +0 -1
- package/dist/generated/presets/sdk.gen.cjs +0 -99
- package/dist/generated/presets/sdk.gen.cjs.map +0 -1
- package/dist/generated/presets/sdk.gen.mjs +0 -95
- package/dist/generated/presets/sdk.gen.mjs.map +0 -1
- package/dist/generated/presets/types.gen.d.cts +0 -171
- package/dist/generated/presets/types.gen.d.mts +0 -171
- package/dist/generated/shared/client/client.gen.cjs.map +0 -1
- package/dist/generated/shared/client/client.gen.mjs.map +0 -1
- package/dist/generated/shared/client/utils.gen.cjs.map +0 -1
- package/dist/generated/shared/client/utils.gen.mjs.map +0 -1
- package/dist/generated/shared/core/auth.gen.cjs.map +0 -1
- package/dist/generated/shared/core/auth.gen.mjs.map +0 -1
- package/dist/generated/shared/core/bodySerializer.gen.cjs.map +0 -1
- package/dist/generated/shared/core/bodySerializer.gen.mjs.map +0 -1
- package/dist/generated/shared/core/params.gen.cjs.map +0 -1
- package/dist/generated/shared/core/params.gen.mjs.map +0 -1
- package/dist/generated/shared/core/pathSerializer.gen.cjs.map +0 -1
- package/dist/generated/shared/core/pathSerializer.gen.mjs.map +0 -1
- package/dist/generated/shared/core/serverSentEvents.gen.cjs.map +0 -1
- package/dist/generated/shared/core/serverSentEvents.gen.mjs.map +0 -1
- package/dist/generated/shared/core/utils.gen.cjs.map +0 -1
- package/dist/generated/shared/core/utils.gen.mjs.map +0 -1
- package/dist/generated/spaces/client.gen.cjs +0 -10
- package/dist/generated/spaces/client.gen.cjs.map +0 -1
- package/dist/generated/spaces/client.gen.mjs +0 -10
- package/dist/generated/spaces/client.gen.mjs.map +0 -1
- package/dist/generated/spaces/sdk.gen.cjs +0 -99
- package/dist/generated/spaces/sdk.gen.cjs.map +0 -1
- package/dist/generated/spaces/sdk.gen.mjs +0 -95
- package/dist/generated/spaces/sdk.gen.mjs.map +0 -1
- package/dist/generated/spaces/types.gen.d.cts +0 -504
- package/dist/generated/spaces/types.gen.d.mts +0 -504
- package/dist/generated/stories/client.gen.cjs +0 -10
- package/dist/generated/stories/client.gen.cjs.map +0 -1
- package/dist/generated/stories/client.gen.mjs +0 -10
- package/dist/generated/stories/client.gen.mjs.map +0 -1
- package/dist/generated/stories/sdk.gen.cjs +0 -138
- package/dist/generated/stories/sdk.gen.cjs.map +0 -1
- package/dist/generated/stories/sdk.gen.mjs +0 -131
- package/dist/generated/stories/sdk.gen.mjs.map +0 -1
- package/dist/generated/stories/types.gen.d.cts +0 -1314
- package/dist/generated/stories/types.gen.d.mts +0 -1314
- package/dist/generated/users/client.gen.cjs +0 -10
- package/dist/generated/users/client.gen.cjs.map +0 -1
- package/dist/generated/users/client.gen.mjs +0 -10
- package/dist/generated/users/client.gen.mjs.map +0 -1
- package/dist/generated/users/sdk.gen.cjs +0 -44
- package/dist/generated/users/sdk.gen.cjs.map +0 -1
- package/dist/generated/users/sdk.gen.mjs +0 -43
- package/dist/generated/users/sdk.gen.mjs.map +0 -1
- package/dist/generated/users/types.gen.d.cts +0 -249
- package/dist/generated/users/types.gen.d.mts +0 -249
- /package/dist/generated/{shared → mapi}/client/client.gen.d.mts +0 -0
- /package/dist/generated/{shared → mapi}/client/index.cjs +0 -0
- /package/dist/generated/{shared → mapi}/client/index.d.mts +0 -0
- /package/dist/generated/{shared → mapi}/client/index.mjs +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# @storyblok/mapi-integration-tests
|
|
2
|
+
|
|
3
|
+
Integration tests for [`@storyblok/management-api-client`](../../) paired with [`@storyblok/schema`](../../../schema).
|
|
4
|
+
|
|
5
|
+
This playground exists so the management-api-client package itself stays free of a runtime dependency on `@storyblok/schema`, while still letting us verify that the two packages line up.
|
|
6
|
+
|
|
7
|
+
## Type tests
|
|
8
|
+
|
|
9
|
+
`test/types/*.test-d.ts` assert that `defineBlock` / `defineX*` payloads from `@storyblok/schema` are assignable to the corresponding MAPI request bodies, and that `.withTypes()` narrows responses correctly. They run in CI:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pnpm --filter @storyblok/mapi-integration-tests test
|
|
13
|
+
pnpm --filter @storyblok/mapi-integration-tests test:types
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## End-to-end tests
|
|
17
|
+
|
|
18
|
+
`test/specs/*.spec.e2e.ts` exercise a real round-trip against the Storyblok MAPI using a personal access token. Run manually only:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
pnpm --filter @storyblok/mapi-integration-tests test:e2e
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Requires `.env.qa-engineer-manual` at the repo root with `STORYBLOK_TOKEN` and `STORYBLOK_SPACE_ID`.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
+
|
|
4
|
+
case `uname` in
|
|
5
|
+
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
+
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
+
basedir=`cygpath -w "$basedir"`
|
|
8
|
+
fi
|
|
9
|
+
;;
|
|
10
|
+
esac
|
|
11
|
+
|
|
12
|
+
if [ -x "$basedir/node" ]; then
|
|
13
|
+
exec "$basedir/node" "$basedir/../eslint/bin/eslint.js" "$@"
|
|
14
|
+
else
|
|
15
|
+
exec node "$basedir/../eslint/bin/eslint.js" "$@"
|
|
16
|
+
fi
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
+
|
|
4
|
+
case `uname` in
|
|
5
|
+
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
+
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
+
basedir=`cygpath -w "$basedir"`
|
|
8
|
+
fi
|
|
9
|
+
;;
|
|
10
|
+
esac
|
|
11
|
+
|
|
12
|
+
if [ -x "$basedir/node" ]; then
|
|
13
|
+
exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
|
|
14
|
+
else
|
|
15
|
+
exec node "$basedir/../typescript/bin/tsc" "$@"
|
|
16
|
+
fi
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
+
|
|
4
|
+
case `uname` in
|
|
5
|
+
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
+
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
+
basedir=`cygpath -w "$basedir"`
|
|
8
|
+
fi
|
|
9
|
+
;;
|
|
10
|
+
esac
|
|
11
|
+
|
|
12
|
+
if [ -x "$basedir/node" ]; then
|
|
13
|
+
exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
|
|
14
|
+
else
|
|
15
|
+
exec node "$basedir/../typescript/bin/tsserver" "$@"
|
|
16
|
+
fi
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
+
|
|
4
|
+
case `uname` in
|
|
5
|
+
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
+
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
+
basedir=`cygpath -w "$basedir"`
|
|
8
|
+
fi
|
|
9
|
+
;;
|
|
10
|
+
esac
|
|
11
|
+
|
|
12
|
+
if [ -x "$basedir/node" ]; then
|
|
13
|
+
exec "$basedir/node" "$basedir/../vitest/vitest.mjs" "$@"
|
|
14
|
+
else
|
|
15
|
+
exec node "$basedir/../vitest/vitest.mjs" "$@"
|
|
16
|
+
fi
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@storyblok/mapi-integration-tests",
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "0.0.0",
|
|
5
|
+
"private": true,
|
|
6
|
+
"description": "Integration tests for @storyblok/management-api-client paired with @storyblok/schema",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"test": "vitest run",
|
|
9
|
+
"test:types": "tsc --noEmit --skipLibCheck",
|
|
10
|
+
"test:e2e": "vitest run -c vitest.config.e2e.ts",
|
|
11
|
+
"lint": "eslint .",
|
|
12
|
+
"lint:fix": "eslint . --fix"
|
|
13
|
+
},
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"@storyblok/eslint-config": "workspace:*",
|
|
16
|
+
"@storyblok/management-api-client": "workspace:*",
|
|
17
|
+
"@storyblok/schema": "workspace:*",
|
|
18
|
+
"@types/node": "^24.1.0",
|
|
19
|
+
"dotenv": "^17.3.1",
|
|
20
|
+
"eslint": "^9.39.2",
|
|
21
|
+
"typescript": "5.8.3",
|
|
22
|
+
"vitest": "^4.1.3"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { config } from 'dotenv';
|
|
2
1
|
import { resolve } from 'node:path';
|
|
2
|
+
import { config } from 'dotenv';
|
|
3
3
|
|
|
4
|
-
config({ path: resolve(import.meta.dirname, '
|
|
4
|
+
config({ path: resolve(import.meta.dirname, '../../../../../.env.qa-engineer-manual') });
|
|
5
5
|
|
|
6
6
|
if (!process.env.STORYBLOK_TOKEN || !process.env.STORYBLOK_SPACE_ID) {
|
|
7
7
|
throw new Error(
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* 4. Zod schemas generated from the OpenAPI spec accept real API responses.
|
|
10
10
|
*
|
|
11
11
|
* Run manually (never in CI):
|
|
12
|
-
* pnpm --filter @storyblok/
|
|
12
|
+
* pnpm --filter @storyblok/mapi-integration-tests test:e2e
|
|
13
13
|
*
|
|
14
14
|
* Requires .env.qa-engineer-manual at the repo root with:
|
|
15
15
|
* STORYBLOK_TOKEN=<personal-access-token>
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { defineBlock, defineBlockCreate, defineBlockUpdate, defineField } from '@storyblok/schema';
|
|
2
|
+
import { type Component as ComponentMapi, createManagementApiClient } from '@storyblok/management-api-client';
|
|
3
|
+
import { describe, expectTypeOf, it } from 'vitest';
|
|
4
|
+
|
|
5
|
+
// Nestable block — not a root story type
|
|
6
|
+
const teaserComponent = defineBlock({
|
|
7
|
+
name: 'teaser',
|
|
8
|
+
schema: [
|
|
9
|
+
defineField('text', { type: 'text' }),
|
|
10
|
+
defineField('image', { type: 'asset' }),
|
|
11
|
+
],
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
// Root content type, not nestable
|
|
15
|
+
const _pageComponent = defineBlock({
|
|
16
|
+
name: 'page',
|
|
17
|
+
is_root: true,
|
|
18
|
+
is_nestable: false,
|
|
19
|
+
schema: [
|
|
20
|
+
defineField('headline', { type: 'text', required: true }),
|
|
21
|
+
defineField('body', { type: 'richtext' }),
|
|
22
|
+
defineField('teasers', { type: 'bloks', component_whitelist: [teaserComponent.name] }),
|
|
23
|
+
],
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const CLIENT_CONFIG = { personalAccessToken: 'test-token', spaceId: 12345 };
|
|
27
|
+
|
|
28
|
+
describe('components.create body type compatibility', () => {
|
|
29
|
+
it('should produce a defineBlockCreate result assignable to components.create body', () => {
|
|
30
|
+
const createPayload = defineBlockCreate({
|
|
31
|
+
name: 'article',
|
|
32
|
+
schema: {
|
|
33
|
+
title: { type: 'text', pos: 1 },
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
type CreateBody = Parameters<ReturnType<typeof createManagementApiClient>['components']['create']>[0]['body'];
|
|
38
|
+
type ComponentCreateInput = NonNullable<CreateBody['component']>;
|
|
39
|
+
|
|
40
|
+
expectTypeOf(createPayload).toExtend<ComponentCreateInput>();
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('should produce a defineBlockUpdate result assignable to components.update body', () => {
|
|
44
|
+
const updatePayload = defineBlockUpdate({
|
|
45
|
+
display_name: 'Article',
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
type UpdateBody = Parameters<ReturnType<typeof createManagementApiClient>['components']['update']>[1]['body'];
|
|
49
|
+
type ComponentUpdateInput = NonNullable<UpdateBody['component']>;
|
|
50
|
+
|
|
51
|
+
expectTypeOf(updatePayload).toExtend<ComponentUpdateInput>();
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
describe('components.get response shape', () => {
|
|
56
|
+
it('should return a Component from components.get matching the wire shape', async () => {
|
|
57
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
58
|
+
const result = await client.components.get(123);
|
|
59
|
+
|
|
60
|
+
if (result.data?.component) {
|
|
61
|
+
// components.get() returns the wrapper Component (= Block), matching the wire shape
|
|
62
|
+
expectTypeOf(result.data.component.id).toEqualTypeOf<ComponentMapi['id']>();
|
|
63
|
+
expectTypeOf(result.data.component.name).toEqualTypeOf<ComponentMapi['name']>();
|
|
64
|
+
expectTypeOf(result.data.component).toHaveProperty('schema');
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
describe('components.create body type rejection', () => {
|
|
70
|
+
it('should reject a component create payload with wrong schema field type', () => {
|
|
71
|
+
const createPayload = defineBlockCreate({
|
|
72
|
+
name: 'article',
|
|
73
|
+
schema: {
|
|
74
|
+
// @ts-expect-error: schema value must be a field definition, not a string
|
|
75
|
+
title: 'invalid',
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
void createPayload;
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe('defineBlock result used in .withTypes() interface', () => {
|
|
83
|
+
interface StoryblokTypes {
|
|
84
|
+
components: typeof _pageComponent | typeof teaserComponent;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
it('should narrow story content to page or teaser after withTypes', async () => {
|
|
88
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
89
|
+
const result = await client.stories.get(123);
|
|
90
|
+
|
|
91
|
+
if (result.data?.story) {
|
|
92
|
+
// Only page is a root component (is_root: true); teaser is nestable-only
|
|
93
|
+
expectTypeOf(result.data.story.content.component).toEqualTypeOf<'page'>();
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('should narrow bloks field on page to whitelisted teasers', async () => {
|
|
98
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
99
|
+
const result = await client.stories.get(123);
|
|
100
|
+
|
|
101
|
+
if (result.data?.story) {
|
|
102
|
+
const story = result.data.story;
|
|
103
|
+
if (story.content.component === 'page') {
|
|
104
|
+
if (story.content.teasers) {
|
|
105
|
+
for (const teaser of story.content.teasers) {
|
|
106
|
+
// teasers whitelists only the teaser component
|
|
107
|
+
expectTypeOf(teaser.component).toEqualTypeOf<'teaser'>();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
});
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineAssetFolderCreate,
|
|
3
|
+
defineAssetFolderUpdate,
|
|
4
|
+
defineBlockFolderCreate,
|
|
5
|
+
defineBlockFolderUpdate,
|
|
6
|
+
defineDatasourceCreate,
|
|
7
|
+
defineDatasourceEntryCreate,
|
|
8
|
+
defineDatasourceEntryUpdate,
|
|
9
|
+
defineDatasourceUpdate,
|
|
10
|
+
defineInternalTagCreate,
|
|
11
|
+
defineInternalTagUpdate,
|
|
12
|
+
definePresetCreate,
|
|
13
|
+
definePresetUpdate,
|
|
14
|
+
defineSpaceCreate,
|
|
15
|
+
defineSpaceUpdate,
|
|
16
|
+
defineUserUpdate,
|
|
17
|
+
} from '@storyblok/schema';
|
|
18
|
+
import { createManagementApiClient } from '@storyblok/management-api-client';
|
|
19
|
+
import { describe, expectTypeOf, it } from 'vitest';
|
|
20
|
+
|
|
21
|
+
const CLIENT_CONFIG = { personalAccessToken: 'test-token', spaceId: 12345 };
|
|
22
|
+
|
|
23
|
+
describe('datasources type tests', () => {
|
|
24
|
+
it('should produce a defineDatasourceCreate result assignable to datasources.create body', () => {
|
|
25
|
+
const payload = defineDatasourceCreate({ name: 'Categories', slug: 'categories' });
|
|
26
|
+
|
|
27
|
+
type CreateBody = Parameters<ReturnType<typeof createManagementApiClient>['datasources']['create']>[0]['body'];
|
|
28
|
+
type InnerType = NonNullable<CreateBody['datasource']>;
|
|
29
|
+
|
|
30
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('should produce a defineDatasourceUpdate result assignable to datasources.update body', () => {
|
|
34
|
+
const payload = defineDatasourceUpdate({ name: 'Updated Categories' });
|
|
35
|
+
|
|
36
|
+
type UpdateBody = Parameters<ReturnType<typeof createManagementApiClient>['datasources']['update']>[1]['body'];
|
|
37
|
+
type InnerType = NonNullable<UpdateBody['datasource']>;
|
|
38
|
+
|
|
39
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('should return datasource in response from create', async () => {
|
|
43
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
44
|
+
const result = await client.datasources.create({
|
|
45
|
+
body: { datasource: { name: 'Test', slug: 'test' } },
|
|
46
|
+
});
|
|
47
|
+
if (result.data) {
|
|
48
|
+
expectTypeOf(result.data).toHaveProperty('datasource');
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('should return datasource in response from get', async () => {
|
|
53
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
54
|
+
const result = await client.datasources.get(1);
|
|
55
|
+
if (result.data) {
|
|
56
|
+
expectTypeOf(result.data).toHaveProperty('datasource');
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('should return datasources array in response from list', async () => {
|
|
61
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
62
|
+
const result = await client.datasources.list();
|
|
63
|
+
if (result.data) {
|
|
64
|
+
expectTypeOf(result.data).toHaveProperty('datasources');
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
describe('datasource entries type tests', () => {
|
|
70
|
+
it('should produce a defineDatasourceEntryCreate result assignable to datasourceEntries.create body', () => {
|
|
71
|
+
const payload = defineDatasourceEntryCreate({ name: 'red', value: '#ff0000', datasource_id: 42 });
|
|
72
|
+
|
|
73
|
+
type CreateBody = Parameters<ReturnType<typeof createManagementApiClient>['datasourceEntries']['create']>[0]['body'];
|
|
74
|
+
type InnerType = NonNullable<CreateBody['datasource_entry']>;
|
|
75
|
+
|
|
76
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('should produce a defineDatasourceEntryUpdate result assignable to datasourceEntries.update body', () => {
|
|
80
|
+
const payload = defineDatasourceEntryUpdate({ value: '#00ff00' });
|
|
81
|
+
|
|
82
|
+
type UpdateBody = Parameters<ReturnType<typeof createManagementApiClient>['datasourceEntries']['update']>[1]['body'];
|
|
83
|
+
type InnerType = NonNullable<UpdateBody['datasource_entry']>;
|
|
84
|
+
|
|
85
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('should return datasource_entry in response from create', async () => {
|
|
89
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
90
|
+
const result = await client.datasourceEntries.create({
|
|
91
|
+
body: { datasource_entry: { name: 'red', value: '#ff0000', datasource_id: 42 } },
|
|
92
|
+
});
|
|
93
|
+
if (result.data) {
|
|
94
|
+
expectTypeOf(result.data).toHaveProperty('datasource_entry');
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('should return datasource_entry in response from get', async () => {
|
|
99
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
100
|
+
const result = await client.datasourceEntries.get(1);
|
|
101
|
+
if (result.data) {
|
|
102
|
+
expectTypeOf(result.data).toHaveProperty('datasource_entry');
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it('should return datasource_entries array in response from list', async () => {
|
|
107
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
108
|
+
const result = await client.datasourceEntries.list();
|
|
109
|
+
if (result.data) {
|
|
110
|
+
expectTypeOf(result.data).toHaveProperty('datasource_entries');
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
describe('asset folders type tests', () => {
|
|
116
|
+
it('should produce a defineAssetFolderCreate result assignable to assetFolders.create body', () => {
|
|
117
|
+
const payload = defineAssetFolderCreate({ name: 'Images' });
|
|
118
|
+
|
|
119
|
+
type CreateBody = Parameters<ReturnType<typeof createManagementApiClient>['assetFolders']['create']>[0]['body'];
|
|
120
|
+
type InnerType = NonNullable<CreateBody['asset_folder']>;
|
|
121
|
+
|
|
122
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('should produce a defineAssetFolderUpdate result assignable to assetFolders.update body', () => {
|
|
126
|
+
const payload = defineAssetFolderUpdate({ name: 'Updated Images' });
|
|
127
|
+
|
|
128
|
+
type UpdateBody = Parameters<ReturnType<typeof createManagementApiClient>['assetFolders']['update']>[1]['body'];
|
|
129
|
+
type InnerType = NonNullable<UpdateBody['asset_folder']>;
|
|
130
|
+
|
|
131
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it('should return asset_folder in response from create', async () => {
|
|
135
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
136
|
+
const result = await client.assetFolders.create({
|
|
137
|
+
body: { asset_folder: { name: 'Photos' } },
|
|
138
|
+
});
|
|
139
|
+
if (result.data) {
|
|
140
|
+
expectTypeOf(result.data).toHaveProperty('asset_folder');
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it('should return asset_folder in response from get', async () => {
|
|
145
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
146
|
+
const result = await client.assetFolders.get(1);
|
|
147
|
+
if (result.data) {
|
|
148
|
+
expectTypeOf(result.data).toHaveProperty('asset_folder');
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
it('should return asset_folders array in response from list', async () => {
|
|
153
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
154
|
+
const result = await client.assetFolders.list();
|
|
155
|
+
if (result.data) {
|
|
156
|
+
expectTypeOf(result.data).toHaveProperty('asset_folders');
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
describe('component folders type tests', () => {
|
|
162
|
+
it('should produce a defineBlockFolderCreate result assignable to componentFolders.create body', () => {
|
|
163
|
+
const payload = defineBlockFolderCreate({ name: 'Layout' });
|
|
164
|
+
|
|
165
|
+
type CreateBody = Parameters<ReturnType<typeof createManagementApiClient>['componentFolders']['create']>[0]['body'];
|
|
166
|
+
type InnerType = NonNullable<CreateBody['component_group']>;
|
|
167
|
+
|
|
168
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it('should produce a defineBlockFolderUpdate result assignable to componentFolders.update body', () => {
|
|
172
|
+
const payload = defineBlockFolderUpdate({ name: 'Updated Layout' });
|
|
173
|
+
|
|
174
|
+
type UpdateBody = Parameters<ReturnType<typeof createManagementApiClient>['componentFolders']['update']>[1]['body'];
|
|
175
|
+
type InnerType = NonNullable<UpdateBody['component_group']>;
|
|
176
|
+
|
|
177
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it('should return component_group in response from create', async () => {
|
|
181
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
182
|
+
const result = await client.componentFolders.create({
|
|
183
|
+
body: { component_group: { name: 'Layout' } },
|
|
184
|
+
});
|
|
185
|
+
if (result.data) {
|
|
186
|
+
expectTypeOf(result.data).toHaveProperty('component_group');
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
it('should return component_group in response from get', async () => {
|
|
191
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
192
|
+
const result = await client.componentFolders.get(1);
|
|
193
|
+
if (result.data) {
|
|
194
|
+
expectTypeOf(result.data).toHaveProperty('component_group');
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
it('should return component_groups array in response from list', async () => {
|
|
199
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
200
|
+
const result = await client.componentFolders.list();
|
|
201
|
+
if (result.data) {
|
|
202
|
+
expectTypeOf(result.data).toHaveProperty('component_groups');
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
describe('internal tags type tests', () => {
|
|
208
|
+
it('should produce a defineInternalTagCreate result assignable to internalTags.create body', () => {
|
|
209
|
+
const payload = defineInternalTagCreate({ name: 'hero', object_type: 'asset' });
|
|
210
|
+
|
|
211
|
+
type CreateBody = Parameters<ReturnType<typeof createManagementApiClient>['internalTags']['create']>[0]['body'];
|
|
212
|
+
type InnerType = NonNullable<CreateBody['internal_tag']>;
|
|
213
|
+
|
|
214
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
it('should produce a defineInternalTagUpdate result assignable to internalTags.update body', () => {
|
|
218
|
+
const payload = defineInternalTagUpdate({ name: 'hero-image' });
|
|
219
|
+
|
|
220
|
+
type UpdateBody = Parameters<ReturnType<typeof createManagementApiClient>['internalTags']['update']>[1]['body'];
|
|
221
|
+
type InnerType = NonNullable<UpdateBody['internal_tag']>;
|
|
222
|
+
|
|
223
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it('should return internal_tag in response from create', async () => {
|
|
227
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
228
|
+
const result = await client.internalTags.create({
|
|
229
|
+
body: { internal_tag: { name: 'hero' } },
|
|
230
|
+
});
|
|
231
|
+
if (result.data) {
|
|
232
|
+
expectTypeOf(result.data).toHaveProperty('internal_tag');
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
it('should return internal_tags array in response from list', async () => {
|
|
237
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
238
|
+
const result = await client.internalTags.list();
|
|
239
|
+
if (result.data) {
|
|
240
|
+
expectTypeOf(result.data).toHaveProperty('internal_tags');
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
describe('presets type tests', () => {
|
|
246
|
+
it('should produce a definePresetCreate result assignable to presets.create body', () => {
|
|
247
|
+
const payload = definePresetCreate({ name: 'Hero Dark', component_id: 42 });
|
|
248
|
+
|
|
249
|
+
type CreateBody = Parameters<ReturnType<typeof createManagementApiClient>['presets']['create']>[0]['body'];
|
|
250
|
+
type InnerType = NonNullable<CreateBody['preset']>;
|
|
251
|
+
|
|
252
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
it('should produce a definePresetUpdate result assignable to presets.update body', () => {
|
|
256
|
+
const payload = definePresetUpdate({ name: 'Hero Light' });
|
|
257
|
+
|
|
258
|
+
type UpdateBody = Parameters<ReturnType<typeof createManagementApiClient>['presets']['update']>[1]['body'];
|
|
259
|
+
type InnerType = NonNullable<UpdateBody['preset']>;
|
|
260
|
+
|
|
261
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
it('should return preset in response from create', async () => {
|
|
265
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
266
|
+
const result = await client.presets.create({
|
|
267
|
+
body: { preset: { name: 'Hero Dark', component_id: 42 } },
|
|
268
|
+
});
|
|
269
|
+
if (result.data) {
|
|
270
|
+
expectTypeOf(result.data).toHaveProperty('preset');
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
it('should return preset in response from get', async () => {
|
|
275
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
276
|
+
const result = await client.presets.get(1);
|
|
277
|
+
if (result.data) {
|
|
278
|
+
expectTypeOf(result.data).toHaveProperty('preset');
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
it('should return presets array in response from list', async () => {
|
|
283
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
284
|
+
const result = await client.presets.list();
|
|
285
|
+
if (result.data) {
|
|
286
|
+
expectTypeOf(result.data).toHaveProperty('presets');
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
describe('spaces type tests', () => {
|
|
292
|
+
it('should produce a defineSpaceCreate result assignable to spaces.create body', () => {
|
|
293
|
+
const payload = defineSpaceCreate({ name: 'My New Space' });
|
|
294
|
+
|
|
295
|
+
type CreateBody = Parameters<ReturnType<typeof createManagementApiClient>['spaces']['create']>[0]['body'];
|
|
296
|
+
type InnerType = CreateBody['space'];
|
|
297
|
+
|
|
298
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
it('should produce a defineSpaceUpdate result assignable to spaces.update body', () => {
|
|
302
|
+
const payload = defineSpaceUpdate({ name: 'Updated Space Name' });
|
|
303
|
+
|
|
304
|
+
type UpdateBody = Parameters<ReturnType<typeof createManagementApiClient>['spaces']['update']>[0]['body'];
|
|
305
|
+
type InnerType = UpdateBody['space'];
|
|
306
|
+
|
|
307
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
it('should return space in response from create', async () => {
|
|
311
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
312
|
+
const result = await client.spaces.create({
|
|
313
|
+
body: { space: { name: 'Test Space' } },
|
|
314
|
+
});
|
|
315
|
+
if (result.data) {
|
|
316
|
+
expectTypeOf(result.data).toHaveProperty('space');
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
it('should return space in response from get', async () => {
|
|
321
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
322
|
+
const result = await client.spaces.get();
|
|
323
|
+
if (result.data) {
|
|
324
|
+
expectTypeOf(result.data).toHaveProperty('space');
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
it('should return spaces array in response from list', async () => {
|
|
329
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
330
|
+
const result = await client.spaces.list();
|
|
331
|
+
if (result.data) {
|
|
332
|
+
expectTypeOf(result.data).toHaveProperty('spaces');
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
describe('users type tests', () => {
|
|
338
|
+
it('should produce a defineUserUpdate result assignable to users.updateMe body', () => {
|
|
339
|
+
const payload = defineUserUpdate({ firstname: 'Jane', lastname: 'Doe' });
|
|
340
|
+
|
|
341
|
+
type UpdateBody = Parameters<ReturnType<typeof createManagementApiClient>['users']['updateMe']>[0]['body'];
|
|
342
|
+
type InnerType = UpdateBody['user'];
|
|
343
|
+
|
|
344
|
+
expectTypeOf(payload).toExtend<InnerType>();
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
it('should return user in response from updateMe', async () => {
|
|
348
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
349
|
+
const result = await client.users.updateMe({
|
|
350
|
+
body: { user: { firstname: 'Jane' } },
|
|
351
|
+
});
|
|
352
|
+
if (result.data) {
|
|
353
|
+
expectTypeOf(result.data).toHaveProperty('user');
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
it('should return user in response from me', async () => {
|
|
358
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
359
|
+
const result = await client.users.me();
|
|
360
|
+
if (result.data) {
|
|
361
|
+
expectTypeOf(result.data).toHaveProperty('user');
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
});
|