refactor: stop using getVoidLogger in tests

Signed-off-by: Camila Belo <camilaibs@gmail.com>
This commit is contained in:
Camila Belo
2024-05-15 09:09:54 +02:00
parent 819754e57e
commit eb34b87d5a
118 changed files with 533 additions and 433 deletions
@@ -14,12 +14,12 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { BackendLifecycleImpl } from './rootLifecycleServiceFactory';
import { mockServices } from '@backstage/backend-test-utils';
describe('lifecycleService', () => {
it('should execute registered shutdown hook', async () => {
const service = new BackendLifecycleImpl(getVoidLogger());
const service = new BackendLifecycleImpl(mockServices.logger.mock());
const hook = jest.fn();
service.addShutdownHook(() => hook());
// should not execute the hook more than once.
@@ -30,7 +30,7 @@ describe('lifecycleService', () => {
});
it('should not throw errors', async () => {
const service = new BackendLifecycleImpl(getVoidLogger());
const service = new BackendLifecycleImpl(mockServices.logger.mock());
service.addShutdownHook(() => {
throw new Error('oh no');
});
@@ -38,7 +38,7 @@ describe('lifecycleService', () => {
});
it('should not throw async errors', async () => {
const service = new BackendLifecycleImpl(getVoidLogger());
const service = new BackendLifecycleImpl(mockServices.logger.mock());
service.addShutdownHook(async () => {
throw new Error('oh no');
});
@@ -46,7 +46,7 @@ describe('lifecycleService', () => {
});
it('should reject hooks after trigger', async () => {
const service = new BackendLifecycleImpl(getVoidLogger());
const service = new BackendLifecycleImpl(mockServices.logger.mock());
await service.startup();
expect(() => {
service.addStartupHook(() => {});
@@ -16,7 +16,6 @@
import { ConfigReader } from '@backstage/config';
import { JsonObject } from '@backstage/types';
import { getVoidLogger } from '../logging';
import { DefaultReadTreeResponseFactory } from './tree';
import { AwsCodeCommitUrlReader, parseUrl } from './AwsCodeCommitUrlReader';
import { UrlReaderPredicateTuple } from './types';
@@ -34,6 +33,7 @@ import {
AwsCodeCommitIntegration,
readAwsCodeCommitIntegrationConfig,
} from '@backstage/integration';
import { mockServices } from '@backstage/backend-test-utils';
const AMAZON_AWS_CODECOMMIT_HOST = 'console.aws.amazon.com';
@@ -202,7 +202,7 @@ describe('AwsCodeCommitUrlReader', () => {
const createReader = (config: JsonObject): UrlReaderPredicateTuple[] => {
return AwsCodeCommitUrlReader.factory({
config: new ConfigReader(config),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
treeResponseFactory,
});
};
@@ -16,7 +16,6 @@
import { ConfigReader } from '@backstage/config';
import { JsonObject } from '@backstage/types';
import { getVoidLogger } from '../logging';
import { DefaultReadTreeResponseFactory } from './tree';
import { DEFAULT_REGION, AwsS3UrlReader, parseUrl } from './AwsS3UrlReader';
import {
@@ -37,6 +36,7 @@ import {
} from '@aws-sdk/client-s3';
import { sdkStreamMixin } from '@aws-sdk/util-stream-node';
import fs from 'fs';
import { mockServices } from '@backstage/backend-test-utils';
const treeResponseFactory = DefaultReadTreeResponseFactory.create({
config: new ConfigReader({}),
@@ -166,7 +166,7 @@ describe('AwsS3UrlReader', () => {
const createReader = (config: JsonObject): UrlReaderPredicateTuple[] => {
return AwsS3UrlReader.factory({
config: new ConfigReader(config),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
treeResponseFactory,
});
};
@@ -25,6 +25,7 @@ import {
} from '@backstage/integration';
import {
createMockDirectory,
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import fs from 'fs-extra';
@@ -32,7 +33,6 @@ import { rest } from 'msw';
import { setupServer } from 'msw/node';
import path from 'path';
import { NotModifiedError } from '@backstage/errors';
import { getVoidLogger } from '../logging';
import { AzureUrlReader } from './AzureUrlReader';
import { DefaultReadTreeResponseFactory } from './tree';
@@ -42,7 +42,7 @@ type AzureIntegrationConfigLike = Partial<
credentials?: Partial<AzureDevOpsCredentialLike>[];
};
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const mockDir = createMockDirectory({ mockOsTmpDir: true });
@@ -21,6 +21,7 @@ import {
} from '@backstage/integration';
import {
createMockDirectory,
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import fs from 'fs-extra';
@@ -30,10 +31,9 @@ import path from 'path';
import { NotModifiedError } from '@backstage/errors';
import { BitbucketUrlReader } from './BitbucketUrlReader';
import { DefaultReadTreeResponseFactory } from './tree';
import { getVoidLogger } from '../logging';
import getRawBody from 'raw-body';
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
describe('BitbucketUrlReader.factory', () => {
it('only apply integration configs not inherited from bitbucketCloud or bitbucketServer', () => {
@@ -16,10 +16,12 @@
import { ConfigReader } from '@backstage/config';
import { NotFoundError, NotModifiedError } from '@backstage/errors';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { getVoidLogger } from '../logging';
import { FetchUrlReader } from './FetchUrlReader';
import { DefaultReadTreeResponseFactory } from './tree';
@@ -105,7 +107,7 @@ describe('FetchUrlReader', () => {
},
},
}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
treeResponseFactory: DefaultReadTreeResponseFactory.create({
config: new ConfigReader({}),
}),
@@ -155,7 +157,7 @@ describe('FetchUrlReader', () => {
},
},
}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
treeResponseFactory: DefaultReadTreeResponseFactory.create({
config: new ConfigReader({}),
}),
@@ -16,6 +16,7 @@
import {
createMockDirectory,
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
@@ -29,7 +30,6 @@ import { rest } from 'msw';
import { setupServer } from 'msw/node';
import fs from 'fs-extra';
import path from 'path';
import { getVoidLogger } from '../logging';
import { UrlReaderPredicateTuple } from './types';
import { DefaultReadTreeResponseFactory } from './tree';
import {
@@ -86,7 +86,7 @@ const gerritProcessorWithGitiles = new GerritUrlReader(
const createReader = (config: JsonObject): UrlReaderPredicateTuple[] => {
return GerritUrlReader.factory({
config: new ConfigReader(config),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
treeResponseFactory,
});
};
@@ -14,13 +14,15 @@
* limitations under the License.
*/
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { GiteaIntegration, readGiteaConfig } from '@backstage/integration';
import { JsonObject } from '@backstage/types';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { getVoidLogger } from '../logging';
import { UrlReaderPredicateTuple } from './types';
import { DefaultReadTreeResponseFactory } from './tree';
import getRawBody from 'raw-body';
@@ -55,7 +57,7 @@ const giteaProcessor = new GiteaUrlReader(
const createReader = (config: JsonObject): UrlReaderPredicateTuple[] => {
return GiteaUrlReader.factory({
config: new ConfigReader(config),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
treeResponseFactory,
});
};
@@ -17,13 +17,13 @@
import { ConfigReader } from '@backstage/config';
import {
createMockDirectory,
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import fs from 'fs-extra';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import path from 'path';
import { getVoidLogger } from '../logging';
import { GitlabUrlReader } from './GitlabUrlReader';
import { DefaultReadTreeResponseFactory } from './tree';
import { NotModifiedError, NotFoundError } from '@backstage/errors';
@@ -32,7 +32,7 @@ import {
readGitLabIntegrationConfig,
} from '@backstage/integration';
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const mockDir = createMockDirectory({ mockOsTmpDir: true });
@@ -16,11 +16,11 @@
import { ConfigReader } from '@backstage/config';
import { JsonObject } from '@backstage/types';
import { getVoidLogger } from '../logging';
import { DefaultReadTreeResponseFactory } from './tree';
import { GoogleGcsUrlReader } from './GoogleGcsUrlReader';
import { UrlReaderPredicateTuple } from './types';
import packageinfo from '../../package.json';
import { mockServices } from '@backstage/backend-test-utils';
const bucketGetFilesMock = jest.fn();
jest.mock('@google-cloud/storage', () => {
@@ -44,7 +44,7 @@ describe('GcsUrlReader', () => {
const createReader = (config: JsonObject): UrlReaderPredicateTuple[] => {
return GoogleGcsUrlReader.factory({
config: new ConfigReader(config),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
treeResponseFactory: DefaultReadTreeResponseFactory.create({
config: new ConfigReader({}),
}),
@@ -14,13 +14,15 @@
* limitations under the License.
*/
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { HarnessIntegration, readHarnessConfig } from '@backstage/integration';
import { JsonObject } from '@backstage/types';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { getVoidLogger } from '../logging';
import { UrlReaderPredicateTuple } from './types';
import { DefaultReadTreeResponseFactory } from './tree';
import getRawBody from 'raw-body';
@@ -52,7 +54,7 @@ const harnessProcessor = new HarnessUrlReader(
const createReader = (config: JsonObject): UrlReaderPredicateTuple[] => {
return HarnessUrlReader.factory({
config: new ConfigReader(config),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
treeResponseFactory,
});
};
@@ -16,17 +16,17 @@
import { ConfigReader } from '@backstage/config';
import * as jose from 'jose';
import { getVoidLogger } from '../logging';
import { ServerTokenManager } from './ServerTokenManager';
import { TokenManager } from './types';
import { DateTime } from 'luxon';
import { mockServices } from '@backstage/backend-test-utils';
const emptyConfig = new ConfigReader({});
const configWithSecret = new ConfigReader({
backend: { auth: { keys: [{ secret: 'a-secret-key' }] } },
});
const env = process.env;
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
describe('ServerTokenManager', () => {
beforeEach(() => {
@@ -14,11 +14,11 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { LocalTaskWorker } from './LocalTaskWorker';
import { mockServices } from '@backstage/backend-test-utils';
describe('LocalTaskWorker', () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
it('runs the happy path (with iso duration) and handles cancellation', async () => {
const fn = jest.fn();
@@ -14,8 +14,11 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils';
import {
TestDatabaseId,
TestDatabases,
mockServices,
} from '@backstage/backend-test-utils';
import { ConflictError, NotFoundError } from '@backstage/errors';
import { Duration } from 'luxon';
import { migrateBackendTasks } from '../database/migrateBackendTasks';
@@ -51,10 +54,8 @@ describe('PluginTaskManagerImpl', () => {
async function init(databaseId: TestDatabaseId) {
const knex = await databases.init(databaseId);
await migrateBackendTasks(knex);
const manager = new PluginTaskSchedulerImpl(
async () => knex,
getVoidLogger(),
);
const logger = mockServices.logger.mock();
const manager = new PluginTaskSchedulerImpl(async () => knex, logger);
return { knex, manager };
}
@@ -14,8 +14,7 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { TestDatabases } from '@backstage/backend-test-utils';
import { TestDatabases, mockServices } from '@backstage/backend-test-utils';
import { Knex } from 'knex';
import { Duration } from 'luxon';
import waitForExpect from 'wait-for-expect';
@@ -36,7 +35,7 @@ const getTask = async (knex: Knex): Promise<DbTasksRow> => {
};
describe('PluginTaskSchedulerJanitor', () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const databases = TestDatabases.create({
ids: [
/* 'MYSQL_8' not supported yet */
@@ -14,8 +14,12 @@
* limitations under the License.
*/
import { DatabaseManager, getVoidLogger } from '@backstage/backend-common';
import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils';
import { DatabaseManager } from '@backstage/backend-common';
import {
TestDatabaseId,
TestDatabases,
mockServices,
} from '@backstage/backend-test-utils';
import { Duration } from 'luxon';
import waitForExpect from 'wait-for-expect';
import { TaskScheduler } from './TaskScheduler';
@@ -24,7 +28,7 @@ import { createTestScopedSignal } from './__testUtils__/createTestScopedSignal';
jest.setTimeout(60_000);
describe('TaskScheduler', () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const databases = TestDatabases.create();
const testScopedSignal = createTestScopedSignal();
@@ -14,8 +14,7 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { TestDatabases } from '@backstage/backend-test-utils';
import { TestDatabases, mockServices } from '@backstage/backend-test-utils';
import { Duration, DateTime } from 'luxon';
import waitForExpect from 'wait-for-expect';
import { migrateBackendTasks } from '../database/migrateBackendTasks';
@@ -27,7 +26,7 @@ import { createTestScopedSignal } from './__testUtils__/createTestScopedSignal';
jest.setTimeout(60_000);
describe('TaskWorker', () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const databases = TestDatabases.create();
const testScopedSignal = createTestScopedSignal();
@@ -57,6 +57,17 @@ import {
eventsServiceRef,
} from '@backstage/plugin-events-node';
/** @internal */
function createLoggerMock() {
return {
child: jest.fn().mockImplementation(() => createLoggerMock()),
debug: jest.fn(),
error: jest.fn(),
info: jest.fn(),
warn: jest.fn(),
};
}
/** @internal */
function simpleFactory<
TService,
@@ -358,13 +369,10 @@ export namespace mockServices {
export namespace logger {
export const factory = loggerServiceFactory;
export const mock = simpleMock(coreServices.logger, () => ({
child: jest.fn(),
debug: jest.fn(),
error: jest.fn(),
info: jest.fn(),
warn: jest.fn(),
}));
export const mock = simpleMock(coreServices.logger, () =>
createLoggerMock(),
);
}
export namespace permissions {
@@ -15,11 +15,10 @@
*/
import { Knex as KnexType } from 'knex';
import { getVoidLogger } from '@backstage/backend-common';
import { TestDatabases } from '@backstage/backend-test-utils';
import { TestDatabases, mockServices } from '@backstage/backend-test-utils';
import { StaticAssetsStore } from './StaticAssetsStore';
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
function createDatabaseManager(
client: KnexType,
+5 -3
View File
@@ -14,8 +14,10 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { createMockDirectory } from '@backstage/backend-test-utils';
import {
createMockDirectory,
mockServices,
} from '@backstage/backend-test-utils';
import { injectConfig } from './config';
describe('injectConfig', () => {
@@ -24,7 +26,7 @@ describe('injectConfig', () => {
const baseOptions = {
appConfigs: [],
staticDir: mockDir.path,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
};
beforeEach(() => {
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { AppConfig, ConfigReader } from '@backstage/config';
import express from 'express';
import Router from 'express-promise-router';
@@ -22,6 +21,7 @@ import { resolve as resolvePath } from 'path';
import request from 'supertest';
import { createRouter } from './router';
import { loadConfigSchema } from '@backstage/config-loader';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('../lib/config', () => ({
injectConfig: jest.fn(),
@@ -38,7 +38,7 @@ describe('createRouter', () => {
beforeAll(async () => {
const router = await createRouter({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
config: new ConfigReader({}),
appPackageName: 'example-app',
});
@@ -96,7 +96,7 @@ describe('createRouter with static fallback handler', () => {
});
const router = await createRouter({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
config: new ConfigReader({}),
appPackageName: 'example-app',
staticFallbackHandler,
@@ -129,7 +129,7 @@ describe('createRouter config schema test', () => {
it('uses an external schema', async () => {
await createRouter({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
config: new ConfigReader({
test: 'value',
}),
@@ -170,7 +170,7 @@ describe('createRouter config schema test', () => {
it('uses no external schema', async () => {
await createRouter({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
config: new ConfigReader({
test: 'value',
}),
@@ -20,7 +20,7 @@ import { DatabaseKeyStore } from './DatabaseKeyStore';
import { FirestoreKeyStore } from './FirestoreKeyStore';
import { KeyStores } from './KeyStores';
import { MemoryKeyStore } from './MemoryKeyStore';
import { getVoidLogger } from '@backstage/backend-common';
import { mockServices } from '@backstage/backend-test-utils';
describe('KeyStores', () => {
const defaultConfigOptions = {
@@ -35,7 +35,7 @@ describe('KeyStores', () => {
it('reads auth section from config', async () => {
const configSpy = jest.spyOn(defaultConfig, 'getOptionalConfig');
const keyStore = await KeyStores.fromConfig(defaultConfig, {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
database: AuthDatabase.forTesting(),
});
@@ -50,7 +50,7 @@ describe('KeyStores', () => {
it('can handle without auth config', async () => {
const keyStore = await KeyStores.fromConfig(new ConfigReader({}), {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
database: AuthDatabase.forTesting(),
});
expect(keyStore).toBeInstanceOf(DatabaseKeyStore);
@@ -78,7 +78,7 @@ describe('KeyStores', () => {
};
const config = new ConfigReader(configOptions);
const keyStore = await KeyStores.fromConfig(config, {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
database: AuthDatabase.forTesting(),
});
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { StaticTokenIssuer } from './StaticTokenIssuer';
import { createLocalJWKSet, jwtVerify } from 'jose';
import { stringifyEntityRef } from '@backstage/catalog-model';
import { StaticKeyStore } from './StaticKeyStore';
import { mockServices } from '@backstage/backend-test-utils';
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const entityRef = stringifyEntityRef({
kind: 'User',
namespace: 'default',
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { stringifyEntityRef } from '@backstage/catalog-model';
import {
base64url,
@@ -25,8 +24,9 @@ import {
import { MemoryKeyStore } from './MemoryKeyStore';
import { TokenFactory } from './TokenFactory';
import { tokenTypes } from '@backstage/plugin-auth-node';
import { mockServices } from '@backstage/backend-test-utils';
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
function jwtKid(jwt: string): string {
const header = decodeProtectedHeader(jwt);
@@ -15,7 +15,6 @@
*/
import { CatalogAuthResolverContext } from './CatalogAuthResolverContext';
import { getVoidLogger } from '@backstage/backend-common';
import { CatalogApi } from '@backstage/catalog-client';
import { mockServices } from '@backstage/backend-test-utils';
import { TokenIssuer } from '../../identity/types';
@@ -32,7 +31,7 @@ describe('CatalogAuthResolverContext', () => {
it('adds kind to filter when missing', async () => {
const context = CatalogAuthResolverContext.create({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
catalogApi: mockCatalogApi as CatalogApi,
tokenIssuer: {} as TokenIssuer,
tokenManager: mockServices.tokenManager(),
@@ -13,8 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import { getVoidLogger } from '@backstage/backend-common';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { LoggerService } from '@backstage/backend-plugin-api';
import { Config, ConfigReader } from '@backstage/config';
import {
@@ -112,7 +114,7 @@ describe('oidc.create', () => {
clientSecret: 'clientSecret',
},
}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
resolverContext: {
issueToken: jest.fn(),
findCatalogUser: jest.fn(),
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { getVoidLogger, UrlReaders } from '@backstage/backend-common';
import { UrlReaders } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { AwsS3DiscoveryProcessor } from './AwsS3DiscoveryProcessor';
import {
@@ -33,6 +33,7 @@ import { sdkStreamMixin } from '@aws-sdk/util-stream-node';
import fs from 'fs';
import path from 'path';
import YAML from 'yaml';
import { mockServices } from '@backstage/backend-test-utils';
const s3Client = mockClient(S3Client);
const object: Object = {
@@ -43,7 +44,7 @@ const output: ListObjectsV2Output = {
Contents: objectList,
};
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const reader = UrlReaders.default({
logger,
config: new ConfigReader({
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
PluginTaskScheduler,
TaskInvocationDefinition,
@@ -26,6 +25,7 @@ import { AwsS3EntityProvider } from './AwsS3EntityProvider';
import { mockClient } from 'aws-sdk-client-mock';
import 'aws-sdk-client-mock-jest';
import { ListObjectsV2Command, S3Client } from '@aws-sdk/client-s3';
import { mockServices } from '@backstage/backend-test-utils';
class PersistingTaskRunner implements TaskRunner {
private tasks: TaskInvocationDefinition[] = [];
@@ -40,7 +40,7 @@ class PersistingTaskRunner implements TaskRunner {
}
}
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
describe('AwsS3EntityProvider', () => {
const createObjectList = (keys: string[]) => {
@@ -79,7 +79,7 @@ describe('AwsS3EntityProvider', () => {
});
afterEach(() => {
jest.resetAllMocks();
jest.clearAllMocks();
process.env.AWS_REGION = undefined;
});
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { LocationSpec } from '@backstage/plugin-catalog-common';
import {
@@ -22,6 +21,7 @@ import {
parseUrl,
} from './AzureDevOpsDiscoveryProcessor';
import { codeSearch } from '../lib';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('../lib');
const mockCodeSearch = codeSearch as jest.MockedFunction<typeof codeSearch>;
@@ -106,7 +106,7 @@ describe('AzureDevOpsDiscoveryProcessor', () => {
azure: [{ host: 'dev.azure.com', token: 'blob' }],
},
}),
{ logger: getVoidLogger() },
{ logger: mockServices.logger.mock() },
);
const location: LocationSpec = {
type: 'not-azure-discovery',
@@ -128,7 +128,7 @@ describe('AzureDevOpsDiscoveryProcessor', () => {
],
},
}),
{ logger: getVoidLogger() },
{ logger: mockServices.logger.mock() },
);
const location: LocationSpec = {
type: 'azure-discovery',
@@ -148,7 +148,7 @@ describe('AzureDevOpsDiscoveryProcessor', () => {
github: [{ host: 'dev.azure.com', token: 'blob' }],
},
}),
{ logger: getVoidLogger() },
{ logger: mockServices.logger.mock() },
);
beforeEach(() => {
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
PluginTaskScheduler,
TaskInvocationDefinition,
@@ -25,6 +24,7 @@ import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { CodeSearchResultItem } from '../lib';
import { AzureDevOpsEntityProvider } from './AzureDevOpsEntityProvider';
import { codeSearch } from '../lib';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('../lib');
const mockCodeSearch = codeSearch as jest.MockedFunction<typeof codeSearch>;
@@ -42,7 +42,7 @@ class PersistingTaskRunner implements TaskRunner {
}
}
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
describe('AzureDevOpsEntityProvider', () => {
afterEach(() => {
@@ -14,13 +14,16 @@
* limitations under the License.
*/
import { getVoidLogger, TokenManager } from '@backstage/backend-common';
import { TokenManager } from '@backstage/backend-common';
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { CatalogApi } from '@backstage/catalog-client';
import { Entity, LocationEntity } from '@backstage/catalog-model';
import { ConfigReader } from '@backstage/config';
@@ -54,7 +57,7 @@ class PersistingTaskRunner implements TaskRunner {
}
}
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const server = setupServer();
@@ -152,7 +155,7 @@ describe('BitbucketCloudEntityProvider', () => {
};
afterEach(() => {
jest.resetAllMocks();
jest.clearAllMocks();
schedule.reset();
});
@@ -146,6 +146,7 @@ export class BitbucketCloudEntityProvider implements EntityProvider {
return schedule.run({
id: taskId,
fn: async () => {
console.log('---> child', this.logger);
const logger = this.logger.child({
class: BitbucketCloudEntityProvider.prototype.constructor.name,
taskId,
@@ -14,13 +14,15 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { rest } from 'msw';
@@ -53,7 +55,7 @@ function pagedResponse(values: any): BitbucketServerPagedResponse<any> {
} as BitbucketServerPagedResponse<any>;
}
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const server = setupServer();
@@ -102,7 +104,9 @@ function setupStubs(projects: Project[], baseUrl: string) {
describe('BitbucketServerEntityProvider', () => {
setupRequestMockHandlers(server);
afterEach(() => jest.resetAllMocks());
afterEach(() => {
jest.clearAllMocks();
});
it('no provider config', () => {
const schedule = new PersistingTaskRunner();
@@ -14,13 +14,15 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import fs from 'fs-extra';
@@ -52,13 +54,13 @@ class PersistingTaskRunner implements TaskRunner {
}
}
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
describe('GerritEntityProvider', () => {
setupRequestMockHandlers(server);
afterEach(() => {
jest.resetAllMocks();
jest.clearAllMocks();
});
const config = new ConfigReader({
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import {
DefaultGithubCredentialsProvider,
@@ -23,6 +22,7 @@ import {
import { LocationSpec } from '@backstage/plugin-catalog-node';
import { GithubDiscoveryProcessor, parseUrl } from './GithubDiscoveryProcessor';
import { getOrganizationRepositories } from '../lib';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('../lib');
const mockGetOrganizationRepositories =
@@ -80,7 +80,7 @@ describe('GithubDiscoveryProcessor', () => {
const githubCredentialsProvider =
DefaultGithubCredentialsProvider.fromIntegrations(integrations);
const processor = GithubDiscoveryProcessor.fromConfig(config, {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
githubCredentialsProvider,
});
const location: LocationSpec = {
@@ -105,7 +105,7 @@ describe('GithubDiscoveryProcessor', () => {
const githubCredentialsProvider =
DefaultGithubCredentialsProvider.fromIntegrations(integrations);
const processor = GithubDiscoveryProcessor.fromConfig(config, {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
githubCredentialsProvider,
});
const location: LocationSpec = {
@@ -130,7 +130,7 @@ describe('GithubDiscoveryProcessor', () => {
const githubCredentialsProvider =
DefaultGithubCredentialsProvider.fromIntegrations(integrations);
const processor = GithubDiscoveryProcessor.fromConfig(config, {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
githubCredentialsProvider,
});
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import {
GithubCredentialsProvider,
@@ -23,12 +22,13 @@ import {
import { LocationSpec } from '@backstage/plugin-catalog-node';
import { graphql } from '@octokit/graphql';
import { GithubOrgReaderProcessor } from './GithubOrgReaderProcessor';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('@octokit/graphql');
describe('GithubOrgReaderProcessor', () => {
describe('implementation', () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const integrations = ScmIntegrations.fromConfig(
new ConfigReader({
integrations: {
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
PluginTaskScheduler,
TaskInvocationDefinition,
@@ -25,6 +24,7 @@ import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { GithubEntityProvider } from './GithubEntityProvider';
import * as helpers from '../lib/github';
import { EventParams } from '@backstage/plugin-events-node';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('../lib/github', () => {
return {
@@ -44,10 +44,10 @@ class PersistingTaskRunner implements TaskRunner {
}
}
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
describe('GithubEntityProvider', () => {
afterEach(() => jest.resetAllMocks());
afterEach(() => jest.clearAllMocks());
it('no provider config', () => {
const schedule = new PersistingTaskRunner();
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { GroupEntity, UserEntity } from '@backstage/catalog-model';
import { ConfigReader } from '@backstage/config';
import { GithubCredentialsProvider } from '@backstage/integration';
@@ -29,6 +28,7 @@ import {
withLocations,
} from './GithubMultiOrgEntityProvider';
import { LoggerService } from '@backstage/backend-plugin-api';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('@octokit/graphql');
@@ -60,7 +60,7 @@ describe('GithubMultiOrgEntityProvider', () => {
refresh: jest.fn(),
};
logger = getVoidLogger();
logger = mockServices.logger.mock();
gitHubConfig = { host: 'github.com' };
@@ -1016,7 +1016,7 @@ describe('GithubMultiOrgEntityProvider', () => {
};
beforeEach(async () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
events = DefaultEventsService.create({ logger });
const config = new ConfigReader({
integrations: {
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { GroupEntity, UserEntity } from '@backstage/catalog-model';
import {
GithubCredentialsProvider,
@@ -28,6 +27,7 @@ import {
} from '@backstage/plugin-events-node';
import { GithubOrgEntityProvider } from './GithubOrgEntityProvider';
import { withLocations } from '../lib/withLocations';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('@octokit/graphql');
@@ -48,7 +48,7 @@ describe('GithubOrgEntityProvider', () => {
refresh: jest.fn(),
};
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const gitHubConfig = {
host: 'https://github.com',
};
@@ -269,7 +269,7 @@ describe('GithubOrgEntityProvider', () => {
refresh: jest.fn(),
};
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const events = DefaultEventsService.create({ logger });
const gitHubConfig: GithubIntegrationConfig = {
host: 'github.com',
@@ -356,7 +356,7 @@ describe('GithubOrgEntityProvider', () => {
refresh: jest.fn(),
};
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const events = DefaultEventsService.create({ logger });
const gitHubConfig: GithubIntegrationConfig = {
host: 'github.com',
@@ -443,7 +443,7 @@ describe('GithubOrgEntityProvider', () => {
refresh: jest.fn(),
};
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const events = DefaultEventsService.create({ logger });
const gitHubConfig: GithubIntegrationConfig = {
host: 'github.com',
@@ -536,7 +536,7 @@ describe('GithubOrgEntityProvider', () => {
refresh: jest.fn(),
};
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const events = DefaultEventsService.create({ logger });
const gitHubConfig: GithubIntegrationConfig = {
host: 'github.com',
@@ -630,7 +630,7 @@ describe('GithubOrgEntityProvider', () => {
refresh: jest.fn(),
};
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const events = DefaultEventsService.create({ logger });
const gitHubConfig: GithubIntegrationConfig = {
host: 'github.com',
@@ -881,7 +881,7 @@ describe('GithubOrgEntityProvider', () => {
refresh: jest.fn(),
};
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const events = DefaultEventsService.create({ logger });
const gitHubConfig: GithubIntegrationConfig = {
host: 'github.com',
@@ -1129,7 +1129,7 @@ describe('GithubOrgEntityProvider', () => {
refresh: jest.fn(),
};
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const events = DefaultEventsService.create({ logger });
const gitHubConfig: GithubIntegrationConfig = {
host: 'github.com',
@@ -14,8 +14,10 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { LocationSpec } from '@backstage/plugin-catalog-node';
import { rest, RestRequest } from 'msw';
@@ -148,7 +150,7 @@ function getProcessor({
return GitLabDiscoveryProcessor.fromConfig(
new ConfigReader(config || getConfig()),
{
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
...options,
},
);
@@ -14,8 +14,10 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { readGitLabIntegrationConfig } from '@backstage/integration';
import { setupServer } from 'msw/node';
@@ -34,14 +36,14 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
expect(client.isSelfManaged()).toBeTruthy();
});
it('returns false if gitlab.com', () => {
const client = new GitLabClient({
config: readGitLabIntegrationConfig(new ConfigReader(mock.config_saas)),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
expect(client.isSelfManaged()).toBeFalsy();
});
@@ -53,7 +55,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const { items } = await client.pagedRequest(mock.paged_endpoint);
@@ -66,7 +68,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const requestedPage = 2;
@@ -87,7 +89,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const { items, nextPage } = await client.pagedRequest(
@@ -106,7 +108,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
// non-200 status code should throw
await expect(() =>
@@ -122,7 +124,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const groupProjectsGen = paginated(
@@ -146,7 +148,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const instanceProjects = paginated(
@@ -167,7 +169,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const allUsers: GitLabUser[] = [];
@@ -188,7 +190,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const allGroups: GitLabGroup[] = [];
@@ -207,7 +209,7 @@ describe('GitLabClient', () => {
it('gets all users under group', async () => {
const client = new GitLabClient({
config: readGitLabIntegrationConfig(new ConfigReader(mock.config_saas)),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const saasMembers = (
await client.getGroupMembers('saas-multi-user-group', [
@@ -221,7 +223,7 @@ describe('GitLabClient', () => {
it('gets all users with token without full permissions', async () => {
const client = new GitLabClient({
config: readGitLabIntegrationConfig(new ConfigReader(mock.config_saas)),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const saasMembers = (
await client.getGroupMembers('', ['DIRECT, DESCENDANTS'])
@@ -231,7 +233,7 @@ describe('GitLabClient', () => {
it('rejects when GraphQL returns errors', async () => {
const client = new GitLabClient({
config: readGitLabIntegrationConfig(new ConfigReader(mock.config_saas)),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
await expect(() =>
client.getGroupMembers('error-group', ['DIRECT, DESCENDANTS']),
@@ -244,7 +246,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const saasMembers = (
await client.getGroupMembers('multi-page-saas', ['DIRECT, DESCENDANTS'])
@@ -262,7 +264,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const allGroups = (await client.listDescendantGroups('group-with-parent'))
@@ -277,7 +279,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const allGroups = (
@@ -292,7 +294,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
await expect(() =>
@@ -306,7 +308,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const saasGroups = (await client.listDescendantGroups('root')).items;
@@ -323,7 +325,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const members = await client.getGroupMembers('group1', ['DIRECT']);
@@ -346,7 +348,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const members = await client.getGroupMembers('non-existing-group', [
@@ -362,7 +364,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
await expect(() =>
@@ -377,7 +379,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const members = await client.getGroupMembers('multi-page', ['DIRECT']);
@@ -393,7 +395,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const group = await client.getGroupById(1);
@@ -405,7 +407,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
await expect(() => client.getGroupById(42)).rejects.toThrow(
@@ -420,7 +422,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const project = await client.getProjectById(1);
@@ -432,7 +434,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
await expect(() => client.getProjectById(42)).rejects.toThrow(
@@ -447,7 +449,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const user = await client.getUserById(1);
@@ -459,7 +461,7 @@ describe('GitLabClient', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
await expect(() => client.getUserById(42)).rejects.toThrow(
@@ -475,7 +477,7 @@ describe('paginated', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const paginatedItems = paginated(
@@ -499,7 +501,7 @@ describe('hasFile', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
});
@@ -528,7 +530,7 @@ describe('pagedRequest search params', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const { items } = await client.pagedRequest<{ endpoint: string }>(
@@ -546,7 +548,7 @@ describe('pagedRequest search params', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const { items } = await client.pagedRequest<{ endpoint: string }>(
@@ -567,7 +569,7 @@ describe('pagedRequest search params', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const { items } = await client.pagedRequest<{ endpoint: string }>(
@@ -588,7 +590,7 @@ describe('pagedRequest search params', () => {
config: readGitLabIntegrationConfig(
new ConfigReader(mock.config_self_managed),
),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const { items } = await client.pagedRequest<{ endpoint: string }>(
@@ -14,13 +14,15 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { DefaultEventsService } from '@backstage/plugin-events-node';
@@ -31,7 +33,7 @@ import { GitlabDiscoveryEntityProvider } from './GitlabDiscoveryEntityProvider';
const server = setupServer(...handlers);
setupRequestMockHandlers(server);
afterEach(() => jest.resetAllMocks());
afterEach(() => jest.clearAllMocks());
class PersistingTaskRunner implements TaskRunner {
private tasks: TaskInvocationDefinition[] = [];
@@ -46,7 +48,7 @@ class PersistingTaskRunner implements TaskRunner {
}
}
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
describe('GitlabDiscoveryEntityProvider - configuration', () => {
it('should not instantiate providers when no config found', () => {
@@ -14,13 +14,15 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
PluginTaskScheduler,
TaskInvocationDefinition,
TaskRunner,
} from '@backstage/backend-tasks';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { EntityProviderConnection } from '@backstage/plugin-catalog-node';
import { DefaultEventsService } from '@backstage/plugin-events-node';
@@ -32,7 +34,7 @@ import { GitlabOrgDiscoveryEntityProvider } from './GitlabOrgDiscoveryEntityProv
const server = setupServer(...handlers);
setupRequestMockHandlers(server);
afterEach(() => jest.resetAllMocks());
afterEach(() => jest.clearAllMocks());
class PersistingTaskRunner implements TaskRunner {
private tasks: TaskInvocationDefinition[] = [];
@@ -47,7 +49,7 @@ class PersistingTaskRunner implements TaskRunner {
}
}
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
describe('GitlabOrgDiscoveryEntityProvider - configuration', () => {
it('should not instantiate providers when no config found', () => {
@@ -14,9 +14,8 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { TestDatabases } from '@backstage/backend-test-utils';
import { TestDatabases, mockServices } from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { IncrementalEntityProvider } from '../types';
import { WrapperProviders } from './WrapperProviders';
@@ -29,13 +28,13 @@ describe('WrapperProviders', () => {
ids: ['POSTGRES_16', 'POSTGRES_12', 'SQLITE_3', 'MYSQL_8'],
});
const config = new ConfigReader({});
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const scheduler = {
scheduleTask: jest.fn(),
};
beforeEach(() => {
jest.resetAllMocks();
jest.clearAllMocks();
});
it.each(databases.eachSupportedId())(
@@ -25,7 +25,7 @@ import {
readMicrosoftGraphUsersInGroups,
resolveRelations,
} from './read';
import { getVoidLogger } from '@backstage/backend-common';
import { mockServices } from '@backstage/backend-test-utils';
function user(data: Partial<UserEntity>): UserEntity {
return merge(
@@ -106,7 +106,7 @@ describe('read microsoft graph', () => {
const { users } = await readMicrosoftGraphUsers(client, {
userFilter: 'accountEnabled eq true',
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
expect(users).toEqual([
@@ -153,7 +153,7 @@ describe('read microsoft graph', () => {
const { users } = await readMicrosoftGraphUsers(client, {
queryMode: 'advanced',
userFilter: 'accountEnabled eq true',
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
expect(users).toEqual([
@@ -206,7 +206,7 @@ describe('read microsoft graph', () => {
metadata: { name: 'x' },
spec: { memberOf: [] },
}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
expect(users).toEqual([
@@ -246,7 +246,7 @@ describe('read microsoft graph', () => {
const { users } = await readMicrosoftGraphUsersInGroups(client, {
userGroupMemberFilter: 'securityEnabled eq true',
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
expect(users).toEqual([
@@ -304,7 +304,7 @@ describe('read microsoft graph', () => {
const { users } = await readMicrosoftGraphUsersInGroups(client, {
queryMode: 'advanced',
userGroupMemberFilter: 'securityEnabled eq true',
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
expect(users).toEqual([
@@ -369,7 +369,7 @@ describe('read microsoft graph', () => {
metadata: { name: 'x' },
spec: { memberOf: [] },
}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
expect(users).toEqual([
@@ -893,7 +893,7 @@ describe('read microsoft graph', () => {
);
await readMicrosoftGraphOrg(client, 'tenantid', {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
groupFilter: 'securityEnabled eq false',
});
@@ -930,7 +930,7 @@ describe('read microsoft graph', () => {
);
await readMicrosoftGraphOrg(client, 'tenantid', {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
userExpand: 'manager',
userFilter: 'accountEnabled eq true',
groupFilter: 'securityEnabled eq false',
@@ -970,7 +970,7 @@ describe('read microsoft graph', () => {
);
await readMicrosoftGraphOrg(client, 'tenantid', {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
loadUserPhotos: false,
});
@@ -1007,7 +1007,7 @@ describe('read microsoft graph', () => {
client.getGroupMembers.mockImplementation(getExampleGroupMembers);
await readMicrosoftGraphOrg(client, 'tenantid', {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
userSelect: ['mail'],
});
@@ -1040,7 +1040,7 @@ describe('read microsoft graph', () => {
);
await readMicrosoftGraphOrg(client, 'tenantid', {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
userGroupMemberFilter: 'name eq backstage-group',
groupFilter: 'securityEnabled eq false',
});
@@ -1089,7 +1089,7 @@ describe('read microsoft graph', () => {
);
const { users } = await readMicrosoftGraphOrg(client, 'tenantid', {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
loadUserPhotos: false,
});
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
PluginTaskScheduler,
TaskInvocationDefinition,
@@ -36,6 +35,7 @@ import {
MicrosoftGraphOrgEntityProvider,
withLocations,
} from './MicrosoftGraphOrgEntityProvider';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('../microsoftGraph', () => {
return {
@@ -98,7 +98,7 @@ describe('MicrosoftGraphOrgEntityProvider', () => {
afterEach(() => jest.resetAllMocks());
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const taskRunner = new PersistingTaskRunner();
const scheduler = {
createScheduledTaskRunner: (_: any) => taskRunner,
@@ -14,10 +14,10 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { GroupEntity, UserEntity } from '@backstage/catalog-model';
import { MicrosoftGraphClient, readMicrosoftGraphOrg } from '../microsoftGraph';
import { MicrosoftGraphOrgReaderProcessor } from './MicrosoftGraphOrgReaderProcessor';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('../microsoftGraph', () => {
return {
@@ -45,7 +45,7 @@ describe('MicrosoftGraphOrgReaderProcessor', () => {
clientSecret: 'clientsecret',
},
],
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
jest
@@ -13,11 +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 { LocationSpec } from '@backstage/plugin-catalog-backend';
import { OpenApiRefProcessor } from './OpenApiRefProcessor';
import { bundleFileWithRefs } from './lib';
import { mockServices } from '@backstage/backend-test-utils';
import { loggerToWinstonLogger } from '@backstage/backend-common';
jest.mock('./lib', () => ({
bundleFileWithRefs: jest.fn(),
@@ -53,7 +54,7 @@ describe('OpenApiRefProcessor', () => {
search: jest.fn(),
};
const processor = OpenApiRefProcessor.fromConfig(config, {
logger: getVoidLogger(),
logger: loggerToWinstonLogger(mockServices.logger.mock()),
reader,
});
@@ -16,7 +16,6 @@
import { TaskInvocationDefinition, TaskRunner } from '@backstage/backend-tasks';
import { ConfigReader } from '@backstage/config';
import { getVoidLogger } from '@backstage/backend-common';
import { PuppetDbEntityProvider } from './PuppetDbEntityProvider';
import {
DeferredEntity,
@@ -30,6 +29,7 @@ import {
ResourceEntity,
} from '@backstage/catalog-model';
import { DEFAULT_ENTITY_OWNER, ENDPOINT_NODES } from '../puppet/constants';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('../puppet/read', () => {
return {
@@ -37,7 +37,7 @@ jest.mock('../puppet/read', () => {
};
});
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
class PersistingTaskRunner implements TaskRunner {
private tasks: TaskInvocationDefinition[] = [];
@@ -14,8 +14,7 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { TestDatabases } from '@backstage/backend-test-utils';
import { TestDatabases, mockServices } from '@backstage/backend-test-utils';
import { Entity } from '@backstage/catalog-model';
import { applyDatabaseMigrations } from '../../migrations';
import {
@@ -31,7 +30,7 @@ jest.setTimeout(60_000);
describe('performStitching', () => {
const databases = TestDatabases.create();
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
// NOTE(freben): Testing the deferred path since it's a superset of the immediate one
it.each(databases.eachSupportedId())(
@@ -14,10 +14,10 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { CodeOwnersProcessor } from './CodeOwnersProcessor';
import { LocationSpec } from '@backstage/plugin-catalog-common';
import { mockServices } from '@backstage/backend-test-utils';
const mockCodeOwnersText = () => `
* @acme/team-foo @acme/team-bar
@@ -52,7 +52,7 @@ describe('CodeOwnersProcessor', () => {
}),
};
const processor = CodeOwnersProcessor.fromConfig(config, {
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
reader,
});
@@ -14,12 +14,11 @@
* limitations under the License.
*/
import { UrlReader, UrlReaders } from '@backstage/backend-common';
import {
getVoidLogger,
UrlReader,
UrlReaders,
} from '@backstage/backend-common';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
@@ -47,7 +46,7 @@ describe('UrlReaderProcessor', () => {
});
it('should load from url', async () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const reader = UrlReaders.default({
logger,
config: new ConfigReader({
@@ -105,7 +104,7 @@ describe('UrlReaderProcessor', () => {
});
it('should use cached data when available', async () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const reader = UrlReaders.default({
logger,
config: new ConfigReader({
@@ -153,7 +152,7 @@ describe('UrlReaderProcessor', () => {
});
it('should fail load from url with error', async () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const reader = UrlReaders.default({
logger,
config: new ConfigReader({
@@ -191,7 +190,7 @@ describe('UrlReaderProcessor', () => {
});
it('uses search when there are globs', async () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const reader: jest.Mocked<UrlReader> = {
readUrl: jest.fn(),
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { Hash } from 'crypto';
import { DateTime } from 'luxon';
import waitForExpect from 'wait-for-expect';
@@ -23,6 +22,7 @@ import { DefaultCatalogProcessingEngine } from './DefaultCatalogProcessingEngine
import { CatalogProcessingOrchestrator } from './types';
import { Stitcher } from '../stitching/types';
import { ConfigReader } from '@backstage/config';
import { mockServices } from '@backstage/backend-test-utils';
describe('DefaultCatalogProcessingEngine', () => {
const db = {
@@ -64,7 +64,7 @@ describe('DefaultCatalogProcessingEngine', () => {
});
const engine = new DefaultCatalogProcessingEngine({
config: new ConfigReader({}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
processingDatabase: db,
knex: {} as any,
orchestrator: orchestrator,
@@ -132,7 +132,7 @@ describe('DefaultCatalogProcessingEngine', () => {
});
const engine = new DefaultCatalogProcessingEngine({
config: new ConfigReader({}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
processingDatabase: db,
knex: {} as any,
orchestrator: orchestrator,
@@ -216,7 +216,7 @@ describe('DefaultCatalogProcessingEngine', () => {
const engine = new DefaultCatalogProcessingEngine({
config: new ConfigReader({}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
processingDatabase: db,
knex: {} as any,
orchestrator: orchestrator,
@@ -293,7 +293,7 @@ describe('DefaultCatalogProcessingEngine', () => {
const engine = new DefaultCatalogProcessingEngine({
config: new ConfigReader({}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
processingDatabase: db,
knex: {} as any,
orchestrator: orchestrator,
@@ -352,7 +352,7 @@ describe('DefaultCatalogProcessingEngine', () => {
it('should stitch both the previous and new sources when relations change', async () => {
const engine = new DefaultCatalogProcessingEngine({
config: new ConfigReader({}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
processingDatabase: db,
knex: {} as any,
orchestrator: orchestrator,
@@ -467,7 +467,7 @@ describe('DefaultCatalogProcessingEngine', () => {
it('should not stitch sources entities when relations are the same', async () => {
const engine = new DefaultCatalogProcessingEngine({
config: new ConfigReader({}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
processingDatabase: db,
knex: {} as any,
orchestrator: orchestrator,
@@ -550,7 +550,7 @@ describe('DefaultCatalogProcessingEngine', () => {
it('should stitch sources entities when new relation of different type added', async () => {
const engine = new DefaultCatalogProcessingEngine({
config: new ConfigReader({}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
processingDatabase: db,
knex: {} as any,
orchestrator: orchestrator,
@@ -638,7 +638,7 @@ describe('DefaultCatalogProcessingEngine', () => {
it('should stitch sources entities when relation is removed', async () => {
const engine = new DefaultCatalogProcessingEngine({
config: new ConfigReader({}),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
processingDatabase: db,
knex: {} as any,
orchestrator: orchestrator,
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
ANNOTATION_LOCATION,
ANNOTATION_ORIGIN_LOCATION,
@@ -37,6 +36,7 @@ import { DefaultCatalogProcessingOrchestrator } from './DefaultCatalogProcessing
import { defaultEntityDataParser } from '../modules/util/parse';
import { ConfigReader } from '@backstage/config';
import { InputError } from '@backstage/errors';
import { mockServices } from '@backstage/backend-test-utils';
class FooBarProcessor implements CatalogProcessor {
getProcessorName = () => 'foo-bar';
@@ -93,7 +93,7 @@ describe('DefaultCatalogProcessingOrchestrator', () => {
const orchestrator = new DefaultCatalogProcessingOrchestrator({
processors: [new FooBarProcessor()],
integrations: ScmIntegrations.fromConfig(new ConfigReader({})),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
parser: defaultEntityDataParser,
policy: EntityPolicies.allOf([]),
rulesEnforcer: { isAllowed: () => true },
@@ -209,7 +209,7 @@ describe('DefaultCatalogProcessingOrchestrator', () => {
processor2 as CatalogProcessor,
],
integrations: ScmIntegrations.fromConfig(new ConfigReader({})),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
parser: defaultEntityDataParser,
policy: EntityPolicies.allOf([]),
rulesEnforcer: { isAllowed: () => true },
@@ -222,7 +222,7 @@ describe('DefaultCatalogProcessingOrchestrator', () => {
processor2 as CatalogProcessor,
],
integrations: ScmIntegrations.fromConfig(new ConfigReader({})),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
parser: defaultEntityDataParser,
policy: EntityPolicies.allOf([]),
rulesEnforcer: { isAllowed: () => true },
@@ -287,7 +287,7 @@ describe('DefaultCatalogProcessingOrchestrator', () => {
const orchestrator = new DefaultCatalogProcessingOrchestrator({
processors: [processor],
integrations,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
parser,
policy: EntityPolicies.allOf([]),
rulesEnforcer,
@@ -329,7 +329,7 @@ describe('DefaultCatalogProcessingOrchestrator', () => {
const orchestrator = new DefaultCatalogProcessingOrchestrator({
processors: [processor],
integrations,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
parser,
policy: EntityPolicies.allOf([new FailingEntityPolicy()]),
rulesEnforcer,
@@ -14,11 +14,11 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
TestDatabaseId,
TestDatabases,
mockCredentials,
mockServices,
} from '@backstage/backend-test-utils';
import { Entity, stringifyEntityRef } from '@backstage/catalog-model';
import { Knex } from 'knex';
@@ -163,7 +163,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
const result = await catalog.entityAncestry('k:default/root');
@@ -196,7 +196,7 @@ describe('DefaultEntitiesCatalog', () => {
await createDatabase(databaseId);
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
await expect(() =>
@@ -242,7 +242,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
const result = await catalog.entityAncestry('k:default/root');
@@ -301,7 +301,7 @@ describe('DefaultEntitiesCatalog', () => {
await addEntityToSearch(entity2);
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -340,7 +340,7 @@ describe('DefaultEntitiesCatalog', () => {
await addEntityToSearch(entity2);
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -393,7 +393,7 @@ describe('DefaultEntitiesCatalog', () => {
await addEntityToSearch(entity4);
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -452,7 +452,7 @@ describe('DefaultEntitiesCatalog', () => {
await addEntityToSearch(entity2);
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -499,7 +499,7 @@ describe('DefaultEntitiesCatalog', () => {
await addEntityToSearch(entity2);
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -547,7 +547,7 @@ describe('DefaultEntitiesCatalog', () => {
);
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -610,7 +610,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -701,7 +701,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -756,7 +756,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -804,7 +804,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -958,7 +958,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -1113,7 +1113,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -1174,7 +1174,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -1273,7 +1273,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -1353,7 +1353,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -1382,7 +1382,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -1503,7 +1503,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -1567,7 +1567,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -1718,7 +1718,7 @@ describe('DefaultEntitiesCatalog', () => {
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
await catalog.removeEntityByUid(uid);
@@ -1768,7 +1768,7 @@ describe('DefaultEntitiesCatalog', () => {
});
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -1827,7 +1827,7 @@ describe('DefaultEntitiesCatalog', () => {
});
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -1876,7 +1876,7 @@ describe('DefaultEntitiesCatalog', () => {
});
const catalog = new DefaultEntitiesCatalog({
database: knex,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
stitcher,
});
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { NotFoundError } from '@backstage/errors';
import type { Location } from '@backstage/catalog-client';
@@ -78,7 +77,7 @@ describe('createRouter readonly disabled', () => {
entitiesCatalog,
locationService,
orchestrator,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
refreshService,
config: new ConfigReader(undefined),
permissionIntegrationRouter: express.Router(),
@@ -869,7 +868,7 @@ describe('createRouter readonly enabled', () => {
const router = await createRouter({
entitiesCatalog,
locationService,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
config: new ConfigReader({
catalog: {
readonly: true,
@@ -1079,7 +1078,7 @@ describe('NextRouter permissioning', () => {
const router = await createRouter({
entitiesCatalog,
locationService,
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
refreshService,
config: new ConfigReader(undefined),
permissionIntegrationRouter: createPermissionIntegrationRouter({
@@ -14,8 +14,7 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { TestDatabases } from '@backstage/backend-test-utils';
import { TestDatabases, mockServices } from '@backstage/backend-test-utils';
import { Entity } from '@backstage/catalog-model';
import { applyDatabaseMigrations } from '../database/migrations';
import {
@@ -31,7 +30,7 @@ jest.setTimeout(60_000);
describe('Stitcher', () => {
const databases = TestDatabases.create();
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
it.each(databases.eachSupportedId())(
'runs the happy path for %p',
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { DatabaseManager, getVoidLogger } from '@backstage/backend-common';
import {
Entity,
EntityPolicies,
@@ -55,6 +54,7 @@ import { RefreshOptions, RefreshService } from '../service/types';
import { DefaultStitcher } from '../stitching/DefaultStitcher';
import { mockServices } from '@backstage/backend-test-utils';
import { LoggerService } from '@backstage/backend-plugin-api';
import { DatabaseManager } from '@backstage/backend-common';
const voidLogger = mockServices.logger.mock();
@@ -223,7 +223,7 @@ class TestHarness {
},
},
);
const logger = options?.logger ?? getVoidLogger();
const logger = options?.logger ?? mockServices.logger.mock();
const db =
options?.db ??
(await DatabaseManager.fromConfig(config, { logger })
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import express from 'express';
import request from 'supertest';
@@ -38,7 +37,7 @@ describe('createRouter', () => {
beforeAll(async () => {
const router = await createRouter({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
config: new ConfigReader({
healthCheck: {
endpoint: [
@@ -19,12 +19,12 @@ import {
ReceiveMessageCommand,
SQSClient,
} from '@aws-sdk/client-sqs';
import { getVoidLogger } from '@backstage/backend-common';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { ConfigReader } from '@backstage/config';
import { TestEventsService } from '@backstage/plugin-events-backend-test-utils';
import { mockClient } from 'aws-sdk-client-mock';
import { AwsSqsConsumingEventPublisher } from './AwsSqsConsumingEventPublisher';
import { mockServices } from '@backstage/backend-test-utils';
describe('AwsSqsConsumingEventPublisher', () => {
it('creates one publisher instance per configured topic', async () => {
@@ -52,7 +52,7 @@ describe('AwsSqsConsumingEventPublisher', () => {
},
},
});
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const events = new TestEventsService();
const scheduler = {
scheduleTask: jest.fn(),
@@ -86,7 +86,7 @@ describe('AwsSqsConsumingEventPublisher', () => {
},
},
});
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const events = new TestEventsService();
const scheduler = {
scheduleTask: jest.fn(),
@@ -134,7 +134,7 @@ describe('AwsSqsConsumingEventPublisher', () => {
},
},
});
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const events = new TestEventsService();
let taskFn: (() => Promise<void>) | undefined = undefined;
const scheduler = {
@@ -14,12 +14,12 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { TestEventSubscriber } from '@backstage/plugin-events-backend-test-utils';
import { EventParams, EventSubscriber } from '@backstage/plugin-events-node';
import { DefaultEventBroker } from './DefaultEventBroker';
import { mockServices } from '@backstage/backend-test-utils';
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
describe('DefaultEventBroker', () => {
it('passes events to interested subscribers', () => {
@@ -14,15 +14,16 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
TestEventBroker,
TestEventPublisher,
TestEventSubscriber,
} from '@backstage/plugin-events-backend-test-utils';
import { EventsBackend } from './EventsBackend';
import { mockServices } from '@backstage/backend-test-utils';
import { loggerToWinstonLogger } from '@backstage/backend-common';
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
describe('EventsBackend', () => {
it('wires up all components', async () => {
@@ -30,7 +31,7 @@ describe('EventsBackend', () => {
const publisher1 = new TestEventPublisher();
const publisher2 = new TestEventPublisher();
await new EventsBackend(logger)
await new EventsBackend(loggerToWinstonLogger(logger))
.setEventBroker(eventBroker)
.addPublishers(publisher1, [publisher2])
.addSubscribers(new TestEventSubscriber('one', ['topicA']), [
@@ -14,16 +14,16 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { TestEventsService } from '@backstage/plugin-events-backend-test-utils';
import express from 'express';
import Router from 'express-promise-router';
import request from 'supertest';
import { HttpPostIngressEventPublisher } from './HttpPostIngressEventPublisher';
import { mockServices } from '@backstage/backend-test-utils';
describe('HttpPostIngressEventPublisher', () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
it('should set up routes correctly', async () => {
const config = new ConfigReader({
+1
View File
@@ -49,6 +49,7 @@
},
"devDependencies": {
"@backstage/backend-common": "workspace:^",
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^"
}
}
@@ -14,11 +14,11 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { DefaultEventsService } from './DefaultEventsService';
import { EventParams } from './EventParams';
import { mockServices } from '@backstage/backend-test-utils';
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
describe('DefaultEventsService', () => {
it('passes events to interested subscribers', async () => {
@@ -43,6 +43,7 @@
"yn": "^4.0.0"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
"@types/supertest": "^2.0.8",
"@types/uuid": "^9.0.0",
@@ -14,19 +14,19 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { DefaultIdentityClient } from '@backstage/plugin-auth-node';
import express from 'express';
import request from 'supertest';
import { createRouter } from './router';
import { mockServices } from '@backstage/backend-test-utils';
describe('createRouter', () => {
let app: express.Express;
beforeAll(async () => {
const router = await createRouter({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
identity: {} as DefaultIdentityClient,
});
app = express().use(router);
@@ -15,10 +15,10 @@
*/
import { AccessToken, TokenCredential } from '@azure/identity';
import { getVoidLogger } from '@backstage/backend-common';
import { AzureIdentityStrategy } from './AzureIdentityStrategy';
import { mockServices } from '@backstage/backend-test-utils';
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
class StaticTokenCredential implements TokenCredential {
private count: number = 0;
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { Config, ConfigReader } from '@backstage/config';
import { CatalogApi } from '@backstage/catalog-client';
import { ANNOTATION_KUBERNETES_AUTH_PROVIDER } from '@backstage/plugin-kubernetes-common';
@@ -65,7 +64,7 @@ describe('getCombinedClusterSupplier', () => {
config,
catalogApi,
mockStrategy,
getVoidLogger(),
mockServices.logger.mock(),
undefined,
auth,
);
@@ -109,7 +108,7 @@ describe('getCombinedClusterSupplier', () => {
config,
catalogApi,
new DispatchStrategy({ authStrategyMap: {} }),
getVoidLogger(),
mockServices.logger.mock(),
undefined,
auth,
),
@@ -119,7 +118,7 @@ describe('getCombinedClusterSupplier', () => {
});
it('logs a warning when two clusters have the same name', async () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const warn = jest.spyOn(logger, 'warn');
const config: Config = new ConfigReader(
{
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
ClusterDetails,
CustomResource,
@@ -27,7 +26,10 @@ import { KubernetesFanOutHandler } from './KubernetesFanOutHandler';
import { KubernetesClientBasedFetcher } from './KubernetesFetcher';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import {
FetchResponse,
KubernetesRequestAuth,
@@ -189,7 +191,7 @@ describe('KubernetesFanOutHandler', () => {
const getKubernetesFanOutHandler = (customResources: CustomResource[]) => {
return new KubernetesFanOutHandler({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
fetcher: {
fetchObjectsForService,
fetchPodMetricsByNamespaces,
@@ -1169,7 +1171,7 @@ describe('KubernetesFanOutHandler', () => {
],
}),
};
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const kubernetesFanOutHandler = new KubernetesFanOutHandler({
logger,
fetcher: new KubernetesClientBasedFetcher({ logger }),
@@ -15,7 +15,6 @@
*/
import { ANNOTATION_KUBERNETES_AUTH_PROVIDER } from '@backstage/plugin-kubernetes-common';
import { getVoidLogger } from '@backstage/backend-common';
import { KubernetesClientBasedFetcher } from './KubernetesFetcher';
import { ObjectToFetch } from '../types/types';
import {
@@ -28,6 +27,7 @@ import {
import { setupServer } from 'msw/node';
import {
createMockDirectory,
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { Config } from '@kubernetes/client-node';
@@ -115,7 +115,7 @@ describe('KubernetesFetcher', () => {
describe('fetchObjectsForService', () => {
let sut: KubernetesClientBasedFetcher;
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const testErrorResponse = async (
errorResponse: any,
@@ -1095,7 +1095,7 @@ describe('KubernetesFetcher', () => {
beforeEach(() => {
sut = new KubernetesClientBasedFetcher({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
});
@@ -16,9 +16,10 @@
import 'buffer';
import { resolve as resolvePath } from 'path';
import { errorHandler, getVoidLogger } from '@backstage/backend-common';
import { errorHandler } from '@backstage/backend-common';
import {
createMockDirectory,
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { NotFoundError } from '@backstage/errors';
@@ -70,7 +71,7 @@ describe('KubernetesProxy', () => {
let proxy: KubernetesProxy;
let authStrategy: jest.Mocked<AuthenticationStrategy>;
const worker = setupServer();
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const clusterSupplier: jest.Mocked<KubernetesClustersSupplier> = {
getClusters: jest.fn<
@@ -549,7 +550,7 @@ describe('KubernetesProxy', () => {
};
proxy = new KubernetesProxy({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
clusterSupplier: clusterSupplier,
authStrategy: strategy,
discovery: mockDisocveryApi,
@@ -671,7 +672,7 @@ describe('KubernetesProxy', () => {
it('returns a response with a localKubectlProxy auth provider configuration', async () => {
proxy = new KubernetesProxy({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
clusterSupplier: new LocalKubectlProxyClusterLocator(),
authStrategy: new AnonymousStrategy(),
discovery: mockDisocveryApi,
@@ -32,15 +32,15 @@ import {
KubernetesRequestAuth,
} from '@backstage/plugin-kubernetes-common';
import { PinnipedHelper, PinnipedParameters } from './PinnipedHelper';
import { getVoidLogger } from '@backstage/backend-common';
import { HEADER_KUBERNETES_CLUSTER } from '@backstage/plugin-kubernetes-backend';
import { JsonObject } from '@backstage/types';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { loggerToWinstonLogger } from '@backstage/backend-common';
describe('Pinniped - tokenCredentialRequest', () => {
let app: ExtendedHttpServer;
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
let httpsRequest: jest.SpyInstance;
const worker = setupServer();
setupRequestMockHandlers(worker);
@@ -15,7 +15,6 @@
*/
import {
DatabaseManager,
getVoidLogger,
PluginDatabaseManager,
} from '@backstage/backend-common';
import express from 'express';
@@ -53,7 +52,7 @@ describe('createRouter', () => {
beforeAll(async () => {
const router = await createRouter({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
database: createDatabase(),
discovery,
signals: signalService,
@@ -16,7 +16,6 @@
import express from 'express';
import request from 'supertest';
import { getVoidLogger } from '@backstage/backend-common';
import { AuthorizeResult } from '@backstage/plugin-permission-common';
import {
ApplyConditionsRequestEntry,
@@ -67,7 +66,7 @@ describe('createRouter', () => {
beforeAll(async () => {
const router = await createRouter({
config: new ConfigReader({ permission: { enabled: true } }),
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
discovery: mockServices.discovery(),
auth: mockServices.auth(),
httpAuth: mockServices.httpAuth({
@@ -29,7 +29,6 @@ import {
} from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import {
getVoidLogger,
PluginEndpointDiscovery,
ServerTokenManager,
} from '@backstage/backend-common';
@@ -62,7 +61,7 @@ const config = new ConfigReader({
permission: { enabled: true },
backend: { auth: { keys: [{ secret: 'a-secret-key' }] } },
});
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
describe('ServerPermissionClient', () => {
setupRequestMockHandlers(server);
@@ -14,7 +14,10 @@
* limitations under the License.
*/
import { getVoidLogger, HostDiscovery } from '@backstage/backend-common';
import {
HostDiscovery,
loggerToWinstonLogger,
} from '@backstage/backend-common';
import {
ConfigSources,
MutableConfigSource,
@@ -25,6 +28,7 @@ import { rest } from 'msw';
import { setupServer } from 'msw/node';
import request from 'supertest';
import { createRouter } from './router';
import { mockServices } from '@backstage/backend-test-utils';
// this test is stored in its own file to work around the mocked
// http-proxy-middleware module used in the rest of the tests
@@ -57,7 +61,7 @@ describe('createRouter reloadable configuration', () => {
afterEach(() => server.resetHandlers());
it('should be able to observe the config', async () => {
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
// Grab the subscriber function and use mutable config data to mock a config file change
const mutableConfigSource = MutableConfigSource.create({ data: {} });
@@ -14,7 +14,10 @@
* limitations under the License.
*/
import { getVoidLogger, HostDiscovery } from '@backstage/backend-common';
import {
HostDiscovery,
loggerToWinstonLogger,
} from '@backstage/backend-common';
import { mockServices } from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
import { Request, Response } from 'express';
@@ -37,7 +40,7 @@ const mockCreateProxyMiddleware = createProxyMiddleware as jest.MockedFunction<
describe('createRouter', () => {
describe('where all proxy config are valid', () => {
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
const config = new ConfigReader({
backend: {
baseUrl: 'https://example.com:7007',
@@ -130,7 +133,7 @@ describe('createRouter', () => {
describe('where buildMiddleware would fail', () => {
it('throws an error if skip failures is not set', async () => {
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
logger.warn = jest.fn();
const config = new ConfigReader({
backend: {
@@ -165,7 +168,7 @@ describe('createRouter', () => {
});
it('works if skip failures is set', async () => {
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
logger.warn = jest.fn();
const config = new ConfigReader({
backend: {
@@ -201,7 +204,7 @@ describe('createRouter', () => {
});
describe('buildMiddleware', () => {
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
beforeEach(() => {
mockCreateProxyMiddleware.mockClear();
@@ -14,12 +14,12 @@
* limitations under the License.
*/
import { createConfluenceToMarkdownAction } from './confluenceToMarkdown';
import { getVoidLogger } from '@backstage/backend-common';
import { UrlReader } from '@backstage/backend-common';
import { UrlReader, loggerToWinstonLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import {
createMockDirectory,
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { rest } from 'msw';
@@ -57,7 +57,7 @@ describe('confluence:transform:markdown examples', () => {
repoUrl: string;
}>;
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
jest.spyOn(logger, 'info');
const mockDir = createMockDirectory();
@@ -15,12 +15,12 @@
*/
import { createConfluenceToMarkdownAction } from './confluenceToMarkdown';
import { getVoidLogger } from '@backstage/backend-common';
import { UrlReader } from '@backstage/backend-common';
import { UrlReader, loggerToWinstonLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import {
createMockDirectory,
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import type { ActionContext } from '@backstage/plugin-scaffolder-node';
@@ -56,7 +56,7 @@ describe('confluence:transform:markdown', () => {
repoUrl: string;
}>;
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
jest.spyOn(logger, 'info');
const mockDir = createMockDirectory();
@@ -53,12 +53,13 @@ const mockGit = {
};
jest.mock('@backstage/backend-common', () => ({
loggerToWinstonLogger: jest.requireActual('@backstage/backend-common')
.loggerToWinstonLogger,
Git: {
fromAuth() {
return mockGit;
},
},
getVoidLogger: jest.requireActual('@backstage/backend-common').getVoidLogger,
}));
jest.mock('./helpers', () => {
@@ -27,12 +27,13 @@ const mockGit = {
};
jest.mock('@backstage/backend-common', () => ({
loggerToWinstonLogger: jest.requireActual('@backstage/backend-common')
.loggerToWinstonLogger,
Git: {
fromAuth() {
return mockGit;
},
},
getVoidLogger: jest.requireActual('@backstage/backend-common').getVoidLogger,
}));
jest.mock('./gitHelpers', () => {
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { NunjucksWorkflowRunner } from './NunjucksWorkflowRunner';
import { TemplateActionRegistry } from '../actions';
import { ScmIntegrations } from '@backstage/integration';
@@ -37,11 +36,14 @@ import { RESOURCE_TYPE_SCAFFOLDER_ACTION } from '@backstage/plugin-scaffolder-co
import {
createMockDirectory,
mockCredentials,
mockServices,
} from '@backstage/backend-test-utils';
import stripAnsi from 'strip-ansi';
import { loggerToWinstonLogger } from '@backstage/backend-common';
import { LoggerService } from '@backstage/backend-plugin-api';
describe('NunjucksWorkflowRunner', () => {
const logger = getVoidLogger();
let logger: LoggerService;
let actionRegistry = new TemplateActionRegistry();
let runner: NunjucksWorkflowRunner;
let fakeActionHandler: jest.Mock;
@@ -94,6 +96,7 @@ describe('NunjucksWorkflowRunner', () => {
mockDir.clear();
jest.resetAllMocks();
logger = mockServices.logger.mock();
actionRegistry = new TemplateActionRegistry();
fakeActionHandler = jest.fn();
fakeTaskLog = jest.fn();
@@ -173,7 +176,7 @@ describe('NunjucksWorkflowRunner', () => {
actionRegistry,
integrations,
workingDirectory: mockDir.path,
logger,
logger: loggerToWinstonLogger(logger),
permissions: mockedPermissionApi,
});
});
@@ -14,7 +14,10 @@
* limitations under the License.
*/
import { getVoidLogger, DatabaseManager } from '@backstage/backend-common';
import {
DatabaseManager,
loggerToWinstonLogger,
} from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { TaskSpec } from '@backstage/plugin-scaffolder-common';
import {
@@ -23,6 +26,7 @@ import {
} from '@backstage/plugin-scaffolder-node';
import { DatabaseTaskStore } from './DatabaseTaskStore';
import { StorageTaskBroker, TaskManager } from './StorageTaskBroker';
import { mockServices } from '@backstage/backend-test-utils';
async function createStore(): Promise<DatabaseTaskStore> {
const manager = DatabaseManager.fromConfig(
@@ -55,7 +59,7 @@ describe('StorageTaskBroker', () => {
secrets: fakeSecrets,
};
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
it('should claim a dispatched work item', async () => {
const broker = new StorageTaskBroker(storage, logger);
await broker.dispatch(emptyTaskSpec);
@@ -15,7 +15,10 @@
*/
import os from 'os';
import { DatabaseManager, getVoidLogger } from '@backstage/backend-common';
import {
DatabaseManager,
loggerToWinstonLogger,
} from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { DatabaseTaskStore } from './DatabaseTaskStore';
import { StorageTaskBroker } from './StorageTaskBroker';
@@ -31,6 +34,7 @@ import {
import { WorkflowRunner } from './types';
import ObservableImpl from 'zen-observable';
import waitForExpect from 'wait-for-expect';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('./NunjucksWorkflowRunner');
const MockedNunjucksWorkflowRunner =
@@ -74,7 +78,7 @@ describe('TaskWorker', () => {
MockedNunjucksWorkflowRunner.mockImplementation(() => workflowRunner);
});
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
it('should call the default workflow runner when the apiVersion is beta3', async () => {
const broker = new StorageTaskBroker(storage, logger);
@@ -167,7 +171,7 @@ describe('Concurrent TaskWorker', () => {
MockedNunjucksWorkflowRunner.mockImplementation(() => workflowRunner);
});
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
it('should be able to run multiple tasks at once', async () => {
const broker = new StorageTaskBroker(storage, logger);
@@ -228,7 +232,7 @@ describe('Cancellable TaskWorker', () => {
MockedNunjucksWorkflowRunner.mockImplementation(() => workflowRunner);
});
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
it('should be able to cancel the running task', async () => {
const taskBroker = new StorageTaskBroker(storage, logger);
@@ -16,7 +16,7 @@
import {
DatabaseManager,
getVoidLogger,
loggerToWinstonLogger,
PluginDatabaseManager,
UrlReaders,
} from '@backstage/backend-common';
@@ -76,7 +76,7 @@ function createDatabase(): PluginDatabaseManager {
}
const mockUrlReader = UrlReaders.default({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
config: new ConfigReader({}),
});
@@ -183,7 +183,7 @@ describe('createRouter', () => {
describe('not providing an identity api', () => {
beforeEach(async () => {
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
const databaseTaskStore = await DatabaseTaskStore.create({
database: createDatabase(),
});
@@ -238,7 +238,7 @@ describe('createRouter', () => {
});
afterEach(() => {
jest.resetAllMocks();
jest.clearAllMocks();
});
describe('GET /v2/actions', () => {
@@ -690,7 +690,7 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{
describe('providing an identity api', () => {
beforeEach(async () => {
const logger = getVoidLogger();
const logger = loggerToWinstonLogger(mockServices.logger.mock());
const databaseTaskStore = await DatabaseTaskStore.create({
database: createDatabase(),
});
@@ -15,10 +15,11 @@
*/
import { PassThrough } from 'stream';
import { getVoidLogger } from '@backstage/backend-common';
import { loggerToWinstonLogger } from '@backstage/backend-common';
import {
createMockDirectory,
mockCredentials,
mockServices,
} from '@backstage/backend-test-utils';
import { JsonObject } from '@backstage/types';
import { ActionContext } from '@backstage/plugin-scaffolder-node';
@@ -37,7 +38,7 @@ export const createMockActionContext = <
): ActionContext<TActionInput, TActionOutput> => {
const credentials = mockCredentials.user();
const defaultContext = {
logger: getVoidLogger(),
logger: loggerToWinstonLogger(mockServices.logger.mock()),
logStream: new PassThrough(),
output: jest.fn(),
createTemporaryDirectory: jest.fn(),
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { loggerToWinstonLogger } from '@backstage/backend-common';
import { Git } from '../scm';
import {
commitAndPushRepo,
@@ -24,6 +24,7 @@ import {
createBranch,
cloneRepo,
} from './gitHelpers';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('../scm', () => ({
Git: {
@@ -40,14 +41,13 @@ jest.mock('../scm', () => ({
clone: jest.fn(),
}),
},
getVoidLogger: jest.requireActual('@backstage/backend-common').getVoidLogger,
}));
jest.mock('fs-extra', () => ({
cpSync: jest.fn(),
}));
const mockedGit = Git.fromAuth({
logger: getVoidLogger(),
logger: loggerToWinstonLogger(mockServices.logger.mock()),
});
describe('initRepoAndPush', () => {
@@ -64,7 +64,7 @@ describe('initRepoAndPush', () => {
username: 'test-user',
password: 'test-password',
},
logger: getVoidLogger(),
logger: loggerToWinstonLogger(mockServices.logger.mock()),
});
});
@@ -120,7 +120,7 @@ describe('initRepoAndPush', () => {
auth: {
token: 'test-token',
},
logger: getVoidLogger(),
logger: loggerToWinstonLogger(mockServices.logger.mock()),
});
expect(mockedGit.init).toHaveBeenCalledWith({
@@ -138,7 +138,7 @@ describe('initRepoAndPush', () => {
username: 'test-user',
password: 'test-password',
},
logger: getVoidLogger(),
logger: loggerToWinstonLogger(mockServices.logger.mock()),
});
expect(mockedGit.init).toHaveBeenCalledWith({
@@ -159,7 +159,7 @@ describe('initRepoAndPush', () => {
username: 'test-user',
password: 'test-password',
},
logger: getVoidLogger(),
logger: loggerToWinstonLogger(mockServices.logger.mock()),
});
expect(mockedGit.commit).toHaveBeenCalledWith({
@@ -190,7 +190,7 @@ describe('commitAndPushRepo', () => {
username: 'test-user',
password: 'test-password',
},
logger: getVoidLogger(),
logger: loggerToWinstonLogger(mockServices.logger.mock()),
commitMessage: 'commit message',
});
});
@@ -246,7 +246,7 @@ describe('commitAndPushRepo', () => {
username: 'test-user',
password: 'test-password',
},
logger: getVoidLogger(),
logger: loggerToWinstonLogger(mockServices.logger.mock()),
commitMessage: 'commit message',
branch: 'otherbranch',
});
@@ -269,7 +269,7 @@ describe('commitAndPushRepo', () => {
username: 'test-user',
password: 'test-password',
},
logger: getVoidLogger(),
logger: loggerToWinstonLogger(mockServices.logger.mock()),
commitMessage: 'commit message',
remoteRef: 'refs/for/master',
});
@@ -297,7 +297,7 @@ describe('commitAndPushRepo', () => {
username: 'test-user',
password: 'test-password',
},
logger: getVoidLogger(),
logger: loggerToWinstonLogger(mockServices.logger.mock()),
branch: 'master',
});
@@ -560,7 +560,7 @@ describe('commitAndPushBranch', () => {
name: 'gitCommitter',
email: 'gitCommitter@backstage.io',
},
logger: getVoidLogger(),
logger: loggerToWinstonLogger(mockServices.logger.mock()),
});
expect(mockedGit.commit).toHaveBeenCalledWith({
@@ -62,6 +62,7 @@
},
"devDependencies": {
"@backstage/backend-common": "workspace:^",
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
"@elastic/elasticsearch-mock": "^1.0.0",
"@short.io/opensearch-mock": "^0.3.1"
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { errors } from '@elastic/elasticsearch';
import Mock from '@elastic/elasticsearch-mock';
@@ -26,6 +25,7 @@ import {
encodePageCursor,
} from './ElasticSearchSearchEngine';
import { ElasticSearchSearchEngineIndexer } from './ElasticSearchSearchEngineIndexer';
import { mockServices } from '@backstage/backend-test-utils';
jest.mock('uuid', () => ({ v4: () => 'tag' }));
@@ -86,14 +86,14 @@ describe('ElasticSearchSearchEngine', () => {
options,
'search',
'',
getVoidLogger(),
mockServices.logger.mock(),
1000,
);
inspectableSearchEngine = new ElasticSearchSearchEngineForTranslatorTests(
options,
'search',
'',
getVoidLogger(),
mockServices.logger.mock(),
1000,
);
// eslint-disable-next-line dot-notation
@@ -915,7 +915,7 @@ describe('ElasticSearchSearchEngine', () => {
const getOptional = jest.spyOn(config, 'getOptional');
await ElasticSearchSearchEngine.fromConfig({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
config,
});
@@ -940,7 +940,7 @@ describe('ElasticSearchSearchEngine', () => {
expect(
async () =>
await ElasticSearchSearchEngine.fromConfig({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
config,
}),
).not.toThrow();
@@ -14,12 +14,12 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { TestPipeline } from '@backstage/plugin-search-backend-node';
import Mock from '@elastic/elasticsearch-mock';
import { range } from 'lodash';
import { ElasticSearchClientWrapper } from './ElasticSearchClientWrapper';
import { ElasticSearchSearchEngineIndexer } from './ElasticSearchSearchEngineIndexer';
import { mockServices } from '@backstage/backend-test-utils';
const mock = new Mock();
const clientWrapper = ElasticSearchClientWrapper.fromClientOptions({
@@ -43,7 +43,7 @@ describe('ElasticSearchSearchEngineIndexer', () => {
indexPrefix: '',
indexSeparator: '-index__',
alias: 'some-type-index__search',
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
elasticSearchClientWrapper: clientWrapper,
batchSize: 1000,
skipRefresh: false,
@@ -270,7 +270,7 @@ describe('ElasticSearchSearchEngineIndexer', () => {
indexPrefix: '',
indexSeparator: '-index__',
alias: 'some-type-index__search',
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
elasticSearchClientWrapper: mockClientWrapper,
batchSize: 1000,
skipRefresh: false,
@@ -292,7 +292,7 @@ describe('ElasticSearchSearchEngineIndexer', () => {
indexPrefix: '',
indexSeparator: '-index__',
alias: 'some-type-index__search',
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
elasticSearchClientWrapper: clientWrapper,
batchSize: 1000,
skipRefresh: true,
@@ -14,19 +14,21 @@
* limitations under the License.
*/
import {
getVoidLogger,
PluginEndpointDiscovery,
TokenManager,
} from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { TestPipeline } from '@backstage/plugin-search-backend-node';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { Readable } from 'stream';
import { ToolDocumentCollatorFactory } from './ToolDocumentCollatorFactory';
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const mockTools = {
tools: [
@@ -13,19 +13,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import {
StackOverflowQuestionsCollatorFactory,
StackOverflowQuestionsCollatorFactoryOptions,
} from './StackOverflowQuestionsCollatorFactory';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { TestPipeline } from '@backstage/plugin-search-backend-node';
import { ConfigReader } from '@backstage/config';
import { Readable } from 'stream';
import { setupServer } from 'msw/node';
import { rest } from 'msw';
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const mockQuestion = {
items: [
@@ -14,14 +14,16 @@
* limitations under the License.
*/
import {
getVoidLogger,
PluginEndpointDiscovery,
TokenManager,
} from '@backstage/backend-common';
import { Entity } from '@backstage/catalog-model';
import { ConfigReader } from '@backstage/config';
import { TestPipeline } from '@backstage/plugin-search-backend-node';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import {
mockServices,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { Readable } from 'stream';
@@ -29,7 +31,7 @@ import { DefaultTechDocsCollatorFactory } from './DefaultTechDocsCollatorFactory
import { defaultTechDocsCollatorEntityTransformer } from './defaultTechDocsCollatorEntityTransformer';
import { TechDocsCollatorEntityTransformer } from './TechDocsCollatorEntityTransformer';
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
const mockSearchDocIndex = {
config: {
@@ -89,8 +91,8 @@ describe('DefaultTechDocsCollatorFactory', () => {
authenticate: jest.fn(),
};
const options = {
logger,
discovery: mockDiscoveryApi,
logger: getVoidLogger(),
tokenManager: mockTokenManager,
};
+1
View File
@@ -60,6 +60,7 @@
},
"devDependencies": {
"@backstage/backend-common": "workspace:^",
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
"@types/ndjson": "^2.0.1"
}
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { TaskInvocationDefinition, TaskRunner } from '@backstage/backend-tasks';
import {
DocumentCollatorFactory,
@@ -23,6 +22,7 @@ import {
import { Readable, Transform } from 'stream';
import { IndexBuilder } from './IndexBuilder';
import { LunrSearchEngine, SearchEngine } from './index';
import { mockServices } from '@backstage/backend-test-utils';
class TestDocumentCollatorFactory implements DocumentCollatorFactory {
readonly type: string = 'anything';
@@ -57,7 +57,7 @@ describe('IndexBuilder', () => {
let testScheduledTaskRunner: TaskRunner;
beforeEach(() => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
testScheduledTaskRunner = {
run: async (task: TaskInvocationDefinition & { fn: () => void }) => {
task.fn();
@@ -14,14 +14,14 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { Scheduler } from './index';
import { mockServices } from '@backstage/backend-test-utils';
describe('Scheduler', () => {
let testScheduler: Scheduler;
beforeEach(() => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
testScheduler = new Scheduler({
logger,
});
@@ -15,7 +15,6 @@
*/
import {
getVoidLogger,
ReadUrlResponse,
UrlReader,
UrlReaders,
@@ -24,10 +23,11 @@ import { ConfigReader } from '@backstage/config';
import { Readable } from 'stream';
import { NewlineDelimitedJsonCollatorFactory } from './NewlineDelimitedJsonCollatorFactory';
import { TestPipeline } from '../test-utils';
import { mockServices } from '@backstage/backend-test-utils';
describe('DefaultCatalogCollatorFactory', () => {
const config = new ConfigReader({});
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
it('has expected type', () => {
const factory = NewlineDelimitedJsonCollatorFactory.fromConfig(config, {
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import lunr from 'lunr';
import { IndexableDocument } from '@backstage/plugin-search-common';
import {
@@ -27,6 +26,7 @@ import {
import { LunrSearchEngineIndexer } from './LunrSearchEngineIndexer';
import { SearchEngine } from '../types';
import { TestPipeline } from '../test-utils';
import { mockServices } from '@backstage/backend-test-utils';
/**
* Just used to test the default translator shipped with LunrSearchEngine.
@@ -77,7 +77,9 @@ describe('LunrSearchEngine', () => {
let testLunrSearchEngine: SearchEngine;
beforeEach(() => {
testLunrSearchEngine = new LunrSearchEngine({ logger: getVoidLogger() });
testLunrSearchEngine = new LunrSearchEngine({
logger: mockServices.logger.mock(),
});
jest.clearAllMocks();
});
@@ -107,7 +109,7 @@ describe('LunrSearchEngine', () => {
it('should return translated query', async () => {
const inspectableSearchEngine = new LunrSearchEngineForTests({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const translatorUnderTest = inspectableSearchEngine.getTranslator();
@@ -149,7 +151,7 @@ describe('LunrSearchEngine', () => {
it('should have default offset and limit', async () => {
const inspectableSearchEngine = new LunrSearchEngineForTests({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const translatorUnderTest = inspectableSearchEngine.getTranslator();
@@ -190,7 +192,7 @@ describe('LunrSearchEngine', () => {
it('should return translated query with 1 filter', async () => {
const inspectableSearchEngine = new LunrSearchEngineForTests({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const translatorUnderTest = inspectableSearchEngine.getTranslator();
@@ -235,7 +237,7 @@ describe('LunrSearchEngine', () => {
it('should handle single-item array filter as scalar value', async () => {
const inspectableSearchEngine = new LunrSearchEngineForTests({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const translatorUnderTest = inspectableSearchEngine.getTranslator();
@@ -266,7 +268,7 @@ describe('LunrSearchEngine', () => {
it('should return translated query with multiple filters', async () => {
const inspectableSearchEngine = new LunrSearchEngineForTests({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const translatorUnderTest = inspectableSearchEngine.getTranslator();
@@ -315,7 +317,7 @@ describe('LunrSearchEngine', () => {
it('should throw if translated query references missing field', async () => {
const inspectableSearchEngine = new LunrSearchEngineForTests({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const translatorUnderTest = inspectableSearchEngine.getTranslator();
@@ -477,7 +479,7 @@ describe('LunrSearchEngine', () => {
it('should perform search query and return highlight metadata on match', async () => {
const inspectableSearchEngine = new LunrSearchEngineForTests({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
const mockDocuments = [
@@ -1012,7 +1014,7 @@ describe('LunrSearchEngine', () => {
// Set up an inspectable search engine to pre-set some data.
const inspectableSearchEngine = new LunrSearchEngineForTests({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
inspectableSearchEngine.setDocStore({ 'existing-location': doc });
@@ -1047,7 +1049,7 @@ describe('LunrSearchEngine', () => {
// Set up an inspectable search engine to pre-set some data.
const doc = { title: 'A doc', text: 'test', location: 'some-location' };
const inspectableSearchEngine = new LunrSearchEngineForTests({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
inspectableSearchEngine.setDocStore({ 'existing-location': doc });
@@ -1073,7 +1075,7 @@ describe('LunrSearchEngine', () => {
// Set up an inspectable search engine to pre-set some data.
const doc = { title: 'A doc', text: 'test', location: 'some-location' };
const inspectableSearchEngine = new LunrSearchEngineForTests({
logger: getVoidLogger(),
logger: mockServices.logger.mock(),
});
inspectableSearchEngine.setDocStore({ 'existing-location': doc });
@@ -1178,7 +1180,9 @@ describe('stopword testing', () => {
let testLunrSearchEngine: SearchEngine;
beforeEach(() => {
testLunrSearchEngine = new LunrSearchEngine({ logger: getVoidLogger() });
testLunrSearchEngine = new LunrSearchEngine({
logger: mockServices.logger.mock(),
});
jest.clearAllMocks();
});
@@ -14,10 +14,7 @@
* limitations under the License.
*/
import {
PluginEndpointDiscovery,
getVoidLogger,
} from '@backstage/backend-common';
import { PluginEndpointDiscovery } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { PermissionEvaluator } from '@backstage/plugin-permission-common';
import {
@@ -55,7 +52,7 @@ describe('createRouter', () => {
};
beforeAll(async () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
mockSearchEngine = {
getIndexer: jest.fn(),
setTranslator: jest.fn(),
@@ -259,7 +256,7 @@ describe('createRouter', () => {
describe('search result filtering', () => {
beforeAll(async () => {
const logger = getVoidLogger();
const logger = mockServices.logger.mock();
mockSearchEngine = {
getIndexer: jest.fn(),
setTranslator: jest.fn(),

Some files were not shown because too many files have changed in this diff Show More