hedgedoc/backend/src/utils/serverVersion.spec.ts
Tilman Vatteroth 7b2d541cac fix(backend): Use regex to parse version
Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
2023-02-05 21:21:08 +01:00

84 lines
2.5 KiB
TypeScript

/*
* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import { promises as fs } from 'fs';
import {
clearCachedVersion,
getServerVersionFromPackageJson,
} from './serverVersion';
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',
);
});
});