scaffolder-backend: refactor NunjucksWorkflowRunner tests to avoid mock-fs

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2023-10-05 21:54:27 +02:00
parent 98407789cb
commit 1159058cb1
@@ -14,10 +14,7 @@
* limitations under the License.
*/
import mockFs from 'mock-fs';
import * as winston from 'winston';
import { getVoidLogger, resolvePackagePath } from '@backstage/backend-common';
import { getVoidLogger } from '@backstage/backend-common';
import { NunjucksWorkflowRunner } from './NunjucksWorkflowRunner';
import { TemplateActionRegistry } from '../actions';
import { ScmIntegrations } from '@backstage/integration';
@@ -36,19 +33,7 @@ import {
PermissionEvaluator,
} from '@backstage/plugin-permission-common';
import { RESOURCE_TYPE_SCAFFOLDER_ACTION } from '@backstage/plugin-scaffolder-common/alpha';
// The Stream module is lazy loaded, so make sure it's in the module cache before mocking fs
void winston.transports.Stream;
const realFiles = Object.fromEntries(
[
resolvePackagePath(
'@backstage/plugin-scaffolder-backend',
'assets',
'nunjucks.js.txt',
),
].map(k => [k, mockFs.load(k)]),
);
import { createMockDirectory } from '@backstage/backend-test-utils';
describe('DefaultWorkflowRunner', () => {
const logger = getVoidLogger();
@@ -56,6 +41,8 @@ describe('DefaultWorkflowRunner', () => {
let runner: NunjucksWorkflowRunner;
let fakeActionHandler: jest.Mock;
const mockDir = createMockDirectory();
const mockedPermissionApi: jest.Mocked<PermissionEvaluator> = {
authorizeConditional: jest.fn(),
} as unknown as jest.Mocked<PermissionEvaluator>;
@@ -84,11 +71,7 @@ describe('DefaultWorkflowRunner', () => {
});
beforeEach(() => {
winston.format.simple(); // put logform in the require.cache before mocking fs
mockFs({
'/tmp': mockFs.directory(),
...realFiles,
});
mockDir.clear();
jest.resetAllMocks();
actionRegistry = new TemplateActionRegistry();
@@ -148,16 +131,12 @@ describe('DefaultWorkflowRunner', () => {
runner = new NunjucksWorkflowRunner({
actionRegistry,
integrations,
workingDirectory: '/tmp',
workingDirectory: mockDir.path,
logger,
permissions: mockedPermissionApi,
});
});
afterEach(() => {
mockFs.restore();
});
it('should throw an error if the action does not exist', async () => {
const task = createMockTaskWithSpec({
apiVersion: 'scaffolder.backstage.io/v1beta3',