Skip to content

Commit ca00667

Browse files
committed
Adding "noDefaultName" on auth building
1 parent a03f99a commit ca00667

2 files changed

Lines changed: 69 additions & 10 deletions

File tree

src/HDSModel.js

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -159,31 +159,37 @@ class HDSModel {
159159
* @param {Array<itemKeys>} itemKeys
160160
* @param {Object} [options]
161161
* @param {string} [options.defaultLevel] (default = write) one of 'read', 'write', 'contribute', 'writeOnly'
162+
* @param {boolean} [options.includeDefaultName] (default = true) defaultNames are needed for permission requests but not for access creation
162163
* @param {Array<AuthorizationRequestItem>} [options.preRequest]
163164
* @return {Array<AuthorizationRequestItem>}
164165
*/
165166
authorizationForItemKeys (itemKeys, options = {}) {
166167
const opts = {
167168
defaultLevel: 'read',
168-
preRequest: []
169+
preRequest: [],
170+
includeDefaultName: true
169171
};
170172
Object.assign(opts, options);
171173
const streamsRequested = {};
172174
for (const pre of opts.preRequest) {
173175
if (!pre.streamId) throw new Error(`Missing streamId in options.preRequest item: ${JSON.stringify(pre)}`);
174176
// complete pre with defaultName if missing
175-
if (!pre.defaultName) {
177+
if (opts.includeDefaultName && !pre.defaultName) {
176178
// try to get it from streams Data
177179
const stream = this.streamDataGetById(pre.streamId, false);
178180
if (stream) {
179181
pre.defaultName = stream.name;
180182
} else {
181183
throw new Error(`No "defaultName" in options.preRequest item: ${JSON.stringify(pre)} and cannot find matching streams in default list`);
182184
}
183-
// add default level
184-
if (!pre.level) {
185-
pre.level = opts.defaultLevel;
186-
}
185+
}
186+
// check there is no defaultName if not required
187+
if (!opts.includeDefaultName) {
188+
if (pre.defaultName) throw new Error(`Do not include defaultName when not included explicitely on ${JSON.stringify(pre)}`);
189+
}
190+
// add default level
191+
if (!pre.level) {
192+
pre.level = opts.defaultLevel;
187193
}
188194
streamsRequested[pre.streamId] = pre;
189195
}
@@ -192,8 +198,12 @@ class HDSModel {
192198
const itemDef = this.itemDefForKey(itemKey);
193199
const streamId = itemDef.data.streamId;
194200
if (!streamsRequested[streamId]) { // new streamId
195-
const stream = this.streamDataGetById(streamId);
196-
streamsRequested[streamId] = { streamId, defaultName: stream.name, level: opts.defaultLevel };
201+
const auth = { streamId, level: opts.defaultLevel };
202+
if (opts.includeDefaultName) {
203+
const stream = this.streamDataGetById(streamId);
204+
auth.defaultName = stream.name;
205+
}
206+
streamsRequested[streamId] = auth;
197207
} else { // existing just adapt level
198208
streamsRequested[streamId].level = mixAuthorizationLevels(streamsRequested[streamId].level, opts.defaultLevel);
199209
}

tests/hdsModel.test.js

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,56 @@ describe('[MODX] Model', () => {
247247
assert.deepEqual(authorizationSet, expected);
248248
});
249249

250-
it('[MOAE] Get authorization throw error on missing streamId', async () => {
250+
it('[MOAW] Get Authorizations from items with overrides and no defaultName', async () => {
251+
const itemKeys = [
252+
'body-vulva-mucus-inspect',
253+
'profile-name',
254+
'profile-date-of-birth',
255+
'body-vulva-mucus-stretch',
256+
'profile-surname'
257+
];
258+
const options = {
259+
preRequest: [
260+
{ streamId: 'profile' },
261+
{ streamId: 'app-test', level: 'write' }
262+
],
263+
includeDefaultName: false
264+
};
265+
const authorizationSet = model.authorizationForItemKeys(itemKeys, options);
266+
const expected = [
267+
{ streamId: 'profile', level: 'read' },
268+
{ streamId: 'app-test', level: 'write' },
269+
{
270+
streamId: 'body-vulva-mucus-inspect',
271+
level: 'read'
272+
},
273+
{
274+
streamId: 'body-vulva-mucus-stretch',
275+
level: 'read'
276+
}
277+
];
278+
assert.deepEqual(authorizationSet, expected);
279+
});
280+
281+
it('[MOAZ] Get authorization throw error on unknown streamId with no defaultName', async () => {
282+
const itemKeys = [
283+
'profile-surname'
284+
];
285+
const options = {
286+
preRequest: [
287+
{ streamId: 'dummy', defaultName: 'Dummy', level: 'read' }
288+
],
289+
includeDefaultName: false
290+
};
291+
try {
292+
model.authorizationForItemKeys(itemKeys, options);
293+
throw new Error('Should throw Error');
294+
} catch (e) {
295+
assert.equal(e.message, 'Do not include defaultName when not included explicitely on {"streamId":"dummy","defaultName":"Dummy","level":"read"}');
296+
}
297+
});
298+
299+
it('[MOAE] Throw error when defaultName is in one of of the "pre" but not desired ', async () => {
251300
const itemKeys = [
252301
'profile-surname'
253302
];
@@ -264,7 +313,7 @@ describe('[MODX] Model', () => {
264313
}
265314
});
266315

267-
it('[MOAE] Get authorization throw error on unknown streamId with no defaultName', async () => {
316+
it('[MOAR] Get authorization throw error on unknown streamId with no defaultName', async () => {
268317
const itemKeys = [
269318
'profile-surname'
270319
];

0 commit comments

Comments
 (0)