diff --git a/.changeset/empty-colts-whisper.md b/.changeset/empty-colts-whisper.md new file mode 100644 index 0000000000..1eabe8c58c --- /dev/null +++ b/.changeset/empty-colts-whisper.md @@ -0,0 +1,5 @@ +--- +'@backstage/config-loader': patch +--- + +No longer log when reloading remote config. diff --git a/packages/config-loader/src/loader.ts b/packages/config-loader/src/loader.ts index 9537d2d945..f5ce0eb80c 100644 --- a/packages/config-loader/src/loader.ts +++ b/packages/config-loader/src/loader.ts @@ -287,13 +287,10 @@ export async function loadConfig( let handle: NodeJS.Timeout | undefined; try { handle = setInterval(async () => { - console.info(`Checking for config update`); const newRemoteConfigs = await loadRemoteConfigFiles(); if (await hasConfigChanged(remoteConfigs, newRemoteConfigs)) { remoteConfigs = newRemoteConfigs; - console.info(`Remote config change, reloading config ...`); watchProp.onChange([...remoteConfigs, ...fileConfigs, ...envConfigs]); - console.info(`Remote config reloaded`); } }, remoteProp.reloadIntervalSeconds * 1000); } catch (error) { @@ -303,7 +300,6 @@ export async function loadConfig( if (watchProp.stopSignal) { watchProp.stopSignal.then(() => { if (handle !== undefined) { - console.info(`Stopping remote config watch`); clearInterval(handle); handle = undefined; } diff --git a/packages/core-app-api/src/routing/RoutingProvider.compat.test.tsx b/packages/core-app-api/src/routing/RoutingProvider.compat.test.tsx index 1ff80fcacc..ac54780f7c 100644 --- a/packages/core-app-api/src/routing/RoutingProvider.compat.test.tsx +++ b/packages/core-app-api/src/routing/RoutingProvider.compat.test.tsx @@ -251,7 +251,6 @@ describe.each(['beta', 'stable'])('react-router %s', rrVersion => { await new Promise(r => setTimeout(r, 500)); - rendered.debug(); await expect( rendered.findByText('Path at inside: /foo/bar'), ).resolves.toBeInTheDocument(); @@ -344,7 +343,6 @@ describe.each(['beta', 'stable'])('react-router %s', rrVersion => { await expect( rendered.findByText('Path at inside: /foo/blob/baz'), ).resolves.toBeInTheDocument(); - rendered.debug(); }); it('should throw errors for routing to other routeRefs with unsupported parameters', () => { @@ -352,6 +350,7 @@ describe.each(['beta', 'stable'])('react-router %s', rrVersion => { const root = ( + } /> }> { await expect( rendered.findByText('Path at inside: /foo/blob/baz'), ).resolves.toBeInTheDocument(); - rendered.debug(); }); it('should throw errors for routing to other routeRefs with unsupported parameters', () => { const root = ( + } /> }> ( - {props.edge.label} +
{props.edge.label}
)); const minProps = { @@ -53,8 +53,7 @@ const edgeWithLabel = { ...edge, label }; describe('', () => { beforeEach(() => { - // jsdom does not support SVG elements so we have to fall back to HTMLUnknownElement - Object.defineProperty(window.HTMLUnknownElement.prototype, 'getBBox', { + Object.defineProperty(window.SVGElement.prototype, 'getBBox', { value: () => ({ width: 100, height: 100 }), configurable: true, }); @@ -63,26 +62,40 @@ describe('', () => { afterEach(jest.clearAllMocks); it('does not render the supplied label element if label is missing', () => { - const { container } = render(); + const { container } = render( + + + , + ); expect(container.getElementsByTagName('g')).toHaveLength(0); }); it('renders the supplied label element if label is present', () => { - const { getByText } = render(); + const { getByText } = render( + + + , + ); expect(getByText(label)).toBeInTheDocument(); }); it('passes down edge properties to the render method if label is present', () => { const edgeWithRandomProp = { ...edge, label, randomProp: true }; render( - , + + + , ); expect(renderElement).toHaveBeenCalledWith({ edge: edgeWithRandomProp }); }); it('calls setEdge with edge ID and actual label size after rendering', () => { - const { getByText } = render(); + const { getByText } = render( + + + , + ); expect(getByText(label)).toBeInTheDocument(); // Updates the edge in the graph diff --git a/packages/core-components/src/components/DependencyGraph/Node.test.tsx b/packages/core-components/src/components/DependencyGraph/Node.test.tsx index aaba09c004..ea69220336 100644 --- a/packages/core-components/src/components/DependencyGraph/Node.test.tsx +++ b/packages/core-components/src/components/DependencyGraph/Node.test.tsx @@ -23,7 +23,7 @@ import { RenderNodeProps } from './types'; const node = { id: 'abc', x: 0, y: 0, width: 0, height: 0 }; const setNode = jest.fn(() => new dagre.graphlib.Graph()); const renderElement = jest.fn((props: RenderNodeProps) => ( - {props.node.id} +
{props.node.id}
)); const minProps = { @@ -34,8 +34,7 @@ const minProps = { describe('', () => { beforeEach(() => { - // jsdom does not support SVG elements so we have to fall back to HTMLUnknownElement - Object.defineProperty(window.HTMLUnknownElement.prototype, 'getBBox', { + Object.defineProperty(window.SVGElement.prototype, 'getBBox', { value: () => ({ width: 100, height: 100 }), configurable: true, }); @@ -44,19 +43,31 @@ describe('', () => { afterEach(jest.clearAllMocks); it('renders the supplied element', () => { - const { getByText } = render(); + const { getByText } = render( + + + , + ); expect(getByText(minProps.node.id)).toBeInTheDocument(); }); it('passes down node properties to the render method', () => { const nodeWithRandomProp = { ...node, randomProp: true }; - render(); + render( + + + , + ); expect(renderElement).toHaveBeenCalledWith({ node: nodeWithRandomProp }); }); it('calls setNode with node ID and actual size after rendering', () => { - const { getByText } = render(); + const { getByText } = render( + + + , + ); expect(getByText(minProps.node.id)).toBeInTheDocument(); // Updates the node in the graph diff --git a/packages/core-components/src/components/ProgressBars/GaugeCard.test.tsx b/packages/core-components/src/components/ProgressBars/GaugeCard.test.tsx index ea29a288e6..e4d84ca059 100644 --- a/packages/core-components/src/components/ProgressBars/GaugeCard.test.tsx +++ b/packages/core-components/src/components/ProgressBars/GaugeCard.test.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { renderInTestApp } from '@backstage/test-utils'; +import { renderInTestApp, withLogCollector } from '@backstage/test-utils'; import { GaugeCard } from './GaugeCard'; @@ -40,7 +40,12 @@ describe('', () => { it('handles invalid numbers', async () => { const badProps = { title: 'Tingle upgrade', progress: 'hejjo' } as any; - const { getByText } = await renderInTestApp(); - expect(getByText(/N\/A.*/)).toBeInTheDocument(); + const { error } = await withLogCollector(async () => { + const { getByText } = await renderInTestApp(); + expect(getByText(/N\/A.*/)).toBeInTheDocument(); + }); + expect(error).toEqual([ + expect.stringMatching(/^Warning: `NaN` is an invalid value/), + ]); }); }); diff --git a/packages/core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx b/packages/core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx index 2501785701..f9348ffa9a 100644 --- a/packages/core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx +++ b/packages/core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx @@ -58,6 +58,7 @@ describe('', () => { const TextualBadge = React.forwardRef((props, ref) => ( diff --git a/packages/core-components/src/layout/HomepageTimer/HomepageTimer.test.tsx b/packages/core-components/src/layout/HomepageTimer/HomepageTimer.test.tsx index 3d9dfe70a1..9a7a8ac47d 100644 --- a/packages/core-components/src/layout/HomepageTimer/HomepageTimer.test.tsx +++ b/packages/core-components/src/layout/HomepageTimer/HomepageTimer.test.tsx @@ -14,7 +14,11 @@ * limitations under the License. */ -import { renderWithEffects, TestApiProvider } from '@backstage/test-utils'; +import { + renderWithEffects, + TestApiProvider, + withLogCollector, +} from '@backstage/test-utils'; import { HomepageTimer } from './HomepageTimer'; import React from 'react'; import { lightTheme } from '@backstage/theme'; @@ -35,13 +39,18 @@ it('changes default timezone to GMT', async () => { context: 'test', }); - const rendered = await renderWithEffects( - - - - - , - ); + const { warn } = await withLogCollector(async () => { + const rendered = await renderWithEffects( + + + + + , + ); - expect(rendered.getByText('GMT')).toBeInTheDocument(); + expect(rendered.getByText('GMT')).toBeInTheDocument(); + }); + expect(warn).toEqual([ + 'The timezone America/New_Pork is invalid. Defaulting to GMT', + ]); }); diff --git a/packages/core-plugin-api/src/extensions/extensions.test.tsx b/packages/core-plugin-api/src/extensions/extensions.test.tsx index dcc92d9d47..0601c01a17 100644 --- a/packages/core-plugin-api/src/extensions/extensions.test.tsx +++ b/packages/core-plugin-api/src/extensions/extensions.test.tsx @@ -61,11 +61,19 @@ describe('extensions', () => { const Component = () =>
; const routeRef = createRouteRef({ id: 'foo' }); - const extension1 = createComponentExtension({ - component: { - sync: Component, - }, + let extension1: ReturnType; + const { warn } = withLogCollector(['warn'], () => { + extension1 = createComponentExtension({ + component: { + sync: Component, + }, + }); }); + expect(warn).toEqual([ + expect.stringMatching( + /^Declaring extensions without name is DEPRECATED. /, + ), + ]); const extension2 = createRoutableExtension({ name: 'Extension2', @@ -73,7 +81,7 @@ describe('extensions', () => { mountPoint: routeRef, }); - const ExtensionComponent1 = plugin.provide(extension1); + const ExtensionComponent1 = plugin.provide(extension1!); const ExtensionComponent2 = plugin.provide(extension2); const element1 = ; diff --git a/packages/create-app/src/lib/tasks.test.ts b/packages/create-app/src/lib/tasks.test.ts index 6a312436bf..d2efe81b90 100644 --- a/packages/create-app/src/lib/tasks.test.ts +++ b/packages/create-app/src/lib/tasks.test.ts @@ -19,6 +19,7 @@ import mockFs from 'mock-fs'; import child_process from 'child_process'; import path from 'path'; import { + Task, buildAppTask, checkAppExistsTask, checkPathExistsTask, @@ -27,6 +28,13 @@ import { templatingTask, } from './tasks'; +jest.spyOn(Task, 'log').mockReturnValue(undefined); +jest.spyOn(Task, 'error').mockReturnValue(undefined); +jest.spyOn(Task, 'section').mockReturnValue(undefined); +jest + .spyOn(Task, 'forItem') + .mockImplementation((_a, _b, taskFunc) => taskFunc()); + jest.mock('child_process'); // By mocking this the filesystem mocks won't mess with reading all of the package.jsons