diff --git a/packages/scaffolder-test-utils/api-report.md b/packages/scaffolder-test-utils/api-report.md
index b95b020f1c..4e50a55f5e 100644
--- a/packages/scaffolder-test-utils/api-report.md
+++ b/packages/scaffolder-test-utils/api-report.md
@@ -3,15 +3,30 @@
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
+///
+
import { ActionContext } from '@backstage/plugin-scaffolder-node';
import { JsonObject } from '@backstage/types';
+import { TaskSecrets } from '@backstage/plugin-scaffolder-node';
+import { TemplateInfo } from '@backstage/plugin-scaffolder-common';
+import * as winston from 'winston';
+import { Writable } from 'stream';
// @public
export const createMockActionContext: <
TActionInput extends JsonObject = JsonObject,
TActionOutput extends JsonObject = JsonObject,
>(
- input?: TActionInput | undefined,
+ options?:
+ | {
+ input?: TActionInput | undefined;
+ logger?: winston.Logger | undefined;
+ logStream?: Writable | undefined;
+ secrets?: TaskSecrets | undefined;
+ templateInfo?: TemplateInfo | undefined;
+ workspacePath?: string | undefined;
+ }
+ | undefined,
) => ActionContext;
// (No @packageDocumentation comment for this package)
diff --git a/packages/scaffolder-test-utils/src/actions/mockActionConext.ts b/packages/scaffolder-test-utils/src/actions/mockActionConext.ts
index b9c79b68bf..1b9f6200f9 100644
--- a/packages/scaffolder-test-utils/src/actions/mockActionConext.ts
+++ b/packages/scaffolder-test-utils/src/actions/mockActionConext.ts
@@ -14,30 +14,30 @@
* limitations under the License.
*/
-import { PassThrough } from 'stream';
+import { PassThrough, Writable } from 'stream';
import { getVoidLogger } from '@backstage/backend-common';
import { createMockDirectory } from '@backstage/backend-test-utils';
import { JsonObject } from '@backstage/types';
-import { ActionContext } from '@backstage/plugin-scaffolder-node';
+import { ActionContext, TaskSecrets } from '@backstage/plugin-scaffolder-node';
import * as winston from 'winston';
import { TemplateInfo } from '@backstage/plugin-scaffolder-common';
/**
* A utility method to create a mock action context for scaffolder actions.
*
- *
- *
* @public
- * @param options
+ * @param options - optional parameters to override default mock context
*/
export const createMockActionContext = <
TActionInput extends JsonObject = JsonObject,
TActionOutput extends JsonObject = JsonObject,
>(options?: {
input?: TActionInput;
- workspacePath?: string;
logger?: winston.Logger;
+ logStream?: Writable;
+ secrets?: TaskSecrets;
templateInfo?: TemplateInfo;
+ workspacePath?: string;
}): ActionContext => {
const defaultContext = {
logger: getVoidLogger(),
@@ -58,12 +58,19 @@ export const createMockActionContext = <
};
}
- const { input, workspacePath, logger, templateInfo } = options;
+ const { input, logger, logStream, secrets, templateInfo, workspacePath } =
+ options;
+
return {
...defaultContext,
...(workspacePath ? { workspacePath } : createDefaultWorkspace()),
+ ...(workspacePath && {
+ createTemporaryDirectory: jest.fn().mockResolvedValue(workspacePath),
+ }),
...(logger && { logger }),
+ ...(logStream && { logStream }),
...(input && { input }),
+ ...(secrets && { secrets }),
templateInfo,
};
};
diff --git a/plugins/scaffolder-backend-module-bitbucket-server/src/actions/bitbucketServer.test.ts b/plugins/scaffolder-backend-module-bitbucket-server/src/actions/bitbucketServer.test.ts
index 9a51fef5e8..1c1ec09368 100644
--- a/plugins/scaffolder-backend-module-bitbucket-server/src/actions/bitbucketServer.test.ts
+++ b/plugins/scaffolder-backend-module-bitbucket-server/src/actions/bitbucketServer.test.ts
@@ -60,8 +60,10 @@ describe('publish:bitbucketServer', () => {
const integrations = ScmIntegrations.fromConfig(config);
const action = createPublishBitbucketServerAction({ integrations, config });
const mockContext = createMockActionContext({
- repoUrl: 'hosted.bitbucket.com?project=project&repo=repo',
- repoVisibility: 'private' as const,
+ input: {
+ repoUrl: 'hosted.bitbucket.com?project=project&repo=repo',
+ repoVisibility: 'private' as const,
+ },
});
const server = setupServer();
setupRequestMockHandlers(server);
diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json
index dc96a0f356..72514db885 100644
--- a/plugins/scaffolder-backend-module-gitlab/package.json
+++ b/plugins/scaffolder-backend-module-gitlab/package.json
@@ -57,6 +57,7 @@
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
"@backstage/core-app-api": "workspace:^",
+ "@backstage/scaffolder-test-utils": "workspace:^",
"jest-date-mock": "^1.0.8"
},
"files": [
diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabGroupEnsureExistsAction.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabGroupEnsureExistsAction.test.ts
index 72dcddc83d..a94a844d4c 100644
--- a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabGroupEnsureExistsAction.test.ts
+++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabGroupEnsureExistsAction.test.ts
@@ -14,9 +14,8 @@
* limitations under the License.
*/
-import { PassThrough } from 'stream';
import { createGitlabGroupEnsureExistsAction } from './createGitlabGroupEnsureExistsAction';
-import { getVoidLogger } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { ConfigReader } from '@backstage/core-app-api';
import { ScmIntegrations } from '@backstage/integration';
@@ -35,13 +34,7 @@ jest.mock('@gitbeaker/node', () => ({
}));
describe('gitlab:group:ensureExists', () => {
- const mockContext = {
- workspacePath: 'lol',
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ const mockContext = createMockActionContext();
afterEach(() => {
jest.resetAllMocks();
diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabIssueAction.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabIssueAction.test.ts
index fe9e556656..d33cbb37dc 100644
--- a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabIssueAction.test.ts
+++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabIssueAction.test.ts
@@ -14,8 +14,7 @@
* limitations under the License.
*/
-import { PassThrough } from 'stream';
-import { getVoidLogger } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { createGitlabIssueAction, IssueType } from './createGitlabIssueAction';
import { ConfigReader } from '@backstage/core-app-api';
import { ScmIntegrations } from '@backstage/integration';
@@ -60,18 +59,14 @@ describe('gitlab:issues:create', () => {
const action = createGitlabIssueAction({ integrations });
it('should return a Gitlab issue when called with minimal input params', async () => {
- const mockContext = {
+ const mockContext = createMockActionContext({
input: {
repoUrl: 'gitlab.com?repo=repo&owner=owner',
projectId: 123,
title: 'Computer banks to rule the world',
},
workspacePath: 'seen2much',
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
mockGitlabClient.Issues.create.mockResolvedValue({
id: 42,
@@ -109,7 +104,7 @@ describe('gitlab:issues:create', () => {
});
it('should return a Gitlab issue when called with oAuth Token', async () => {
- const mockContext = {
+ const mockContext = createMockActionContext({
input: {
repoUrl: 'gitlab.com?repo=repo&owner=owner',
projectId: 123,
@@ -117,11 +112,7 @@ describe('gitlab:issues:create', () => {
token: 'myAwesomeToken',
},
workspacePath: 'seen2much',
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
mockGitlabClient.Issues.create.mockResolvedValue({
id: 42,
@@ -159,7 +150,7 @@ describe('gitlab:issues:create', () => {
});
it('should return a Gitlab issue when called with several input params', async () => {
- const mockContext = {
+ const mockContext = createMockActionContext({
input: {
repoUrl: 'gitlab.com?repo=repo&owner=owner',
projectId: 123,
@@ -173,11 +164,7 @@ describe('gitlab:issues:create', () => {
labels: 'operation:mindcrime',
},
workspacePath: 'seen2much',
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
mockGitlabClient.Issues.create.mockResolvedValue({
id: 42,
diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.examples.test.ts
index ab4fe0e637..90f4fca283 100644
--- a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.examples.test.ts
+++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.examples.test.ts
@@ -13,13 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import { getVoidLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
-import { PassThrough } from 'stream';
import yaml from 'yaml';
import { createGitlabProjectAccessTokenAction } from './createGitlabProjectAccessTokenAction'; // Adjust the import based on your project structure
import { examples } from './createGitlabProjectAccessTokenAction.examples';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { DateTime } from 'luxon';
@@ -59,16 +58,11 @@ describe('gitlab:projectAccessToken:create examples', () => {
const integrations = ScmIntegrations.fromConfig(config);
const action = createGitlabProjectAccessTokenAction({ integrations });
- const mockContext = {
+ const mockContext = createMockActionContext({
input: {
repoUrl: 'gitlab.com?repo=repo&owner=owner',
},
- workspacePath: 'lol',
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
beforeEach(() => {
jest.resetAllMocks();
diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.test.ts
index 1d3ae804c1..c626a20124 100644
--- a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.test.ts
+++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.test.ts
@@ -15,10 +15,9 @@
*/
import { createGitlabProjectDeployTokenAction } from './createGitlabProjectDeployTokenAction';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { ScmIntegrations } from '@backstage/integration';
import { ConfigReader } from '@backstage/config';
-import { getVoidLogger } from '@backstage/backend-common';
-import { PassThrough } from 'stream';
const mockGitlabClient = {
ProjectDeployTokens: {
@@ -52,7 +51,7 @@ describe('gitlab:create-deploy-token', () => {
const integrations = ScmIntegrations.fromConfig(config);
const action = createGitlabProjectDeployTokenAction({ integrations });
- const mockContext = {
+ const mockContext = createMockActionContext({
input: {
repoUrl: 'gitlab.com?repo=repo&owner=owner',
projectId: '123',
@@ -60,12 +59,7 @@ describe('gitlab:create-deploy-token', () => {
username: 'tokenuser',
scopes: ['read_repository'],
},
- workspacePath: 'lol',
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
beforeEach(() => {
jest.resetAllMocks();
diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.examples.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.examples.test.ts
index e5aa610ebc..3bd6b0e5ff 100644
--- a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.examples.test.ts
+++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.examples.test.ts
@@ -14,6 +14,7 @@
* limitations under the License.
*/
import yaml from 'yaml';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
jest.mock('@backstage/plugin-scaffolder-node', () => {
return {
@@ -31,8 +32,6 @@ import { createPublishGitlabAction } from './gitlab';
import { initRepoAndPush } from '@backstage/plugin-scaffolder-node';
import { ScmIntegrations } from '@backstage/integration';
import { ConfigReader } from '@backstage/config';
-import { getVoidLogger } from '@backstage/backend-common';
-import { PassThrough } from 'stream';
import { examples } from './gitlab.examples';
const mockGitlabClient = {
@@ -76,16 +75,11 @@ describe('publish:gitlab', () => {
const integrations = ScmIntegrations.fromConfig(config);
const action = createPublishGitlabAction({ integrations, config });
- const mockContext = {
+ const mockContext = createMockActionContext({
input: {
repoUrl: 'gitlab.com?repo=repo&owner=owner',
},
- workspacePath: 'lol',
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
beforeEach(() => {
jest.resetAllMocks();
diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.test.ts
index 5aca0a73e5..40712966ba 100644
--- a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.test.ts
+++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlab.test.ts
@@ -29,9 +29,8 @@ jest.mock('@backstage/plugin-scaffolder-node', () => {
import { createPublishGitlabAction } from './gitlab';
import { ScmIntegrations } from '@backstage/integration';
import { ConfigReader } from '@backstage/config';
-import { getVoidLogger } from '@backstage/backend-common';
-import { PassThrough } from 'stream';
import { initRepoAndPush } from '@backstage/plugin-scaffolder-node';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
const mockGitlabClient = {
Namespaces: {
@@ -83,7 +82,8 @@ describe('publish:gitlab', () => {
const integrations = ScmIntegrations.fromConfig(config);
const action = createPublishGitlabAction({ integrations, config });
- const mockContext = {
+
+ const mockContext = createMockActionContext({
input: {
repoUrl: 'gitlab.com?repo=repo&owner=owner',
repoVisibility: 'private' as const,
@@ -91,13 +91,8 @@ describe('publish:gitlab', () => {
ci_config_path: '.gitlab-ci.yml',
},
},
- workspacePath: 'lol',
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
- const mockContextWithSettings = {
+ });
+ const mockContextWithSettings = createMockActionContext({
input: {
repoUrl: 'gitlab.com?repo=repo&owner=owner',
repoVisibility: 'private' as const,
@@ -108,13 +103,8 @@ describe('publish:gitlab', () => {
topics: ['topic1', 'topic2'],
},
},
- workspacePath: 'lol',
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
- const mockContextWithBranches = {
+ });
+ const mockContextWithBranches = createMockActionContext({
input: {
repoUrl: 'gitlab.com?repo=repo&owner=owner',
repoVisibility: 'private' as const,
@@ -135,13 +125,8 @@ describe('publish:gitlab', () => {
},
],
},
- workspacePath: 'lol',
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
- const mockContextWithVariables = {
+ });
+ const mockContextWithVariables = createMockActionContext({
input: {
repoUrl: 'gitlab.com?repo=repo&owner=owner',
repoVisibility: 'private' as const,
@@ -155,12 +140,7 @@ describe('publish:gitlab', () => {
},
],
},
- workspacePath: 'lol',
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
beforeEach(() => {
jest.resetAllMocks();
diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.test.ts
index 0883a5e9f0..4f6585e7b3 100644
--- a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.test.ts
+++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabMergeRequest.test.ts
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import { createRootLogger, getRootLogger } from '@backstage/backend-common';
+import { createRootLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import { TemplateAction } from '@backstage/plugin-scaffolder-node';
-import { Writable } from 'stream';
import { createPublishGitlabMergeRequestAction } from './gitlabMergeRequest';
import { createMockDirectory } from '@backstage/backend-test-utils';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
// Make sure root logger is initialized ahead of FS mock
createRootLogger();
@@ -118,14 +118,7 @@ describe('createGitLabMergeRequest', () => {
irrelevant: { 'bar.txt': 'Nothing to see here' },
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.Projects.show).not.toHaveBeenCalled();
@@ -160,14 +153,7 @@ describe('createGitLabMergeRequest', () => {
irrelevant: { 'bar.txt': 'Nothing to see here' },
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.Projects.show).toHaveBeenCalledWith('owner/repo');
@@ -205,14 +191,7 @@ describe('createGitLabMergeRequest', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith(
@@ -240,14 +219,7 @@ describe('createGitLabMergeRequest', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith(
@@ -281,14 +253,7 @@ describe('createGitLabMergeRequest', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith(
@@ -321,14 +286,7 @@ describe('createGitLabMergeRequest', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith(
@@ -361,14 +319,7 @@ describe('createGitLabMergeRequest', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith(
@@ -400,14 +351,7 @@ describe('createGitLabMergeRequest', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith(
@@ -435,14 +379,7 @@ describe('createGitLabMergeRequest', () => {
irrelevant: { 'bar.txt': 'Nothing to see here' },
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith(
@@ -484,14 +421,7 @@ describe('createGitLabMergeRequest', () => {
irrelevant: { 'bar.txt': 'Nothing to see here' },
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith(
@@ -528,14 +458,7 @@ describe('createGitLabMergeRequest', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith(
@@ -570,14 +493,7 @@ describe('createGitLabMergeRequest', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith(
@@ -612,14 +528,7 @@ describe('createGitLabMergeRequest', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.Commits.create).toHaveBeenCalledWith(
@@ -657,14 +566,7 @@ describe('createGitLabMergeRequest', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
@@ -702,14 +604,7 @@ describe('createGitLabMergeRequest', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
@@ -739,14 +634,7 @@ describe('createGitLabMergeRequest', () => {
commitAction: 'create',
};
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await expect(instance.handler(ctx)).rejects.toThrow(
'Relative path is not allowed to refer to a directory outside its parent',
diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts
index 840f506540..24ba3abcd3 100644
--- a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts
+++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import { createRootLogger, getRootLogger } from '@backstage/backend-common';
+import { createRootLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import { TemplateAction } from '@backstage/plugin-scaffolder-node';
-import { Writable } from 'stream';
import { createMockDirectory } from '@backstage/backend-test-utils';
import { createGitlabRepoPushAction } from './gitlabRepoPush';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
// Make sure root logger is initialized ahead of FS mock
createRootLogger();
@@ -93,14 +93,7 @@ describe('createGitLabCommit', () => {
'foo.txt': 'Hello there!',
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0);
@@ -139,14 +132,7 @@ describe('createGitLabCommit', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0);
@@ -183,14 +169,7 @@ describe('createGitLabCommit', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0);
@@ -227,14 +206,7 @@ describe('createGitLabCommit', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(0);
@@ -276,14 +248,7 @@ describe('createGitLabCommit', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
@@ -325,14 +290,7 @@ describe('createGitLabCommit', () => {
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
@@ -366,14 +324,7 @@ describe('createGitLabCommit', () => {
commitAction: 'create',
};
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await expect(instance.handler(ctx)).rejects.toThrow(
'Relative path is not allowed to refer to a directory outside its parent',
@@ -398,14 +349,7 @@ describe('createGitLabCommit', () => {
'foo.txt': 'Hello there!',
},
});
- const ctx = {
- createTemporaryDirectory: jest.fn(),
- output: jest.fn(),
- logger: getRootLogger(),
- logStream: new Writable(),
- input,
- workspacePath,
- };
+ const ctx = createMockActionContext({ input, workspacePath });
await instance.handler(ctx);
expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith(
diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json
index f67f3fbb22..5426049996 100644
--- a/plugins/scaffolder-backend-module-rails/package.json
+++ b/plugins/scaffolder-backend-module-rails/package.json
@@ -51,6 +51,7 @@
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
+ "@backstage/scaffolder-test-utils": "workspace:^",
"@types/command-exists": "^1.2.0",
"@types/fs-extra": "^11.0.0",
"@types/node": "^18.17.8",
diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts
index 7548ddd21d..0f56bd55ec 100644
--- a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts
+++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts
@@ -27,18 +27,14 @@ jest.mock('./railsNewRunner', () => {
};
});
-import {
- ContainerRunner,
- getVoidLogger,
- UrlReader,
-} from '@backstage/backend-common';
+import { ContainerRunner, UrlReader } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import { resolve as resolvePath } from 'path';
-import { PassThrough } from 'stream';
import { createFetchRailsAction } from './index';
import { fetchContents } from '@backstage/plugin-scaffolder-node';
import { createMockDirectory } from '@backstage/backend-test-utils';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
describe('fetch:rails', () => {
const mockDir = createMockDirectory();
@@ -53,8 +49,7 @@ describe('fetch:rails', () => {
}),
);
- const mockTmpDir = mockDir.path;
- const mockContext = {
+ const mockContext = createMockActionContext({
input: {
url: 'https://rubyonrails.org/generator',
targetPath: 'something',
@@ -66,12 +61,8 @@ describe('fetch:rails', () => {
baseUrl: 'somebase',
entityRef: 'template:default/myTemplate',
},
- workspacePath: mockTmpDir,
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn().mockResolvedValue(mockTmpDir),
- };
+ workspacePath: mockDir.path,
+ });
const mockReader: UrlReader = {
readUrl: jest.fn(),
@@ -102,7 +93,7 @@ describe('fetch:rails', () => {
expect(fetchContents).toHaveBeenCalledWith({
reader: mockReader,
integrations,
- baseUrl: mockContext.templateInfo.baseUrl,
+ baseUrl: mockContext.templateInfo?.baseUrl,
fetchUrl: mockContext.input.url,
outputPath: resolvePath(mockContext.workspacePath),
});
@@ -112,7 +103,7 @@ describe('fetch:rails', () => {
await action.handler(mockContext);
expect(mockRailsTemplater.run).toHaveBeenCalledWith({
- workspacePath: mockTmpDir,
+ workspacePath: mockContext.workspacePath,
logStream: mockContext.logStream,
values: mockContext.input.values,
});
@@ -128,7 +119,7 @@ describe('fetch:rails', () => {
});
expect(mockRailsTemplater.run).toHaveBeenCalledWith({
- workspacePath: mockTmpDir,
+ workspacePath: mockContext.workspacePath,
logStream: mockContext.logStream,
values: {
...mockContext.input.values,
diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json
index f1aab87354..fb942617f3 100644
--- a/plugins/scaffolder-backend-module-sentry/package.json
+++ b/plugins/scaffolder-backend-module-sentry/package.json
@@ -46,6 +46,7 @@
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
+ "@backstage/scaffolder-test-utils": "workspace:^",
"@backstage/types": "workspace:^",
"msw": "^2.0.0"
},
diff --git a/plugins/scaffolder-backend-module-sentry/src/actions/createProject.test.ts b/plugins/scaffolder-backend-module-sentry/src/actions/createProject.test.ts
index 972b0f1e8e..715f21d944 100644
--- a/plugins/scaffolder-backend-module-sentry/src/actions/createProject.test.ts
+++ b/plugins/scaffolder-backend-module-sentry/src/actions/createProject.test.ts
@@ -15,6 +15,7 @@
*/
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { ConfigReader } from '@backstage/config';
import { InputError } from '@backstage/errors';
import { ActionContext } from '@backstage/plugin-scaffolder-node';
@@ -42,19 +43,17 @@ describe('sentry:project:create action', () => {
name: string;
slug?: string;
authToken?: string;
- }> => ({
- workspacePath: './dev/proj',
- createTemporaryDirectory: jest.fn(),
- logger: jest.createMockFromModule('winston'),
- logStream: jest.createMockFromModule('stream'),
- input: {
- organizationSlug: 'org',
- teamSlug: 'team',
- name: 'test project',
- authToken: randomBytes(5).toString('hex'),
- },
- output: jest.fn(),
- });
+ }> =>
+ createMockActionContext({
+ workspacePath: './dev/proj',
+ logger: jest.createMockFromModule('winston'),
+ input: {
+ organizationSlug: 'org',
+ teamSlug: 'team',
+ name: 'test project',
+ authToken: randomBytes(5).toString('hex'),
+ },
+ });
it('should request sentry project create with specified parameters.', async () => {
expect.assertions(3);
diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json
index 2ea82dd5d2..9abfe95ac0 100644
--- a/plugins/scaffolder-backend-module-yeoman/package.json
+++ b/plugins/scaffolder-backend-module-yeoman/package.json
@@ -39,6 +39,7 @@
"dependencies": {
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/plugin-scaffolder-node": "workspace:^",
+ "@backstage/scaffolder-test-utils": "workspace:^",
"@backstage/types": "workspace:^",
"winston": "^3.2.1",
"yeoman-environment": "^3.9.1"
diff --git a/plugins/scaffolder-backend-module-yeoman/src/actions/run/yeoman.test.ts b/plugins/scaffolder-backend-module-yeoman/src/actions/run/yeoman.test.ts
index 146c29f4ac..ae18a25365 100644
--- a/plugins/scaffolder-backend-module-yeoman/src/actions/run/yeoman.test.ts
+++ b/plugins/scaffolder-backend-module-yeoman/src/actions/run/yeoman.test.ts
@@ -18,9 +18,8 @@ import { yeomanRun } from './yeomanRun';
jest.mock('./yeomanRun');
-import { getVoidLogger } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import os from 'os';
-import { PassThrough } from 'stream';
import { createRunYeomanAction } from './yeoman';
import type { ActionContext } from '@backstage/plugin-scaffolder-node';
import { JsonObject } from '@backstage/types';
@@ -46,18 +45,14 @@ describe('run:yeoman', () => {
const options = {
code: 'owner',
};
- mockContext = {
+ mockContext = createMockActionContext({
input: {
namespace,
args,
options,
},
workspacePath: mockTmpDir,
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn().mockResolvedValue(mockTmpDir),
- };
+ });
await action.handler(mockContext);
expect(yeomanRun).toHaveBeenCalledWith(
diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json
index 4fec5bdfaf..5884450a89 100644
--- a/plugins/scaffolder-backend/package.json
+++ b/plugins/scaffolder-backend/package.json
@@ -95,6 +95,7 @@
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
+ "@backstage/scaffolder-test-utils": "workspace:^",
"@types/fs-extra": "^11.0.0",
"@types/nunjucks": "^3.1.4",
"@types/supertest": "^2.0.8",
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.examples.test.ts
index 161ff9d1de..62e0cef0dc 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.examples.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.examples.test.ts
@@ -14,9 +14,7 @@
* limitations under the License.
*/
-import { PassThrough } from 'stream';
-import os from 'os';
-import { getVoidLogger } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { CatalogApi } from '@backstage/catalog-client';
import { Entity } from '@backstage/catalog-model';
import { createFetchCatalogEntityAction } from './fetch';
@@ -36,14 +34,9 @@ describe('catalog:fetch examples', () => {
catalogClient: catalogClient as unknown as CatalogApi,
});
- const mockContext = {
- workspacePath: os.tmpdir(),
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
+ const mockContext = createMockActionContext({
secrets: { backstageToken: 'secret' },
- };
+ });
beforeEach(() => {
jest.resetAllMocks();
});
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.test.ts
index bed15f2e39..43d7660a9a 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.test.ts
@@ -14,9 +14,7 @@
* limitations under the License.
*/
-import { PassThrough } from 'stream';
-import os from 'os';
-import { getVoidLogger } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { CatalogApi } from '@backstage/catalog-client';
import { Entity } from '@backstage/catalog-model';
import { createFetchCatalogEntityAction } from './fetch';
@@ -34,14 +32,10 @@ describe('catalog:fetch', () => {
catalogClient: catalogClient as unknown as CatalogApi,
});
- const mockContext = {
- workspacePath: os.tmpdir(),
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
+ const mockContext = createMockActionContext({
secrets: { backstageToken: 'secret' },
- };
+ });
+
beforeEach(() => {
jest.resetAllMocks();
});
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/register.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/register.examples.test.ts
index eb5aa88c0f..e9900221e3 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/register.examples.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/register.examples.test.ts
@@ -14,9 +14,7 @@
* limitations under the License.
*/
-import { PassThrough } from 'stream';
-import os from 'os';
-import { getVoidLogger } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { CatalogApi } from '@backstage/catalog-client';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
@@ -44,13 +42,7 @@ describe('catalog:register', () => {
catalogClient: catalogClient as unknown as CatalogApi,
});
- const mockContext = {
- workspacePath: os.tmpdir(),
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ const mockContext = createMockActionContext();
beforeEach(() => {
jest.resetAllMocks();
});
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/register.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/register.test.ts
index bae9f04575..b035a8c94d 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/register.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/register.test.ts
@@ -14,9 +14,7 @@
* limitations under the License.
*/
-import { PassThrough } from 'stream';
-import os from 'os';
-import { getVoidLogger } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { CatalogApi } from '@backstage/catalog-client';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
@@ -42,13 +40,8 @@ describe('catalog:register', () => {
catalogClient: catalogClient as unknown as CatalogApi,
});
- const mockContext = {
- workspacePath: os.tmpdir(),
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ const mockContext = createMockActionContext();
+
beforeEach(() => {
jest.resetAllMocks();
});
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/write.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/write.examples.test.ts
index daa8f4f6b1..6f410db07e 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/write.examples.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/write.examples.test.ts
@@ -20,24 +20,16 @@ jest.mock('fs-extra');
const fsMock = fs as jest.Mocked;
-import { PassThrough } from 'stream';
-import os from 'os';
-import { getVoidLogger } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { createCatalogWriteAction } from './write';
import { resolve as resolvePath } from 'path';
import * as yaml from 'yaml';
import { examples } from './write.examples';
+import os from 'os';
describe('catalog:write', () => {
const action = createCatalogWriteAction();
-
- const mockContext = {
- workspacePath: os.tmpdir(),
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ const mockContext = createMockActionContext({ workspacePath: os.tmpdir() });
beforeEach(() => {
jest.resetAllMocks();
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/write.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/write.test.ts
index dd6f29f99b..1b06c930f9 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/write.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/write.test.ts
@@ -20,9 +20,8 @@ jest.mock('fs-extra');
const fsMock = fs as jest.Mocked;
-import { PassThrough } from 'stream';
import os from 'os';
-import { getVoidLogger } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { ANNOTATION_ORIGIN_LOCATION } from '@backstage/catalog-model';
import { createCatalogWriteAction } from './write';
import { resolve as resolvePath } from 'path';
@@ -31,18 +30,14 @@ import * as yaml from 'yaml';
describe('catalog:write', () => {
const action = createCatalogWriteAction();
- const mockContext = {
- workspacePath: os.tmpdir(),
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
-
beforeEach(() => {
jest.resetAllMocks();
});
+ const mockContext = createMockActionContext({
+ workspacePath: os.tmpdir(),
+ });
+
it('should write the catalog-info.yml in the workspace', async () => {
const entity = {
apiVersion: 'backstage.io/v1alpha1',
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.examples.test.ts
index 901f3e5011..de008433f0 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.examples.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.examples.test.ts
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-import { getVoidLogger } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { Writable } from 'stream';
import { createDebugLogAction } from './log';
import { join } from 'path';
@@ -30,15 +30,10 @@ describe('debug:log examples', () => {
const mockDir = createMockDirectory();
const workspacePath = mockDir.resolve('workspace');
- const mockContext = {
- input: {},
- baseUrl: 'somebase',
- workspacePath,
- logger: getVoidLogger(),
+ const mockContext = createMockActionContext({
logStream,
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ workspacePath,
+ });
const action = createDebugLogAction();
@@ -51,12 +46,10 @@ describe('debug:log examples', () => {
});
it('should log message', async () => {
- const context = {
+ await action.handler({
...mockContext,
input: yaml.parse(examples[0].example).steps[0].input,
- };
-
- await action.handler(context);
+ });
expect(logStream.write).toHaveBeenCalledTimes(1);
expect(logStream.write).toHaveBeenCalledWith(
@@ -65,12 +58,10 @@ describe('debug:log examples', () => {
});
it('should log the workspace content, if active', async () => {
- const context = {
+ await action.handler({
...mockContext,
input: yaml.parse(examples[1].example).steps[0].input,
- };
-
- await action.handler(context);
+ });
expect(logStream.write).toHaveBeenCalledTimes(1);
expect(logStream.write).toHaveBeenCalledWith(
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.test.ts
index d6fc5174b3..c9bd0f8cbe 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/log.test.ts
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-import { getVoidLogger } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { Writable } from 'stream';
import { createDebugLogAction } from './log';
import { join } from 'path';
@@ -29,15 +29,7 @@ describe('debug:log', () => {
const mockDir = createMockDirectory();
const workspacePath = mockDir.resolve('workspace');
- const mockContext = {
- input: {},
- baseUrl: 'somebase',
- workspacePath,
- logger: getVoidLogger(),
- logStream,
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ const mockContext = createMockActionContext({ workspacePath, logStream });
const action = createDebugLogAction();
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.examples.test.ts
index 9b755d86dd..00574dedfd 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.examples.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.examples.test.ts
@@ -14,12 +14,11 @@
* limitations under the License.
*/
-import { getVoidLogger } from '@backstage/backend-common';
import { createWaitAction } from './wait';
import { Writable } from 'stream';
import { examples } from './wait.examples';
import yaml from 'yaml';
-import { createMockDirectory } from '@backstage/backend-test-utils';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
describe('debug:wait examples', () => {
const action = createWaitAction();
@@ -28,18 +27,9 @@ describe('debug:wait examples', () => {
write: jest.fn(),
} as jest.Mocked> as jest.Mocked;
- const mockDir = createMockDirectory();
- const workspacePath = mockDir.resolve('workspace');
-
- const mockContext = {
- input: {},
- baseUrl: 'somebase',
- workspacePath,
- logger: getVoidLogger(),
+ const mockContext = createMockActionContext({
logStream,
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
beforeEach(() => {
jest.resetAllMocks();
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.test.ts
index 6f80604a6d..1424ca3012 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.test.ts
@@ -14,10 +14,9 @@
* limitations under the License.
*/
-import { getVoidLogger } from '@backstage/backend-common';
import { createWaitAction } from './wait';
import { Writable } from 'stream';
-import { createMockDirectory } from '@backstage/backend-test-utils';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
describe('debug:wait', () => {
const action = createWaitAction();
@@ -26,18 +25,9 @@ describe('debug:wait', () => {
write: jest.fn(),
} as jest.Mocked> as jest.Mocked;
- const mockDir = createMockDirectory();
- const workspacePath = mockDir.resolve('workspace');
-
- const mockContext = {
- input: {},
- baseUrl: 'somebase',
- workspacePath,
- logger: getVoidLogger(),
+ const mockContext = createMockActionContext({
logStream,
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
beforeEach(() => {
jest.resetAllMocks();
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.examples.test.ts
index 6b308a97eb..7ce945a08f 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.examples.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.examples.test.ts
@@ -16,14 +16,13 @@
import yaml from 'yaml';
-import os from 'os';
import { resolve as resolvePath } from 'path';
-import { getVoidLogger, UrlReader } from '@backstage/backend-common';
+import { UrlReader } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import { createFetchPlainAction } from './plain';
-import { PassThrough } from 'stream';
import { fetchContents } from '@backstage/plugin-scaffolder-node';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { examples } from './plain.examples';
jest.mock('@backstage/plugin-scaffolder-node', () => ({
@@ -50,19 +49,15 @@ describe('fetch:plain examples', () => {
});
const action = createFetchPlainAction({ integrations, reader });
- const mockContext = {
- workspacePath: os.tmpdir(),
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ const mockContext = createMockActionContext();
it('should fetch plain', async () => {
- await action.handler({
- ...mockContext,
- input: yaml.parse(examples[0].example).steps[0].input,
- });
+ await action.handler(
+ createMockActionContext({
+ ...mockContext,
+ input: yaml.parse(examples[0].example).steps[0].input,
+ }),
+ );
expect(fetchContents).toHaveBeenCalledWith(
expect.objectContaining({
outputPath: resolvePath(mockContext.workspacePath),
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.test.ts
index 917624acf4..7468779f3a 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.test.ts
@@ -19,14 +19,13 @@ jest.mock('@backstage/plugin-scaffolder-node', () => {
return { ...actual, fetchContents: jest.fn() };
});
-import os from 'os';
import { resolve as resolvePath } from 'path';
-import { getVoidLogger, UrlReader } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
+import { UrlReader } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import { fetchContents } from '@backstage/plugin-scaffolder-node';
import { createFetchPlainAction } from './plain';
-import { PassThrough } from 'stream';
describe('fetch:plain', () => {
const integrations = ScmIntegrations.fromConfig(
@@ -47,13 +46,7 @@ describe('fetch:plain', () => {
});
const action = createFetchPlainAction({ integrations, reader });
- const mockContext = {
- workspacePath: os.tmpdir(),
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ const mockContext = createMockActionContext();
it('should disallow a target path outside working directory', async () => {
await expect(
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.examples.test.ts
index 2ee17c29fe..25993caf96 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.examples.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.examples.test.ts
@@ -14,19 +14,19 @@
* limitations under the License.
*/
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
+
jest.mock('@backstage/plugin-scaffolder-node', () => {
const actual = jest.requireActual('@backstage/plugin-scaffolder-node');
return { ...actual, fetchFile: jest.fn() };
});
import yaml from 'yaml';
-import os from 'os';
import { resolve as resolvePath } from 'path';
-import { getVoidLogger, UrlReader } from '@backstage/backend-common';
+import { UrlReader } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import { createFetchPlainFileAction } from './plainFile';
-import { PassThrough } from 'stream';
import { fetchFile } from '@backstage/plugin-scaffolder-node';
import { examples } from './plainFile.examples';
@@ -49,13 +49,7 @@ describe('fetch:plain:file examples', () => {
});
const action = createFetchPlainFileAction({ integrations, reader });
- const mockContext = {
- workspacePath: os.tmpdir(),
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ const mockContext = createMockActionContext();
it('should fetch plain', async () => {
await action.handler({
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.test.ts
index 7ea74a809b..8f889bef4b 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.test.ts
@@ -19,14 +19,13 @@ jest.mock('@backstage/plugin-scaffolder-node', () => {
return { ...actual, fetchFile: jest.fn() };
});
-import os from 'os';
import { resolve as resolvePath } from 'path';
-import { getVoidLogger, UrlReader } from '@backstage/backend-common';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
+import { UrlReader } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import { fetchFile } from '@backstage/plugin-scaffolder-node';
import { createFetchPlainFileAction } from './plainFile';
-import { PassThrough } from 'stream';
describe('fetch:plain:file', () => {
const integrations = ScmIntegrations.fromConfig(
@@ -47,13 +46,7 @@ describe('fetch:plain:file', () => {
});
const action = createFetchPlainFileAction({ integrations, reader });
- const mockContext = {
- workspacePath: os.tmpdir(),
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ const mockContext = createMockActionContext();
it('should disallow a target path outside working directory', async () => {
await expect(
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.examples.test.ts
index a1c8381178..29a267ceab 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.examples.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.examples.test.ts
@@ -16,13 +16,9 @@
import { join as joinPath, sep as pathSep } from 'path';
import fs from 'fs-extra';
-import {
- getVoidLogger,
- resolvePackagePath,
- UrlReader,
-} from '@backstage/backend-common';
+import { resolvePackagePath, UrlReader } from '@backstage/backend-common';
import { ScmIntegrations } from '@backstage/integration';
-import { PassThrough } from 'stream';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { createFetchTemplateAction } from './template';
import {
ActionContext,
@@ -61,23 +57,15 @@ describe('fetch:template examples', () => {
const mockDir = createMockDirectory();
const workspacePath = mockDir.resolve('workspace');
- const logger = getVoidLogger();
-
- const mockContext = (input: any) => ({
- templateInfo: {
- baseUrl: 'base-url',
- entityRef: 'template:default/test-template',
- },
- input: input,
- output: jest.fn(),
- logStream: new PassThrough(),
- logger,
- workspacePath,
-
- async createTemporaryDirectory() {
- return fs.mkdtemp(mockDir.resolve('tmp-'));
- },
- });
+ const mockContext = (input: any) =>
+ createMockActionContext({
+ templateInfo: {
+ baseUrl: 'base-url',
+ entityRef: 'template:default/test-template',
+ },
+ input,
+ workspacePath,
+ });
beforeEach(() => {
mockDir.clear();
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts
index 25b65462e6..3cd8f61e77 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts
@@ -21,13 +21,8 @@ jest.mock('@backstage/plugin-scaffolder-node', () => {
import { join as joinPath, sep as pathSep } from 'path';
import fs from 'fs-extra';
-import {
- getVoidLogger,
- resolvePackagePath,
- UrlReader,
-} from '@backstage/backend-common';
+import { resolvePackagePath, UrlReader } from '@backstage/backend-common';
import { ScmIntegrations } from '@backstage/integration';
-import { PassThrough } from 'stream';
import { createFetchTemplateAction } from './template';
import {
fetchContents,
@@ -35,6 +30,7 @@ import {
TemplateAction,
} from '@backstage/plugin-scaffolder-node';
import { createMockDirectory } from '@backstage/backend-test-utils';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
type FetchTemplateInput = ReturnType<
typeof createFetchTemplateAction
@@ -59,29 +55,22 @@ describe('fetch:template', () => {
const mockDir = createMockDirectory();
const workspacePath = mockDir.resolve('workspace');
- const logger = getVoidLogger();
-
- const mockContext = (inputPatch: Partial = {}) => ({
- templateInfo: {
- baseUrl: 'base-url',
- entityRef: 'template:default/test-template',
- },
- input: {
- url: './skeleton',
- targetPath: './target',
- values: {
- test: 'value',
+ const mockContext = (inputPatch: Partial = {}) =>
+ createMockActionContext({
+ templateInfo: {
+ baseUrl: 'base-url',
+ entityRef: 'template:default/test-template',
},
- ...inputPatch,
- },
- output: jest.fn(),
- logStream: new PassThrough(),
- logger,
- workspacePath,
- async createTemporaryDirectory() {
- return fs.mkdtemp(mockDir.resolve('tmp-'));
- },
- });
+ input: {
+ url: './skeleton',
+ targetPath: './target',
+ values: {
+ test: 'value',
+ },
+ ...inputPatch,
+ },
+ workspacePath,
+ });
beforeEach(() => {
mockDir.setContent({
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.examples.test.ts
index 023f049ebc..8611486dac 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.examples.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.examples.test.ts
@@ -15,8 +15,7 @@
*/
import { createFilesystemDeleteAction } from './delete';
-import { getVoidLogger } from '@backstage/backend-common';
-import { PassThrough } from 'stream';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import { resolve as resolvePath } from 'path';
import fs from 'fs-extra';
import yaml from 'yaml';
@@ -31,16 +30,12 @@ describe('fs:delete examples', () => {
const files: string[] = yaml.parse(examples[0].example).steps[0].input.files;
- const mockContext = {
+ const mockContext = createMockActionContext({
input: {
files: files,
},
workspacePath,
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
beforeEach(() => {
jest.restoreAllMocks();
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.test.ts
index 2a4f45b862..2cddb9f5a6 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/delete.test.ts
@@ -16,8 +16,7 @@
import { resolve as resolvePath } from 'path';
import { createFilesystemDeleteAction } from './delete';
-import { getVoidLogger } from '@backstage/backend-common';
-import { PassThrough } from 'stream';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import fs from 'fs-extra';
import { createMockDirectory } from '@backstage/backend-test-utils';
@@ -27,16 +26,12 @@ describe('fs:delete', () => {
const mockDir = createMockDirectory();
const workspacePath = resolvePath(mockDir.path, 'workspace');
- const mockContext = {
+ const mockContext = createMockActionContext({
input: {
files: ['unit-test-a.js', 'unit-test-b.js'],
},
workspacePath,
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
beforeEach(() => {
jest.restoreAllMocks();
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.examples.test.ts
index cbb0fa0d0b..5e9ba84465 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.examples.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.examples.test.ts
@@ -16,8 +16,7 @@
import { resolve as resolvePath } from 'path';
import { createFilesystemRenameAction } from './rename';
-import { getVoidLogger } from '@backstage/backend-common';
-import { PassThrough } from 'stream';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import fs from 'fs-extra';
import yaml from 'yaml';
import { examples } from './rename.examples';
@@ -31,16 +30,12 @@ describe('fs:rename examples', () => {
const mockDir = createMockDirectory();
const workspacePath = resolvePath(mockDir.path, 'workspace');
- const mockContext = {
+ const mockContext = createMockActionContext({
input: {
files: files,
},
workspacePath,
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
beforeEach(() => {
jest.restoreAllMocks();
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.test.ts
index d37e967f43..b081200b71 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/filesystem/rename.test.ts
@@ -16,8 +16,7 @@
import { resolve as resolvePath } from 'path';
import { createFilesystemRenameAction } from './rename';
-import { getVoidLogger } from '@backstage/backend-common';
-import { PassThrough } from 'stream';
+import { createMockActionContext } from '@backstage/scaffolder-test-utils';
import fs from 'fs-extra';
import { createMockDirectory } from '@backstage/backend-test-utils';
@@ -41,16 +40,12 @@ describe('fs:rename', () => {
to: 'brand-new-folder',
},
];
- const mockContext = {
+ const mockContext = createMockActionContext({
input: {
files: mockInputFiles,
},
workspacePath,
- logger: getVoidLogger(),
- logStream: new PassThrough(),
- output: jest.fn(),
- createTemporaryDirectory: jest.fn(),
- };
+ });
beforeEach(() => {
jest.restoreAllMocks();
diff --git a/yarn.lock b/yarn.lock
index c8edc34ae3..2d9d22d1ec 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8399,6 +8399,7 @@ __metadata:
"@backstage/errors": "workspace:^"
"@backstage/integration": "workspace:^"
"@backstage/plugin-scaffolder-node": "workspace:^"
+ "@backstage/scaffolder-test-utils": "workspace:^"
"@gitbeaker/core": ^35.8.0
"@gitbeaker/node": ^35.8.0
"@gitbeaker/rest": ^39.25.0
@@ -8421,6 +8422,7 @@ __metadata:
"@backstage/errors": "workspace:^"
"@backstage/integration": "workspace:^"
"@backstage/plugin-scaffolder-node": "workspace:^"
+ "@backstage/scaffolder-test-utils": "workspace:^"
"@backstage/types": "workspace:^"
"@types/command-exists": ^1.2.0
"@types/fs-extra": ^11.0.0
@@ -8441,6 +8443,7 @@ __metadata:
"@backstage/config": "workspace:^"
"@backstage/errors": "workspace:^"
"@backstage/plugin-scaffolder-node": "workspace:^"
+ "@backstage/scaffolder-test-utils": "workspace:^"
"@backstage/types": "workspace:^"
msw: ^2.0.0
yaml: ^2.3.3
@@ -8455,6 +8458,7 @@ __metadata:
"@backstage/backend-plugin-api": "workspace:^"
"@backstage/cli": "workspace:^"
"@backstage/plugin-scaffolder-node": "workspace:^"
+ "@backstage/scaffolder-test-utils": "workspace:^"
"@backstage/types": "workspace:^"
winston: ^3.2.1
yeoman-environment: ^3.9.1
@@ -8490,6 +8494,7 @@ __metadata:
"@backstage/plugin-scaffolder-backend-module-gitlab": "workspace:^"
"@backstage/plugin-scaffolder-common": "workspace:^"
"@backstage/plugin-scaffolder-node": "workspace:^"
+ "@backstage/scaffolder-test-utils": "workspace:^"
"@backstage/types": "workspace:^"
"@types/express": ^4.17.6
"@types/fs-extra": ^11.0.0