import type { RenovateConfig } from '~test/util.ts'; import { partial } from '~test/util.ts'; import type { PackageFile } from '../../modules/manager/types.ts'; import { getDepWarningsDashboard, getDepWarningsOnboardingPR, getDepWarningsPR, getErrors, getWarnings, } from './errors-warnings.ts'; describe('workers/repository/errors-warnings', () => { describe('getWarnings()', () => { let config: RenovateConfig; beforeEach(() => { config = partial(); }); it('returns warning text', () => { config.warnings = [ { topic: 'foo', message: 'Failed to look up dependency', }, ]; const res = getWarnings(config); expect(res).toMatchInlineSnapshot(` " # Warnings (1) Please correct - or verify that you can safely ignore - these warnings before you merge this PR. - \`foo\`: Failed to look up dependency --- " `); }); it('getWarning returns empty string', () => { config.warnings = []; const res = getWarnings(config); expect(res).toBe(''); }); }); describe('getDepWarningsPR()', () => { it('returns 2 pr warnings text dependencyDashboard true', () => { const config: RenovateConfig = {}; const dependencyDashboard = true; const packageFiles: Record = { npm: [ { packageFile: 'package.json', deps: [ { warnings: [{ message: 'Warning 1', topic: '' }], }, {}, ], }, { packageFile: 'backend/package.json', deps: [ { warnings: [{ message: 'Warning 1', topic: '' }], }, ], }, ], dockerfile: [ { packageFile: 'Dockerfile', deps: [ { warnings: [{ message: 'Warning 2', topic: '' }], }, ], }, ], }; const res = getDepWarningsPR(packageFiles, config, dependencyDashboard); expect(res).toMatchInlineSnapshot(` " --- > ⚠️ **Warning** > > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. " `); }); it('returns 2 pr warnings text dependencyDashboard true with issue link', () => { const config: RenovateConfig = { dependencyDashboardIssue: 123 }; const dependencyDashboard = true; const packageFiles: Record = { npm: [ { packageFile: 'package.json', deps: [ { warnings: [{ message: 'Warning 1', topic: '' }], }, {}, ], }, ], }; const res = getDepWarningsPR(packageFiles, config, dependencyDashboard); expect(res).toContain( 'Check the [Dependency Dashboard](../issues/123) for more information.', ); }); it('returns 2 pr warnings text dependencyDashboard false', () => { const config: RenovateConfig = {}; const dependencyDashboard = false; const packageFiles: Record = { npm: [ { packageFile: 'package.json', deps: [ { warnings: [{ message: 'Warning 1', topic: '' }], }, {}, ], }, { packageFile: 'backend/package.json', deps: [ { warnings: [{ message: 'Warning 1', topic: '' }], }, ], }, ], dockerfile: [ { packageFile: 'Dockerfile', deps: [ { warnings: [{ message: 'Warning 2', topic: '' }], }, ], }, ], }; const res = getDepWarningsPR(packageFiles, config, dependencyDashboard); expect(res).toMatchInlineSnapshot(` " --- > ⚠️ **Warning** > > Some dependencies could not be looked up. Check the warning logs for more information. " `); }); it('PR warning returns empty string', () => { const config: RenovateConfig = {}; const packageFiles: Record = {}; const res = getDepWarningsPR(packageFiles, config); expect(res).toBe(''); }); it('suppress notifications contains dependencyLookupWarnings flag then return empty string', () => { const config: RenovateConfig = { suppressNotifications: ['dependencyLookupWarnings'], }; const packageFiles: Record = {}; const res = getDepWarningsPR(packageFiles, config); expect(res).toBe(''); }); }); describe('getDepWarningsDashboard()', () => { it('returns dependency dashboard warning text', () => { const config: RenovateConfig = {}; const packageFiles: Record = { npm: [ { packageFile: 'package.json', deps: [ { warnings: [{ message: 'dependency-1', topic: '' }], }, {}, ], }, { packageFile: 'backend/package.json', deps: [ { warnings: [{ message: 'dependency-1', topic: '' }], }, ], }, ], dockerfile: [ { packageFile: 'Dockerfile', deps: [ { warnings: [{ message: 'dependency-2', topic: '' }], }, ], }, ], }; const res = getDepWarningsDashboard(packageFiles, config); expect(res).toMatchInlineSnapshot(` " --- > ⚠️ **Warning** > > Renovate failed to look up the following dependencies: \`dependency-1\`, \`dependency-2\`. > > Files affected: \`package.json\`, \`backend/package.json\`, \`Dockerfile\` --- " `); }); it('dependency dashboard warning returns empty string', () => { const config: RenovateConfig = {}; const packageFiles: Record = {}; const res = getDepWarningsDashboard(packageFiles, config); expect(res).toBe(''); }); it('suppress notifications contains dependencyLookupWarnings flag then return empty string', () => { const config: RenovateConfig = { suppressNotifications: ['dependencyLookupWarnings'], }; const packageFiles: Record = {}; const res = getDepWarningsDashboard(packageFiles, config); expect(res).toBe(''); }); }); describe('getErrors()', () => { let config: RenovateConfig; beforeEach(() => { config = partial(); }); it('returns error text', () => { config.errors = [ { topic: 'renovate.json', message: 'Failed to parse', }, ]; const res = getErrors(config); expect(res).toMatchInlineSnapshot(` " # Errors (1) Renovate has found errors that you should fix (in this branch) before finishing this PR. - \`renovate.json\`: Failed to parse --- " `); }); it('getError returns empty string', () => { config.errors = []; const res = getErrors(config); expect(res).toBe(''); }); }); describe('getDepWarningsOnboardingPR()', () => { it('returns onboarding warning text', () => { const config: RenovateConfig = {}; const packageFiles: Record = { npm: [ { packageFile: 'package.json', deps: [ { warnings: [{ message: 'Warning 1', topic: '' }], }, {}, ], }, partial(), // for coverage { packageFile: 'backend/package.json', deps: [ { warnings: [{ message: 'Warning 1', topic: '' }], }, ], }, ], dockerfile: [ { packageFile: 'Dockerfile', deps: [ { warnings: [{ message: 'Warning 2', topic: '' }], }, ], }, // coverage partial({ packageFile: 'Dockerfile', }), ], }; const res = getDepWarningsOnboardingPR(packageFiles, config); expect(res).toMatchInlineSnapshot(` " --- > > ⚠️ **Warning** > > Please correct - or verify that you can safely ignore - these dependency lookup failures before you merge this PR. > > - \`Warning 1\` > - \`Warning 2\` > > Files affected: \`package.json\`, \`backend/package.json\`, \`Dockerfile\` " `); }); it('handle empty package files', () => { const config: RenovateConfig = {}; const packageFiles: Record = { npm: undefined as never, }; let res = getDepWarningsOnboardingPR(packageFiles, config); expect(res).toBe(''); res = getDepWarningsOnboardingPR(undefined as never, config); expect(res).toBe(''); }); it('suppress notifications contains dependencyLookupWarnings flag then return empty string', () => { const config: RenovateConfig = { suppressNotifications: ['dependencyLookupWarnings'], }; const packageFiles: Record = {}; const res = getDepWarningsOnboardingPR(packageFiles, config); expect(res).toBe(''); }); it('handles undefined', () => { const res = getDepWarningsOnboardingPR(undefined as never, {}); expect(res).toBe(''); }); }); });