feat: Update notification object to match the updated examples

This commit is contained in:
Joachim Van Herwegen 2023-01-24 13:45:22 +01:00
parent caee563dd6
commit 7c343a5fcc
12 changed files with 26 additions and 61 deletions

View File

@ -3,7 +3,7 @@ export const CONTEXT_NOTIFICATION = 'https://www.w3.org/ns/solid/notification/v1
/**
* The minimally expected fields for a Notification
* as defined in https://solidproject.org/TR/notifications-protocol#notification-data-model.
* as defined in https://solidproject.org/TR/2022/notifications-protocol-20221231#data-model.
*/
export interface Notification {
'@context': [
@ -12,11 +12,9 @@ export interface Notification {
...string[],
];
id: string;
type: string[];
object: {
id: string;
type: string[];
};
type: string;
object: string;
state?: string;
target?: string | string[];
published: string;
}

View File

@ -1,7 +1,7 @@
import { getETag } from '../../../storage/Conditions';
import type { ResourceStore } from '../../../storage/ResourceStore';
import { NotImplementedHttpError } from '../../../util/errors/NotImplementedHttpError';
import { AS, RDF } from '../../../util/Vocabularies';
import { AS } from '../../../util/Vocabularies';
import type { Notification } from '../Notification';
import { CONTEXT_ACTIVITYSTREAMS, CONTEXT_NOTIFICATION } from '../Notification';
import type { NotificationHandlerInput } from '../NotificationHandler';
@ -37,11 +37,8 @@ export class ActivityNotificationGenerator extends NotificationGenerator {
CONTEXT_NOTIFICATION,
],
id: `urn:${Date.now()}:${topic.path}`,
type: [ activity!.value.slice(AS.namespace.length) ],
object: {
id: topic.path,
type: representation.metadata.getAll(RDF.terms.type).map((term): string => term.value),
},
type: activity!.value.slice(AS.namespace.length),
object: topic.path,
state,
published: new Date().toISOString(),
};

View File

@ -24,11 +24,8 @@ export class DeleteNotificationGenerator extends NotificationGenerator {
CONTEXT_NOTIFICATION,
],
id: `urn:${Date.now()}:${topic.path}`,
type: [ 'Delete' ],
object: {
id: topic.path,
type: [],
},
type: 'Delete',
object: topic.path,
published: new Date().toISOString(),
};
}

View File

@ -212,7 +212,7 @@ describe.each(stores)('A server supporting WebSocketSubscription2021 using %s',
});
it('removes expired subscriptions.', async(): Promise<void> => {
const { source } = await subscribe(notificationType, webId, subscriptionUrl, topic, { expiration: 1 }) as any;
const { source } = await subscribe(notificationType, webId, subscriptionUrl, topic, { endAt: 1 }) as any;
const socket = new WebSocket(source);
const messagePromise = new Promise<Buffer>((resolve): any => socket.on('message', resolve));

View File

@ -15,11 +15,8 @@ describe('A ComposedNotificationHandler', (): void => {
'https://www.w3.org/ns/solid/notification/v1',
],
id: `urn:123:http://example.com/foo`,
type: [ 'Update' ],
object: {
id: 'http://example.com/foo',
type: [],
},
type: 'Update',
object: 'http://example.com/foo',
published: '123',
state: '123',
};

View File

@ -35,11 +35,8 @@ describe('A WebHookEmitter', (): void => {
'https://www.w3.org/ns/solid/notification/v1',
],
id: `urn:123:http://example.com/foo`,
type: [ 'Update' ],
object: {
id: 'http://example.com/foo',
type: [],
},
type: 'Update',
object: 'http://example.com/foo',
published: '123',
};
let representation: Representation;

View File

@ -51,13 +51,8 @@ describe('An ActivityNotificationGenerator', (): void => {
'https://www.w3.org/ns/solid/notification/v1',
],
id: `urn:${ms}:http://example.com/foo`,
type: [ 'Update' ],
object: {
id: 'http://example.com/foo',
type: [
LDP.Resource,
],
},
type: 'Update',
object: 'http://example.com/foo',
state: expect.stringMatching(/"\d+"/u),
published: date,
});

View File

@ -36,11 +36,8 @@ describe('A DeleteNotificationGenerator', (): void => {
'https://www.w3.org/ns/solid/notification/v1',
],
id: `urn:${ms}:http://example.com/foo`,
type: [ 'Delete' ],
object: {
id: 'http://example.com/foo',
type: [],
},
type: 'Delete',
object: 'http://example.com/foo',
published: date,
});

View File

@ -23,11 +23,8 @@ describe('A StateNotificationGenerator', (): void => {
'https://www.w3.org/ns/solid/notification/v1',
],
id: `urn:123:http://example.com/foo`,
type: [ 'Update' ],
object: {
id: 'http://example.com/foo',
type: [],
},
type: 'Update',
object: 'http://example.com/foo',
published: '123',
};
let source: jest.Mocked<NotificationGenerator>;

View File

@ -16,11 +16,8 @@ describe('A ConvertingNotificationSerializer', (): void => {
'https://www.w3.org/ns/solid/notification/v1',
],
id: `urn:123:http://example.com/foo`,
type: [ 'Update' ],
object: {
id: 'http://example.com/foo',
type: [],
},
type: 'Update',
object: 'http://example.com/foo',
published: '123',
};
let representation: Representation;

View File

@ -19,11 +19,8 @@ describe('A JsonLdNotificationSerializer', (): void => {
'https://www.w3.org/ns/solid/notification/v1',
],
id: `urn:123:http://example.com/foo`,
type: [ 'Update' ],
object: {
id: 'http://example.com/foo',
type: [],
},
type: 'Update',
object: 'http://example.com/foo',
published: '123',
};

View File

@ -42,16 +42,12 @@ export function expectNotification(notification: unknown, topic: string, type: '
'https://www.w3.org/ns/solid/notification/v1',
],
id: expect.stringContaining(topic),
type: [ type ],
object: {
id: topic,
type: [],
},
type,
object: topic,
published: expect.anything(),
};
if (type !== 'Delete') {
expected.state = expect.anything();
expected.object.type.push('http://www.w3.org/ns/ldp#Resource');
}
expect(notification).toEqual(expected);
}