Skip to content

Commit 032de84

Browse files
committed
Introducing chat feature in request
1 parent 5ffa0cf commit 032de84

7 files changed

Lines changed: 118 additions & 3 deletions

File tree

js/appTemplates/CollectorRequest.d.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ export declare class CollectorRequest {
5858
get appCustomData(): any;
5959
get permissions(): PermissionItem[];
6060
get permissionsExtra(): PermissionItemLight[];
61+
get features(): {
62+
chat?: {
63+
type: "usernames" | "user";
64+
};
65+
};
6166
get sections(): Array<CollectorRequestSection>;
6267
get sectionsData(): any[];
6368
createSection(key: string, type: RequestSectionType): CollectorRequestSection;
@@ -81,6 +86,9 @@ export declare class CollectorRequest {
8186
* Rebuild permissions based on sections itemKeys and staticPermissions
8287
*/
8388
buildPermissions(): void;
89+
addChatFeature(settings?: {
90+
type: 'usernames' | 'user';
91+
}): void;
8492
/**
8593
* Return Content to comply with initial implementation as an object
8694
*/
@@ -92,6 +100,11 @@ export declare class CollectorRequest {
92100
requester: {
93101
name: string;
94102
};
103+
features: {
104+
chat?: {
105+
type: "usernames" | "user";
106+
};
107+
};
95108
permissionsExtra: PermissionItemLight[];
96109
permissions: PermissionItem[];
97110
app: {

js/appTemplates/CollectorRequest.d.ts.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/appTemplates/CollectorRequest.js

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/appTemplates/CollectorRequest.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/apptemplates.test.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ describe('[APTX] appTemplates', function () {
147147
consent: {
148148
en: 'This is a consent message'
149149
},
150+
features: { },
150151
permissionsExtra: [],
151152
permissions: [
152153
{ streamId: 'profile-name', defaultName: 'Name', level: 'read' },
@@ -379,6 +380,7 @@ describe('[APTX] appTemplates', function () {
379380
consent: {
380381
en: 'This is a consent message'
381382
},
383+
features: { },
382384
permissions: [
383385
{ streamId: 'profile-name', defaultName: 'Name', level: 'read' },
384386
{
@@ -421,6 +423,7 @@ describe('[APTX] appTemplates', function () {
421423
consent: {
422424
en: 'This is a consent message'
423425
},
426+
features: { },
424427
permissionsExtra: [],
425428
permissions: [
426429
{ streamId: 'profile-name', defaultName: 'Name', level: 'read' },
@@ -456,7 +459,8 @@ describe('[APTX] appTemplates', function () {
456459
});
457460

458461
describe('[APEX] Errors ', () => {
459-
it('[APEH] Collector.client handleIncoming Request Errors', async () => {
462+
it('[APEH] Collector.client handleIncoming Request Errors', async function () {
463+
this.timeout(20000);
460464
const new0 = await helperNewAppAndUsers('dummy', 'dummyApp', 'dummyC', 'dummyCApp');
461465
const inv0 = await helperNewInvite(new0.appManaging, new0.appClient, 'APEH');
462466

tests/apptemplatesRequest.test.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ const { helperNewAppManaging } = require('./test-utils/helpersAppTemplate');
55
const { assert } = require('./test-utils/deps-node');
66

77
describe('[APRX] appTemplates Requests', function () {
8+
this.timeout(8000);
9+
810
before(async () => {
911
await initHDSModel();
1012
});
@@ -50,6 +52,7 @@ describe('[APRX] appTemplates Requests', function () {
5052
consent: { en: 'Short Consent' },
5153
description: { en: 'Short Description' },
5254
requester: { name: 'Username APRC' },
55+
features: {},
5356
permissionsExtra: [
5457
{ streamId: 'profile', defaultName: 'Profile', level: 'read' },
5558
{
@@ -97,4 +100,56 @@ describe('[APRX] appTemplates Requests', function () {
97100
};
98101
assert.deepEqual(requestContent, expectedContent);
99102
});
103+
104+
it('[APRD] A request with chat', async () => {
105+
const baseStreamId = 'aprd';
106+
const { appManaging } = await helperNewAppManaging(baseStreamId, 'test-APRD');
107+
const newCollector = await appManaging.createCollector('Invite test APRD');
108+
109+
const request = newCollector.request;
110+
request.appId = 'dr-form';
111+
request.appUrl = 'https://xxx.yyy';
112+
request.title = { en: 'My title' };
113+
request.requesterName = 'Username APRD';
114+
request.description = { en: 'Short Description' };
115+
request.consent = { en: 'Short Consent' };
116+
request.addPermissionExtra({ streamId: 'profile' });
117+
request.addChatFeature();
118+
119+
const sectionA = request.createSection('profile', 'permanent');
120+
sectionA.setNameLocal('en', 'A');
121+
sectionA.addItemKeys([
122+
'profile-name',
123+
'profile-surname'
124+
]);
125+
126+
// build permissions needed
127+
request.buildPermissions();
128+
129+
const requestContent = request.content;
130+
131+
assert.ok(requestContent.id.startsWith(baseStreamId), 'id should start with the basetreamid of the manager');
132+
133+
const expectedContent = {
134+
version: 1,
135+
title: { en: 'My title' },
136+
consent: { en: 'Short Consent' },
137+
description: { en: 'Short Description' },
138+
requester: { name: 'Username APRD' },
139+
features: { chat: { type: 'user' } },
140+
permissionsExtra: [{ streamId: 'profile', defaultName: 'Profile', level: 'read' }],
141+
permissions: [{ streamId: 'profile', defaultName: 'Profile', level: 'read' }],
142+
app: { id: 'dr-form', url: 'https://xxx.yyy', data: {} },
143+
sections: [
144+
{
145+
key: 'profile',
146+
type: 'permanent',
147+
name: { en: 'A' },
148+
itemKeys: ['profile-name', 'profile-surname']
149+
}
150+
],
151+
id: requestContent.id
152+
};
153+
assert.deepEqual(requestContent, expectedContent);
154+
});
100155
});

ts/appTemplates/CollectorRequest.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export class CollectorRequest {
3131
#permissionsExtra: Array<PermissionItemLight>;
3232
#permissions: Array<PermissionItem>;
3333
#sections: Array<CollectorRequestSection>;
34+
#features: { chat?: { type: 'usernames' | 'user' } };
3435

3536
#extraContent: any;
3637
constructor (content: any) {
@@ -40,6 +41,7 @@ export class CollectorRequest {
4041
this.#permissions = [];
4142
this.#permissionsExtra = [];
4243
this.#sections = [];
44+
this.#features = {};
4345
this.setContent(content);
4446
}
4547

@@ -135,6 +137,17 @@ export class CollectorRequest {
135137
});
136138
delete futureContent.permissionsExtra;
137139
}
140+
// -- features
141+
if (futureContent.features) {
142+
if (futureContent.features.chat) {
143+
this.addChatFeature(futureContent.features.chat);
144+
delete futureContent.features.chat;
145+
}
146+
if (Object.keys(futureContent.features).length > 0) {
147+
throw new HDSLibError('Found unkown features', futureContent.features);
148+
}
149+
delete futureContent.features;
150+
}
138151

139152
this.#extraContent = futureContent;
140153
}
@@ -167,6 +180,8 @@ export class CollectorRequest {
167180
get permissions () { return this.#permissions; }
168181
get permissionsExtra () { return this.#permissionsExtra; }
169182

183+
get features () { return this.#features; }
184+
170185
// --- section --- //
171186

172187
get sections (): Array<CollectorRequestSection> {
@@ -237,6 +252,12 @@ export class CollectorRequest {
237252
this.addPermissions(permissions);
238253
}
239254

255+
// ---------- features ------------- //
256+
addChatFeature (settings: {type: 'usernames' | 'user'} = { type: 'user' }) {
257+
if (!['user', 'usernames'].includes(settings.type)) throw new HDSLibError('Invalid chat type', settings);
258+
this.#features.chat = settings;
259+
}
260+
240261
// ---------- sections ------------- //
241262

242263
/**
@@ -251,6 +272,7 @@ export class CollectorRequest {
251272
requester: {
252273
name: this.requesterName
253274
},
275+
features: this.features,
254276
permissionsExtra: this.permissionsExtra,
255277
permissions: this.permissions,
256278
app: {

0 commit comments

Comments
 (0)