diff --git a/ui/src/dialogs/AboutDialog.js b/ui/src/dialogs/AboutDialog.js index 75f15f8a..b9ef178a 100644 --- a/ui/src/dialogs/AboutDialog.js +++ b/ui/src/dialogs/AboutDialog.js @@ -25,6 +25,29 @@ const links = { featureRequests: 'github.com/navidrome/navidrome/issues', } +const LinkToVersion = ({ version }) => { + if (version === 'dev') { + return {version} + } + + const parts = version.split(' ') + const commitID = parts[1].replace(/[()]/g, '') + const isSnapshot = version.includes('SNAPSHOT') + const url = isSnapshot + ? `https://github.com/navidrome/navidrome/compare/v${ + parts[0].split('-')[0] + }...${commitID}` + : `https://github.com/navidrome/navidrome/releases/tag/v${parts[0]}` + return ( + + + {parts[0]} + + {' (' + commitID + ')'} + + ) +} + const AboutDialog = ({ open, onClose }) => { const translate = useTranslate() return ( @@ -45,22 +68,7 @@ const AboutDialog = ({ open, onClose }) => { {translate('menu.version')}: - {config.version === 'dev' ? ( - {config.version} - ) : ( - - - {config.version.split(' ')[0]} - - {' ' + config.version.split(' ')[1]} - - )} + {Object.keys(links).map((key) => { return ( @@ -118,4 +126,4 @@ AboutDialog.propTypes = { onClose: PropTypes.func.isRequired, } -export { AboutDialog } +export { AboutDialog, LinkToVersion } diff --git a/ui/src/dialogs/AboutDialog.test.js b/ui/src/dialogs/AboutDialog.test.js new file mode 100644 index 00000000..e3f8d3a8 --- /dev/null +++ b/ui/src/dialogs/AboutDialog.test.js @@ -0,0 +1,54 @@ +import * as React from 'react' +import { cleanup, render } from '@testing-library/react' +import { LinkToVersion } from './AboutDialog' +import TableBody from '@material-ui/core/TableBody' +import TableRow from '@material-ui/core/TableRow' +import Table from '@material-ui/core/Table' + +const Wrapper = ({ version }) => ( + + + + + + +
+) + +describe('', () => { + afterEach(cleanup) + + it('should not render any link for "dev" version', () => { + const version = 'dev' + const { queryByRole } = render() + expect(queryByRole('link')).toBeNull() + }) + + it('should render link to GH tag page for full releases', () => { + const version = '0.40.0 (300a0292)' + const { queryByRole } = render() + + const link = queryByRole('link') + expect(link.href).toBe( + 'https://github.com/navidrome/navidrome/releases/tag/v0.40.0' + ) + expect(link.textContent).toBe('0.40.0') + + const cell = queryByRole('cell') + expect(cell.textContent).toBe('0.40.0 (300a0292)') + }) + + it('should render link to GH comparison page for snapshot releases', () => { + const version = '0.40.0-SNAPSHOT (300a0292)' + const { queryByRole } = render() + + const link = queryByRole('link') + expect(link.href).toBe( + 'https://github.com/navidrome/navidrome/compare/v0.40.0...300a0292' + ) + expect(link.textContent).toBe('0.40.0-SNAPSHOT') + + const cell = queryByRole('cell') + expect(cell.textContent).toBe('0.40.0-SNAPSHOT (300a0292)') + }) +})