chore: use strings for severities instead of numbers

Signed-off-by: Marek Libra <marek.libra@gmail.com>
This commit is contained in:
Marek Libra
2024-03-13 14:09:42 +01:00
parent dff7a7e9e2
commit 883dfde5bf
12 changed files with 33 additions and 60 deletions
@@ -14,10 +14,7 @@
* limitations under the License.
*/
import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils';
import {
DatabaseNotificationsStore,
getNumericSeverity,
} from './DatabaseNotificationsStore';
import { DatabaseNotificationsStore } from './DatabaseNotificationsStore';
import { Knex } from 'knex';
import {
Notification,
@@ -300,7 +297,7 @@ describe.each(databases.eachSupportedId())(
it('normal', async () => {
const normal = await storage.getNotifications({
user,
minimalSeverity: getNumericSeverity('normal'),
minimumSeverity: 'normal',
});
expect(normal.map(idOnly)).toEqual([id1, id2, id3, id4]);
});
@@ -308,7 +305,7 @@ describe.each(databases.eachSupportedId())(
it('critical', async () => {
const critical = await storage.getNotifications({
user,
minimalSeverity: getNumericSeverity('critical'),
minimumSeverity: 'critical',
});
expect(critical.length).toBe(1);
expect(critical.at(0)?.id).toEqual(id3);
@@ -317,7 +314,7 @@ describe.each(databases.eachSupportedId())(
it('high', async () => {
const high = await storage.getNotifications({
user,
minimalSeverity: getNumericSeverity('high'),
minimumSeverity: 'high',
});
expect(high.map(idOnly)).toEqual([id3, id4]);
});
@@ -325,7 +322,7 @@ describe.each(databases.eachSupportedId())(
it('low', async () => {
const low = await storage.getNotifications({
user,
minimalSeverity: getNumericSeverity('low'),
minimumSeverity: 'low',
});
expect(low.map(idOnly)).toEqual([id1, id2, id3, id4, id5]);
});
@@ -39,9 +39,13 @@ const severities: NotificationSeverity[] = [
'normal',
'low',
];
export const getNumericSeverity = (severity: string): Number => {
const idx = severities.indexOf(severity as NotificationSeverity);
return idx >= 0 ? idx : 2 /* normal */;
export const normalizeSeverity = (input?: string): NotificationSeverity => {
let lower = (input ?? 'normal').toLowerCase() as NotificationSeverity;
if (severities.indexOf(lower) < 0) {
lower = 'normal';
}
return lower;
};
/** @internal */
@@ -84,7 +88,7 @@ export class DatabaseNotificationsStore implements NotificationsStore {
description: row.description,
link: row.link,
topic: row.topic,
severity: severities[row.severity],
severity: row.severity,
scope: row.scope,
icon: row.icon,
},
@@ -101,7 +105,7 @@ export class DatabaseNotificationsStore implements NotificationsStore {
link: notification.payload?.link,
title: notification.payload?.title,
description: notification.payload?.description,
severity: getNumericSeverity(notification.payload?.severity ?? 'normal'),
severity: normalizeSeverity(notification.payload?.severity),
scope: notification.payload?.scope,
saved: notification.saved,
read: notification.read,
@@ -169,8 +173,10 @@ export class DatabaseNotificationsStore implements NotificationsStore {
query.whereNull('notification.saved');
} // or match both if undefined
if (options.minimalSeverity !== undefined) {
query.where('notification.severity', '<=', options.minimalSeverity);
if (options.minimumSeverity !== undefined) {
const idx = severities.indexOf(options.minimumSeverity);
const equalOrHigher = severities.slice(0, idx + 1);
query.whereIn('notification.severity', equalOrHigher);
}
return query;
@@ -260,7 +266,7 @@ export class DatabaseNotificationsStore implements NotificationsStore {
link: notification.payload.link,
topic: notification.payload.topic,
updated: new Date(),
severity: getNumericSeverity(notification.payload?.severity ?? 'normal'),
severity: normalizeSeverity(notification.payload?.severity),
read: null,
});
@@ -16,6 +16,7 @@
import {
Notification,
NotificationSeverity,
NotificationStatus,
} from '@backstage/plugin-notifications-common';
@@ -32,7 +33,7 @@ export type NotificationGetOptions = {
read?: boolean;
saved?: boolean;
createdAfter?: Date;
minimalSeverity?: Number;
minimumSeverity?: NotificationSeverity;
};
/** @internal */
@@ -18,7 +18,7 @@ import express, { Request } from 'express';
import Router from 'express-promise-router';
import {
DatabaseNotificationsStore,
getNumericSeverity,
normalizeSeverity,
NotificationGetOptions,
} from '../database';
import { v4 as uuid } from 'uuid';
@@ -239,7 +239,7 @@ export async function createRouter(
opts.createdAfter = new Date(sinceEpoch);
}
if (req.query.minimal_severity) {
opts.minimalSeverity = getNumericSeverity(
opts.minimumSeverity = normalizeSeverity(
req.query.minimal_severity.toString(),
);
}