From 08121b62c54afeba28e1379fa1c9525f7bde5bfc Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 13 Jan 2023 00:58:47 +0100 Subject: [PATCH] backend-test-utils: add mock root logger service Signed-off-by: Patrik Oldsberg --- .../implementations/mockRootLoggerService.ts | 90 +++++++++++++++++++ .../src/next/wiring/TestBackend.ts | 4 +- 2 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 packages/backend-test-utils/src/next/implementations/mockRootLoggerService.ts diff --git a/packages/backend-test-utils/src/next/implementations/mockRootLoggerService.ts b/packages/backend-test-utils/src/next/implementations/mockRootLoggerService.ts new file mode 100644 index 0000000000..f5421e273b --- /dev/null +++ b/packages/backend-test-utils/src/next/implementations/mockRootLoggerService.ts @@ -0,0 +1,90 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + coreServices, + createServiceFactory, + LoggerService, + LogMeta, + RootLoggerService, +} from '@backstage/backend-plugin-api'; + +interface MockLoggerOptions { + levels: + | boolean + | { error: boolean; warn: boolean; info: boolean; debug: boolean }; +} + +class MockLogger implements RootLoggerService { + #levels: Exclude; + #meta: LogMeta; + + error(message: string, meta?: LogMeta | Error | undefined): void { + this.#log('error', message, meta); + } + + warn(message: string, meta?: LogMeta | Error | undefined): void { + this.#log('warn', message, meta); + } + + info(message: string, meta?: LogMeta | Error | undefined): void { + this.#log('info', message, meta); + } + + debug(message: string, meta?: LogMeta | Error | undefined): void { + this.#log('debug', message, meta); + } + + child(meta: LogMeta): LoggerService { + return new MockLogger(this.#levels, { ...this.#meta, ...meta }); + } + + constructor(levels: MockLoggerOptions['levels'], meta: LogMeta) { + if (typeof levels === 'boolean') { + this.#levels = { + error: levels, + debug: levels, + info: levels, + warn: levels, + }; + } else { + this.#levels = levels; + } + this.#meta = meta; + } + + #log( + level: 'error' | 'warn' | 'info' | 'debug', + message: string, + meta?: LogMeta | Error | undefined, + ) { + if (this.#levels[level]) { + const labels = Object.entries(this.#meta) + .map(([key, value]) => `${key}=${value}`) + .join(','); + console[level](`${labels} ${message}`, meta); + } + } +} + +/** @public */ +export const mockRootLoggerService = createServiceFactory({ + service: coreServices.rootLogger, + deps: {}, + async factory(_deps) { + return new MockLogger(false, {}); + }, +}); diff --git a/packages/backend-test-utils/src/next/wiring/TestBackend.ts b/packages/backend-test-utils/src/next/wiring/TestBackend.ts index 8fe489750a..21650125d3 100644 --- a/packages/backend-test-utils/src/next/wiring/TestBackend.ts +++ b/packages/backend-test-utils/src/next/wiring/TestBackend.ts @@ -20,7 +20,6 @@ import { lifecycleFactory, rootLifecycleFactory, loggerFactory, - rootLoggerFactory, cacheFactory, permissionsFactory, schedulerFactory, @@ -43,6 +42,7 @@ import { } from '@backstage/backend-plugin-api'; import { mockConfigFactory } from '../implementations/mockConfigService'; +import { mockRootLoggerService } from '../implementations/mockRootLoggerService'; import { mockTokenManagerFactory } from '../implementations/mockTokenManagerService'; import { ConfigReader } from '@backstage/config'; import express from 'express'; @@ -89,10 +89,10 @@ const defaultServiceFactories = [ lifecycleFactory(), loggerFactory(), mockConfigFactory(), + mockRootLoggerService(), mockTokenManagerFactory(), permissionsFactory(), rootLifecycleFactory(), - rootLoggerFactory(), schedulerFactory(), urlReaderFactory(), ];