fix(backend): Use regex to parse version

Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
This commit is contained in:
Tilman Vatteroth 2023-02-04 14:58:02 +01:00
parent 69a7a1ae69
commit 7b2d541cac
2 changed files with 112 additions and 40 deletions

View file

@ -5,23 +5,80 @@
*/
import { promises as fs } from 'fs';
import { getServerVersionFromPackageJson } from './serverVersion';
import {
clearCachedVersion,
getServerVersionFromPackageJson,
} from './serverVersion';
it('getServerVersionFromPackageJson works', async () => {
const major = 2;
const minor = 0;
const patch = 0;
const preRelease = 'dev';
/* eslint-disable @typescript-eslint/require-await*/
jest.spyOn(fs, 'readFile').mockImplementationOnce(async (_) => {
return `{
"version": "${major}.${minor}.${patch}"
}
`;
jest.mock('fs', () => ({
promises: {
readFile: jest.fn(),
},
}));
describe('getServerVersionFromPackageJson', () => {
afterEach(() => {
clearCachedVersion();
});
it('parses a complete version string', async () => {
const major = 2;
const minor = 0;
const patch = 0;
const preRelease = 'dev';
jest
.spyOn(fs, 'readFile')
.mockImplementationOnce(
async (_) =>
`{ "version": "${major}.${minor}.${patch}-${preRelease}" }`,
);
const serverVersion = await getServerVersionFromPackageJson();
expect(serverVersion.major).toEqual(major);
expect(serverVersion.minor).toEqual(minor);
expect(serverVersion.patch).toEqual(patch);
expect(serverVersion.preRelease).toEqual(preRelease);
});
it('parses a version string without pre release', async () => {
const major = 2;
const minor = 0;
const patch = 0;
jest
.spyOn(fs, 'readFile')
.mockImplementationOnce(
async (_) => `{ "version": "${major}.${minor}.${patch}" }`,
);
const serverVersion = await getServerVersionFromPackageJson();
expect(serverVersion.major).toEqual(major);
expect(serverVersion.minor).toEqual(minor);
expect(serverVersion.patch).toEqual(patch);
expect(serverVersion.preRelease).toEqual(undefined);
});
it("throws an error if package.json can't be found", async () => {
jest.spyOn(fs, 'readFile').mockImplementationOnce(async (_) => {
throw new Error('package.json not found');
});
await expect(getServerVersionFromPackageJson()).rejects.toThrow(
'package.json not found',
);
});
it("throws an error if version isn't present in package.json", async () => {
jest.spyOn(fs, 'readFile').mockImplementationOnce(async (_) => `{ }`);
await expect(getServerVersionFromPackageJson()).rejects.toThrow(
'No version found in root package.json',
);
});
it('throws an error if the version is malformed', async () => {
jest
.spyOn(fs, 'readFile')
.mockImplementationOnce(
async (_) => `{ "version": "TwoDotZeroDotZero" }`,
);
await expect(getServerVersionFromPackageJson()).rejects.toThrow(
'Version from package.json is malformed. Got TwoDotZeroDotZero',
);
});
const serverVersion = await getServerVersionFromPackageJson();
expect(serverVersion.major).toEqual(major);
expect(serverVersion.minor).toEqual(minor);
expect(serverVersion.patch).toEqual(patch);
expect(serverVersion.preRelease).toEqual(preRelease);
});