test(noteConfig): test the special permissions interactions

As those interaction are quite special at times we should test them individually

Signed-off-by: Philip Molares <philip.molares@udo.edu>
This commit is contained in:
Philip Molares
2026-01-07 23:09:44 +01:00
committed by Erik Michelson
parent 8fe3821312
commit 85fccc4e15
+167 -89
View File
@@ -29,9 +29,9 @@ describe('noteConfig', () => {
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
HD_NOTE_REVISION_RETENTION_DAYS: retentionDays.toString(),
HD_NOTE_PERSIST_INTERVAL: persistInteval.toString(),
/* eslint-enable @typescript-eslint/naming-convention */
@@ -44,8 +44,12 @@ describe('noteConfig', () => {
expect(config.forbiddenAliases).toHaveLength(forbiddenAliases.length);
expect(config.forbiddenAliases).toEqual(forbiddenAliases);
expect(config.maxLength).toEqual(maxLength);
expect(config.permissions.default.everyone).toEqual(PermissionLevel.READ);
expect(config.permissions.default.loggedIn).toEqual(PermissionLevel.READ);
expect(config.permissions.default.everyone).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.default.loggedIn).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.maxGuestLevel).toEqual(guestAccess);
expect(config.revisionRetentionDays).toEqual(retentionDays);
expect(config.persistInterval).toEqual(persistInteval);
@@ -58,9 +62,9 @@ describe('noteConfig', () => {
/* eslint-disable @typescript-eslint/naming-convention */
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
/* eslint-enable @typescript-eslint/naming-convention */
},
{
@@ -70,8 +74,12 @@ describe('noteConfig', () => {
const config = noteConfig();
expect(config.forbiddenAliases).toHaveLength(0);
expect(config.maxLength).toEqual(maxLength);
expect(config.permissions.default.everyone).toEqual(PermissionLevel.READ);
expect(config.permissions.default.loggedIn).toEqual(PermissionLevel.READ);
expect(config.permissions.default.everyone).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.default.loggedIn).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.maxGuestLevel).toEqual(guestAccess);
restore();
});
@@ -83,9 +91,9 @@ describe('noteConfig', () => {
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAlias,
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
/* eslint-enable @typescript-eslint/naming-convention */
},
{
@@ -96,8 +104,12 @@ describe('noteConfig', () => {
expect(config.forbiddenAliases).toHaveLength(1);
expect(config.forbiddenAliases[0]).toEqual(forbiddenAlias);
expect(config.maxLength).toEqual(maxLength);
expect(config.permissions.default.everyone).toEqual(PermissionLevel.READ);
expect(config.permissions.default.loggedIn).toEqual(PermissionLevel.READ);
expect(config.permissions.default.everyone).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.default.loggedIn).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.maxGuestLevel).toEqual(guestAccess);
restore();
@@ -109,9 +121,9 @@ describe('noteConfig', () => {
/* eslint-disable @typescript-eslint/naming-convention */
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
/* eslint-enable @typescript-eslint/naming-convention */
},
{
@@ -122,8 +134,12 @@ describe('noteConfig', () => {
expect(config.forbiddenAliases).toHaveLength(forbiddenAliases.length);
expect(config.forbiddenAliases).toEqual(forbiddenAliases);
expect(config.maxLength).toEqual(100000);
expect(config.permissions.default.everyone).toEqual(PermissionLevel.READ);
expect(config.permissions.default.loggedIn).toEqual(PermissionLevel.READ);
expect(config.permissions.default.everyone).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.default.loggedIn).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.maxGuestLevel).toEqual(guestAccess);
restore();
@@ -135,6 +151,8 @@ describe('noteConfig', () => {
/* eslint-disable @typescript-eslint/naming-convention */
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_MAX_GUEST_LEVEL:
PermissionLevelNames[PermissionLevel.READ],
HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN:
PermissionLevelNames[PermissionLevel.READ],
/* eslint-enable @typescript-eslint/naming-convention */
@@ -150,7 +168,7 @@ describe('noteConfig', () => {
expect(config.permissions.default.everyone).toEqual(PermissionLevel.READ);
expect(config.permissions.default.loggedIn).toEqual(PermissionLevel.READ);
expect(config.permissions.maxGuestLevel).toEqual(guestAccess);
expect(config.permissions.maxGuestLevel).toEqual(PermissionLevel.READ);
restore();
});
@@ -161,7 +179,7 @@ describe('noteConfig', () => {
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
/* eslint-enable @typescript-eslint/naming-convention */
},
{
@@ -172,7 +190,9 @@ describe('noteConfig', () => {
expect(config.forbiddenAliases).toHaveLength(forbiddenAliases.length);
expect(config.forbiddenAliases).toEqual(forbiddenAliases);
expect(config.maxLength).toEqual(maxLength);
expect(config.permissions.default.everyone).toEqual(PermissionLevel.READ);
expect(config.permissions.default.everyone).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.default.loggedIn).toEqual(
PermissionLevel.WRITE,
);
@@ -188,7 +208,7 @@ describe('noteConfig', () => {
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
/* eslint-enable @typescript-eslint/naming-convention */
},
{
@@ -199,7 +219,9 @@ describe('noteConfig', () => {
expect(config.forbiddenAliases).toHaveLength(forbiddenAliases.length);
expect(config.forbiddenAliases).toEqual(forbiddenAliases);
expect(config.maxLength).toEqual(maxLength);
expect(config.permissions.default.everyone).toEqual(PermissionLevel.READ);
expect(config.permissions.default.everyone).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.default.loggedIn).toEqual(
PermissionLevel.WRITE,
);
@@ -214,9 +236,9 @@ describe('noteConfig', () => {
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
/* eslint-enable @typescript-eslint/naming-convention */
},
{
@@ -227,8 +249,12 @@ describe('noteConfig', () => {
expect(config.forbiddenAliases).toHaveLength(forbiddenAliases.length);
expect(config.forbiddenAliases).toEqual(forbiddenAliases);
expect(config.maxLength).toEqual(maxLength);
expect(config.permissions.default.everyone).toEqual(PermissionLevel.READ);
expect(config.permissions.default.loggedIn).toEqual(PermissionLevel.READ);
expect(config.permissions.default.everyone).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.default.loggedIn).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.maxGuestLevel).toEqual(guestAccess);
expect(config.revisionRetentionDays).toEqual(0);
restore();
@@ -241,9 +267,9 @@ describe('noteConfig', () => {
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN:
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.WRITE],
/* eslint-enable @typescript-eslint/naming-convention */
},
{
@@ -254,8 +280,12 @@ describe('noteConfig', () => {
expect(config.forbiddenAliases).toHaveLength(forbiddenAliases.length);
expect(config.forbiddenAliases).toEqual(forbiddenAliases);
expect(config.maxLength).toEqual(maxLength);
expect(config.permissions.default.everyone).toEqual(PermissionLevel.READ);
expect(config.permissions.default.loggedIn).toEqual(PermissionLevel.READ);
expect(config.permissions.default.everyone).toEqual(
PermissionLevel.WRITE,
);
expect(config.permissions.default.loggedIn).toEqual(
PermissionLevel.WRITE,
);
expect(config.persistInterval).toEqual(10);
restore();
});
@@ -468,76 +498,124 @@ describe('noteConfig', () => {
clear: true,
},
);
expect(() => noteConfig()).toThrow(
`'HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE' is set to '${PermissionLevelNames[PermissionLevel.READ]}', but 'HD_NOTE_PERMISSIONS_MAX_GUEST_LEVEL' is set to '${PermissionLevelNames[PermissionLevel.DENY]}'. This does not work since the default level may not be higher than the maximum guest level.`,
noteConfig();
expect(spyConsoleError.mock.calls[0][0]).toContain(
`HD_NOTE: 'HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE' is set to '${PermissionLevelNames[PermissionLevel.READ]}', but 'HD_NOTE_PERMISSIONS_MAX_GUEST_LEVEL' is set to '${PermissionLevelNames[PermissionLevel.DENY]}'. This does not work since the default level may not be higher than the maximum guest level.`,
);
expect(spyProcessExit).toHaveBeenCalledWith(1);
restore();
});
it('when HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE is set to write, but HD_PERMISSION_DEFAULT_LOGGED_IN is set to read', async () => {
const restore = mockedEnv(
{
/* eslint-disable @typescript-eslint/naming-convention */
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE:
PermissionLevelNames[PermissionLevel.WRITE],
HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN:
PermissionLevelNames[PermissionLevel.READ],
/* eslint-enable @typescript-eslint/naming-convention */
},
{
clear: true,
describe('more complex permissions', () => {
describe.each([
[
PermissionLevelNames[PermissionLevel.WRITE],
PermissionLevelNames[PermissionLevel.READ],
],
[
PermissionLevelNames[PermissionLevel.WRITE],
PermissionLevelNames[PermissionLevel.DENY],
],
[
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.DENY],
],
])(
'check default everyone and logged-in interaction',
(everyonePermission, loggedInPermission) => {
it(`when HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE is set to ${everyonePermission}, but HD_PERMISSION_DEFAULT_LOGGED_IN is set to ${loggedInPermission}`, async () => {
const restore = mockedEnv(
{
/* eslint-disable @typescript-eslint/naming-convention */
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE: everyonePermission,
HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN: loggedInPermission,
/* eslint-enable @typescript-eslint/naming-convention */
},
{
clear: true,
},
);
noteConfig();
expect(spyConsoleError.mock.calls[0][0]).toContain(
`HD_NOTE: 'HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE' is set to '${everyonePermission}', but 'HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN' is set to '${loggedInPermission}'. This would give everyone greater permissions than logged-in users, and is not allowed since it doesn't make sense.`,
);
restore();
});
},
);
expect(() => noteConfig()).toThrow(
`'HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE' is set to '${PermissionLevelNames[PermissionLevel.WRITE]}', but 'HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN' is set to '${PermissionLevelNames[PermissionLevel.READ]}'. This would give everyone greater permissions than logged-in users, and is not allowed since it doesn't make sense.`,
);
restore();
});
it('when HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE is set to write, but HD_PERMISSION_DEFAULT_LOGGED_IN is set to none', async () => {
const restore = mockedEnv(
{
/* eslint-disable @typescript-eslint/naming-convention */
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE:
PermissionLevelNames[PermissionLevel.WRITE],
HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN:
PermissionLevelNames[PermissionLevel.DENY],
/* eslint-enable @typescript-eslint/naming-convention */
},
{
clear: true,
describe.each([
[
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.DENY],
],
])(
'check default everyone and max guest level full',
(defaultEveryone) => {
it(`when HD_NOTE_PERMISSIONS_MAX_GUEST_LEVEL is set to ${PermissionLevelNames[PermissionLevel.FULL]} and HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE is set to ${defaultEveryone}`, async () => {
const restore = mockedEnv(
{
/* eslint-disable @typescript-eslint/naming-convention */
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE: defaultEveryone,
HD_NOTE_PERMISSIONS_MAX_GUEST_LEVEL:
PermissionLevelNames[PermissionLevel.FULL],
/* eslint-enable @typescript-eslint/naming-convention */
},
{
clear: true,
},
);
noteConfig();
expect(spyConsoleError.mock.calls[0][0]).toContain(
`'HD_NOTE_PERMISSIONS_MAX_GUEST_LEVEL' is set to '${PermissionLevelNames[PermissionLevel.FULL]}', but 'HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE' is set to '${defaultEveryone}'. This does not allow the guest users to write in the notes they can create.`,
);
expect(spyProcessExit).toHaveBeenCalledWith(1);
restore();
});
},
);
expect(() => noteConfig()).toThrow(
`'HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE' is set to '${PermissionLevelNames[PermissionLevel.WRITE]}', but 'HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN' is set to '${PermissionLevelNames[PermissionLevel.DENY]}'. This would give everyone greater permissions than logged-in users, and is not allowed since it doesn't make sense.`,
);
restore();
});
it('when HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE is set to read, but HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN is set to none', async () => {
const restore = mockedEnv(
{
/* eslint-disable @typescript-eslint/naming-convention */
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE:
PermissionLevelNames[PermissionLevel.READ],
HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN:
PermissionLevelNames[PermissionLevel.DENY],
/* eslint-enable @typescript-eslint/naming-convention */
},
{
clear: true,
describe.each([
[
PermissionLevelNames[PermissionLevel.WRITE],
PermissionLevelNames[PermissionLevel.READ],
],
[
PermissionLevelNames[PermissionLevel.WRITE],
PermissionLevelNames[PermissionLevel.DENY],
],
[
PermissionLevelNames[PermissionLevel.READ],
PermissionLevelNames[PermissionLevel.DENY],
],
])(
'check default everyone and max guest level full',
(defaultEveryone, maxGuestLevel) => {
it(`when 'HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE' is set to '${defaultEveryone}', but 'HD_NOTE_PERMISSIONS_MAX_GUEST_LEVEL' is set to '${maxGuestLevel}'`, async () => {
const restore = mockedEnv(
{
/* eslint-disable @typescript-eslint/naming-convention */
HD_NOTE_FORBIDDEN_ALIASES: forbiddenAliases.join(' , '),
HD_NOTE_MAX_LENGTH: maxLength.toString(),
HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE: defaultEveryone,
HD_NOTE_PERMISSIONS_MAX_GUEST_LEVEL: maxGuestLevel,
/* eslint-enable @typescript-eslint/naming-convention */
},
{
clear: true,
},
);
noteConfig();
expect(spyConsoleError.mock.calls[0][0]).toContain(
`HD_NOTE: 'HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE' is set to '${defaultEveryone}', but 'HD_NOTE_PERMISSIONS_MAX_GUEST_LEVEL' is set to '${maxGuestLevel}'. This does not work since the default level may not be higher than the maximum guest level.`,
);
expect(spyProcessExit).toHaveBeenCalledWith(1);
restore();
});
},
);
expect(() => noteConfig()).toThrow(
`'HD_NOTE_PERMISSIONS_DEFAULT_EVERYONE' is set to '${PermissionLevelNames[PermissionLevel.READ]}', but 'HD_NOTE_PERMISSIONS_DEFAULT_LOGGED_IN' is set to '${PermissionLevelNames[PermissionLevel.DENY]}'. This would give everyone greater permissions than logged-in users, and is not allowed since it doesn't make sense.`,
);
restore();
});
it('when given a negative retention days', async () => {