@backstage/backend-test-utils 1.11.1-next.2 → 1.11.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @backstage/backend-test-utils
2
2
 
3
+ ## 1.11.1
4
+
5
+ ### Patch Changes
6
+
7
+ - dee4283: Added `pluginId` field to `ActionsServiceAction` type, populated from the registering plugin's metadata.
8
+ - 164711a: Added `cancelTask` to `MockSchedulerService` and mock scheduler service factory.
9
+ - 62f0a53: Fixed error forwarding in the actions registry so that known errors like `InputError` and `NotFoundError` thrown by actions preserve their original status codes and messages instead of being wrapped in `ForwardedError` and coerced to 500.
10
+ - a49a40d: Updated dependency `zod` to `^3.25.76 || ^4.0.0` & migrated to `/v3` or `/v4` imports.
11
+ - 1ee5b28: Adds a new metrics service mock to be leveraged in tests
12
+ - Updated dependencies
13
+ - @backstage/backend-plugin-api@1.8.0
14
+ - @backstage/backend-defaults@0.16.0
15
+ - @backstage/plugin-permission-common@0.9.7
16
+ - @backstage/plugin-auth-node@0.6.14
17
+ - @backstage/backend-app-api@1.6.0
18
+ - @backstage/plugin-events-node@0.4.20
19
+
3
20
  ## 1.11.1-next.2
4
21
 
5
22
  ### Patch Changes
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var errors = require('@backstage/errors');
4
- var zod = require('zod');
4
+ var v3 = require('zod/v3');
5
5
  var zodToJsonSchema = require('zod-to-json-schema');
6
6
  require('../../services/mockServices.cjs.js');
7
7
  var mockCredentials = require('../../services/mockCredentials.cjs.js');
@@ -24,6 +24,7 @@ class MockActionsRegistry {
24
24
  return {
25
25
  actions: Array.from(this.actions.entries()).map(([id, action]) => ({
26
26
  id,
27
+ pluginId: "test",
27
28
  name: action.name,
28
29
  title: action.title,
29
30
  description: action.description,
@@ -33,8 +34,8 @@ class MockActionsRegistry {
33
34
  readOnly: action.attributes?.readOnly ?? false
34
35
  },
35
36
  schema: {
36
- input: action.schema?.input ? zodToJsonSchema__default.default(action.schema.input(zod.z)) : zodToJsonSchema__default.default(zod.z.object({})),
37
- output: action.schema?.output ? zodToJsonSchema__default.default(action.schema.output(zod.z)) : zodToJsonSchema__default.default(zod.z.object({}))
37
+ input: action.schema?.input ? zodToJsonSchema__default.default(action.schema.input(v3.z)) : zodToJsonSchema__default.default(v3.z.object({})),
38
+ output: action.schema?.output ? zodToJsonSchema__default.default(action.schema.output(v3.z)) : zodToJsonSchema__default.default(v3.z.object({}))
38
39
  }
39
40
  }))
40
41
  };
@@ -47,7 +48,7 @@ class MockActionsRegistry {
47
48
  `Action "${opts.id}" not found, available actions: ${availableActionIds ? `"${availableActionIds}"` : "none"}`
48
49
  );
49
50
  }
50
- const input = action.schema?.input ? action.schema.input(zod.z).safeParse(opts.input) : { success: true, data: void 0 };
51
+ const input = action.schema?.input ? action.schema.input(v3.z).safeParse(opts.input) : { success: true, data: void 0 };
51
52
  if (!input.success) {
52
53
  throw new errors.InputError(`Invalid input to action "${opts.id}"`, input.error);
53
54
  }
@@ -56,7 +57,7 @@ class MockActionsRegistry {
56
57
  credentials: opts.credentials ?? mockCredentials.mockCredentials.none(),
57
58
  logger: this.logger
58
59
  });
59
- const output = action.schema?.output ? action.schema.output(zod.z).safeParse(result?.output) : { success: true, data: result?.output };
60
+ const output = action.schema?.output ? action.schema.output(v3.z).safeParse(result?.output) : { success: true, data: result?.output };
60
61
  if (!output.success) {
61
62
  throw new errors.InputError(
62
63
  `Invalid output from action "${opts.id}"`,
@@ -1 +1 @@
1
- {"version":3,"file":"MockActionsRegistry.cjs.js","sources":["../../../src/alpha/services/MockActionsRegistry.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n BackstageCredentials,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport { InputError, NotFoundError } from '@backstage/errors';\nimport { JsonObject, JsonValue } from '@backstage/types';\nimport { z, AnyZodObject } from 'zod';\nimport zodToJsonSchema from 'zod-to-json-schema';\nimport { mockCredentials } from '../../services';\nimport {\n ActionsRegistryActionOptions,\n ActionsRegistryService,\n ActionsService,\n ActionsServiceAction,\n} from '@backstage/backend-plugin-api/alpha';\n\n/**\n * A mock implementation of the ActionsRegistryService and ActionsService that can be used in tests.\n *\n * This is useful for testing actions that are registered with the ActionsRegistryService and ActionsService.\n *\n * The plugin ID is hardcoded to `testing` in the mock implementation.\n *\n * @example\n * ```ts\n * const actionsRegistry = mockServices.actionsRegistry();\n *\n * actionsRegistry.register({\n * name: 'test',\n * title: 'Test',\n * description: 'Test',\n * schema: {\n * input: z.object({ name: z.string() }),\n * output: z.object({ name: z.string() }),\n * },\n * action: async ({ input }) => ({ output: { name: input.name } }),\n * });\n *\n *\n * const result = await actionsRegistry.invoke({\n * id: 'testing:test',\n * input: { name: 'test' },\n * });\n *\n * expect(result).toEqual({ output: { name: 'test' } });\n * ```\n *\n * @alpha\n */\nexport class MockActionsRegistry\n implements ActionsRegistryService, ActionsService\n{\n private readonly logger: LoggerService;\n\n private constructor(logger: LoggerService) {\n this.logger = logger;\n }\n\n static create(opts: { logger: LoggerService }) {\n return new MockActionsRegistry(opts.logger);\n }\n\n readonly actions: Map<string, ActionsRegistryActionOptions<any, any>> =\n new Map();\n\n async list(): Promise<{ actions: ActionsServiceAction[] }> {\n return {\n actions: Array.from(this.actions.entries()).map(([id, action]) => ({\n id,\n name: action.name,\n title: action.title,\n description: action.description,\n attributes: {\n destructive: action.attributes?.destructive ?? true,\n idempotent: action.attributes?.idempotent ?? false,\n readOnly: action.attributes?.readOnly ?? false,\n },\n schema: {\n input: action.schema?.input\n ? zodToJsonSchema(action.schema.input(z))\n : zodToJsonSchema(z.object({})),\n output: action.schema?.output\n ? zodToJsonSchema(action.schema.output(z))\n : zodToJsonSchema(z.object({})),\n } as ActionsServiceAction['schema'],\n })),\n };\n }\n\n async invoke(opts: {\n id: string;\n input?: JsonObject;\n credentials?: BackstageCredentials;\n }): Promise<{ output: JsonValue }> {\n const action = this.actions.get(opts.id);\n\n if (!action) {\n const availableActionIds = Array.from(this.actions.keys()).join(', ');\n throw new NotFoundError(\n `Action \"${opts.id}\" not found, available actions: ${\n availableActionIds ? `\"${availableActionIds}\"` : 'none'\n }`,\n );\n }\n\n const input = action.schema?.input\n ? action.schema.input(z).safeParse(opts.input)\n : ({ success: true, data: undefined } as const);\n\n if (!input.success) {\n throw new InputError(`Invalid input to action \"${opts.id}\"`, input.error);\n }\n\n const result = await action.action({\n input: input.data,\n credentials: opts.credentials ?? mockCredentials.none(),\n logger: this.logger,\n });\n\n const output = action.schema?.output\n ? action.schema.output(z).safeParse(result?.output)\n : ({ success: true, data: result?.output } as const);\n\n if (!output.success) {\n throw new InputError(\n `Invalid output from action \"${opts.id}\"`,\n output.error,\n );\n }\n\n return { output: output.data };\n }\n\n register<\n TInputSchema extends AnyZodObject,\n TOutputSchema extends AnyZodObject,\n >(options: ActionsRegistryActionOptions<TInputSchema, TOutputSchema>): void {\n // hardcode test: prefix similar to how the default actions registry does it\n // and other places around the testing ecosystem:\n // https://github.com/backstage/backstage/blob/a9219496d5c073aaa0b8caf32ece10455cf65e61/packages/backend-test-utils/src/next/services/mockServices.ts#L321\n // https://github.com/backstage/backstage/blob/861f162b4a39117b824669d67a951ed1db142e3d/packages/backend-test-utils/src/next/wiring/ServiceFactoryTester.ts#L99\n const id = `test:${options.name}`;\n\n if (this.actions.has(id)) {\n throw new Error(`Action with id \"${id}\" is already registered`);\n }\n\n this.actions.set(id, options);\n }\n}\n"],"names":["zodToJsonSchema","z","NotFoundError","InputError","mockCredentials"],"mappings":"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"}
1
+ {"version":3,"file":"MockActionsRegistry.cjs.js","sources":["../../../src/alpha/services/MockActionsRegistry.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n BackstageCredentials,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport { InputError, NotFoundError } from '@backstage/errors';\nimport { JsonObject, JsonValue } from '@backstage/types';\nimport { z, AnyZodObject } from 'zod/v3';\nimport zodToJsonSchema from 'zod-to-json-schema';\nimport { mockCredentials } from '../../services';\nimport {\n ActionsRegistryActionOptions,\n ActionsRegistryService,\n ActionsService,\n ActionsServiceAction,\n} from '@backstage/backend-plugin-api/alpha';\n\n/**\n * A mock implementation of the ActionsRegistryService and ActionsService that can be used in tests.\n *\n * This is useful for testing actions that are registered with the ActionsRegistryService and ActionsService.\n *\n * The plugin ID is hardcoded to `testing` in the mock implementation.\n *\n * @example\n * ```ts\n * const actionsRegistry = mockServices.actionsRegistry();\n *\n * actionsRegistry.register({\n * name: 'test',\n * title: 'Test',\n * description: 'Test',\n * schema: {\n * input: z.object({ name: z.string() }),\n * output: z.object({ name: z.string() }),\n * },\n * action: async ({ input }) => ({ output: { name: input.name } }),\n * });\n *\n *\n * const result = await actionsRegistry.invoke({\n * id: 'testing:test',\n * input: { name: 'test' },\n * });\n *\n * expect(result).toEqual({ output: { name: 'test' } });\n * ```\n *\n * @alpha\n */\nexport class MockActionsRegistry\n implements ActionsRegistryService, ActionsService\n{\n private readonly logger: LoggerService;\n\n private constructor(logger: LoggerService) {\n this.logger = logger;\n }\n\n static create(opts: { logger: LoggerService }) {\n return new MockActionsRegistry(opts.logger);\n }\n\n readonly actions: Map<string, ActionsRegistryActionOptions<any, any>> =\n new Map();\n\n async list(): Promise<{ actions: ActionsServiceAction[] }> {\n return {\n actions: Array.from(this.actions.entries()).map(([id, action]) => ({\n id,\n pluginId: 'test',\n name: action.name,\n title: action.title,\n description: action.description,\n attributes: {\n destructive: action.attributes?.destructive ?? true,\n idempotent: action.attributes?.idempotent ?? false,\n readOnly: action.attributes?.readOnly ?? false,\n },\n schema: {\n input: action.schema?.input\n ? zodToJsonSchema(action.schema.input(z))\n : zodToJsonSchema(z.object({})),\n output: action.schema?.output\n ? zodToJsonSchema(action.schema.output(z))\n : zodToJsonSchema(z.object({})),\n } as ActionsServiceAction['schema'],\n })),\n };\n }\n\n async invoke(opts: {\n id: string;\n input?: JsonObject;\n credentials?: BackstageCredentials;\n }): Promise<{ output: JsonValue }> {\n const action = this.actions.get(opts.id);\n\n if (!action) {\n const availableActionIds = Array.from(this.actions.keys()).join(', ');\n throw new NotFoundError(\n `Action \"${opts.id}\" not found, available actions: ${\n availableActionIds ? `\"${availableActionIds}\"` : 'none'\n }`,\n );\n }\n\n const input = action.schema?.input\n ? action.schema.input(z).safeParse(opts.input)\n : ({ success: true, data: undefined } as const);\n\n if (!input.success) {\n throw new InputError(`Invalid input to action \"${opts.id}\"`, input.error);\n }\n\n const result = await action.action({\n input: input.data,\n credentials: opts.credentials ?? mockCredentials.none(),\n logger: this.logger,\n });\n\n const output = action.schema?.output\n ? action.schema.output(z).safeParse(result?.output)\n : ({ success: true, data: result?.output } as const);\n\n if (!output.success) {\n throw new InputError(\n `Invalid output from action \"${opts.id}\"`,\n output.error,\n );\n }\n\n return { output: output.data };\n }\n\n register<\n TInputSchema extends AnyZodObject,\n TOutputSchema extends AnyZodObject,\n >(options: ActionsRegistryActionOptions<TInputSchema, TOutputSchema>): void {\n // hardcode test: prefix similar to how the default actions registry does it\n // and other places around the testing ecosystem:\n // https://github.com/backstage/backstage/blob/a9219496d5c073aaa0b8caf32ece10455cf65e61/packages/backend-test-utils/src/next/services/mockServices.ts#L321\n // https://github.com/backstage/backstage/blob/861f162b4a39117b824669d67a951ed1db142e3d/packages/backend-test-utils/src/next/wiring/ServiceFactoryTester.ts#L99\n const id = `test:${options.name}`;\n\n if (this.actions.has(id)) {\n throw new Error(`Action with id \"${id}\" is already registered`);\n }\n\n this.actions.set(id, options);\n }\n}\n"],"names":["zodToJsonSchema","z","NotFoundError","InputError","mockCredentials"],"mappings":"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"}
package/dist/alpha.d.ts CHANGED
@@ -4,7 +4,7 @@ import { LoggerService, BackstageCredentials } from '@backstage/backend-plugin-a
4
4
  import * as _backstage_backend_plugin_api_alpha from '@backstage/backend-plugin-api/alpha';
5
5
  import { ActionsRegistryService, ActionsService, ActionsRegistryActionOptions, ActionsServiceAction, MetricsService } from '@backstage/backend-plugin-api/alpha';
6
6
  import { JsonObject, JsonValue } from '@backstage/types';
7
- import { AnyZodObject } from 'zod';
7
+ import { AnyZodObject } from 'zod/v3';
8
8
 
9
9
  /**
10
10
  * A mock implementation of the ActionsRegistryService and ActionsService that can be used in tests.
@@ -10,7 +10,7 @@ var rootHttpRouter = require('@backstage/backend-defaults/rootHttpRouter');
10
10
  var discovery = require('@backstage/backend-defaults/discovery');
11
11
  var ActionsRegistryServiceMock = require('../alpha/services/ActionsRegistryServiceMock.cjs.js');
12
12
  require('@backstage/errors');
13
- require('zod');
13
+ require('zod/v3');
14
14
  require('zod-to-json-schema');
15
15
  var ActionsServiceMock = require('../alpha/services/ActionsServiceMock.cjs.js');
16
16
  var MetricsServiceMock = require('../alpha/services/MetricsServiceMock.cjs.js');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/backend-test-utils",
3
- "version": "1.11.1-next.2",
3
+ "version": "1.11.1",
4
4
  "description": "Test helpers library for Backstage backends",
5
5
  "backstage": {
6
6
  "role": "node-library"
@@ -57,15 +57,15 @@
57
57
  "test": "backstage-cli package test"
58
58
  },
59
59
  "dependencies": {
60
- "@backstage/backend-app-api": "1.6.0-next.1",
61
- "@backstage/backend-defaults": "0.16.0-next.2",
62
- "@backstage/backend-plugin-api": "1.8.0-next.1",
63
- "@backstage/config": "1.3.6",
64
- "@backstage/errors": "1.2.7",
65
- "@backstage/plugin-auth-node": "0.6.14-next.2",
66
- "@backstage/plugin-events-node": "0.4.20-next.1",
67
- "@backstage/plugin-permission-common": "0.9.6",
68
- "@backstage/types": "1.2.2",
60
+ "@backstage/backend-app-api": "^1.6.0",
61
+ "@backstage/backend-defaults": "^0.16.0",
62
+ "@backstage/backend-plugin-api": "^1.8.0",
63
+ "@backstage/config": "^1.3.6",
64
+ "@backstage/errors": "^1.2.7",
65
+ "@backstage/plugin-auth-node": "^0.6.14",
66
+ "@backstage/plugin-events-node": "^0.4.20",
67
+ "@backstage/plugin-permission-common": "^0.9.7",
68
+ "@backstage/types": "^1.2.2",
69
69
  "@keyv/memcache": "^2.0.1",
70
70
  "@keyv/redis": "^4.0.1",
71
71
  "@keyv/valkey": "^1.0.1",
@@ -87,11 +87,11 @@
87
87
  "text-extensions": "^2.4.0",
88
88
  "uuid": "^11.0.0",
89
89
  "yn": "^4.0.0",
90
- "zod": "^3.25.76",
90
+ "zod": "^3.25.76 || ^4.0.0",
91
91
  "zod-to-json-schema": "^3.25.1"
92
92
  },
93
93
  "devDependencies": {
94
- "@backstage/cli": "0.36.0-next.2",
94
+ "@backstage/cli": "^0.36.0",
95
95
  "@types/jest": "*",
96
96
  "@types/lodash": "^4.14.151",
97
97
  "@types/supertest": "^2.0.8",