Skip to content

Commit a9427d7

Browse files
authoredSep 15, 2022
feat: Delete method for user settings (#2762)
1 parent a6e9f3f commit a9427d7

File tree

4 files changed

+111
-2
lines changed

4 files changed

+111
-2
lines changed
 

‎plugins/users/README.md

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ server.register({
3535

3636
`PUT /users/{id}/settings`
3737

38+
#### Delete all user's settings
39+
40+
`DELETE /users/{id}/settings`
41+
3842
**Arguments**
3943

4044
* `settings` - An optional new object with user settings.

‎plugins/users/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
const getSettingsRoute = require('./settings/get');
44
const updateSettingsRoute = require('./settings/update');
5+
const removeSettingsRoute = require('./settings/delete');
56

67
/**
78
* Users API Plugin
@@ -11,7 +12,7 @@ const updateSettingsRoute = require('./settings/update');
1112
const usersPlugin = {
1213
name: 'users',
1314
async register(server) {
14-
server.route([getSettingsRoute(), updateSettingsRoute()]);
15+
server.route([getSettingsRoute(), updateSettingsRoute(), removeSettingsRoute()]);
1516
}
1617
};
1718

‎plugins/users/settings/delete.js

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
'use strict';
2+
3+
const boom = require('@hapi/boom');
4+
5+
module.exports = () => ({
6+
method: 'DELETE',
7+
path: '/users/settings',
8+
options: {
9+
description: 'Reset user settings',
10+
notes: 'Reset user settings',
11+
tags: ['api', 'users'],
12+
auth: {
13+
strategies: ['token'],
14+
scope: ['user', '!guest']
15+
},
16+
17+
handler: async (request, h) => {
18+
const { userFactory } = request.server.app;
19+
const { scmContext, username } = request.auth.credentials;
20+
const user = await userFactory.get({ username, scmContext });
21+
22+
if (!user) {
23+
throw boom.notFound('User does not exist');
24+
}
25+
26+
return user.removeSettings().then(results => {
27+
return h.response(results).code(200);
28+
});
29+
}
30+
}
31+
});

‎test/plugins/user.test.js

+74-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const getUserMock = user => {
1414
mock.getPermissions = sinon.stub();
1515
mock.getSettings = sinon.stub();
1616
mock.updateSettings = sinon.stub();
17+
mock.removeSettings = sinon.stub();
1718

1819
return mock;
1920
};
@@ -92,7 +93,8 @@ describe('user plugin test', () => {
9293
1: {
9394
showPRJobs: true
9495
},
95-
displayJobNameLength: 25
96+
displayJobNameLength: 25,
97+
timestampFormat: 'LOCAL_TIMEZONE'
9698
};
9799
});
98100

@@ -213,4 +215,75 @@ describe('user plugin test', () => {
213215
});
214216
});
215217
});
218+
219+
describe('DELETE /user/settings', () => {
220+
let options;
221+
222+
beforeEach(() => {
223+
options = {
224+
method: 'DELETE',
225+
url: `/users/settings`,
226+
payload: {
227+
settings: {}
228+
},
229+
auth: {
230+
credentials: {
231+
username,
232+
scmContext,
233+
scope: ['user']
234+
},
235+
strategy: ['token']
236+
}
237+
};
238+
settings = {
239+
1: {
240+
showPRJobs: true
241+
},
242+
displayJobNameLength: 20,
243+
timestampFormat: 'LOCAL_TIMEZONE'
244+
};
245+
});
246+
247+
it('exposes a route for resetting user settings', () => {
248+
userFactoryMock.get.resolves(userMock);
249+
userMock.removeSettings.resolves({});
250+
251+
return server.inject(options).then(reply => {
252+
assert.equal(reply.statusCode, 200);
253+
assert.deepEqual(reply.result, {});
254+
});
255+
});
256+
257+
it('throws error not found when user does not exist', () => {
258+
const error = {
259+
statusCode: 404,
260+
error: 'Not Found',
261+
message: 'User does not exist'
262+
};
263+
264+
userFactoryMock.get.resolves(null);
265+
266+
return server.inject(options).then(reply => {
267+
assert.equal(reply.statusCode, 404);
268+
assert.deepEqual(reply.result, error);
269+
});
270+
});
271+
272+
it('throws error when get user call returns error', () => {
273+
userFactoryMock.get.rejects(new Error('Failed'));
274+
275+
return server.inject(options).then(reply => {
276+
assert.equal(reply.statusCode, 500);
277+
});
278+
});
279+
280+
it('throws error when update user settings call returns error', () => {
281+
userFactoryMock.get.resolves(userMock);
282+
userMock.updateSettings.rejects(new Error('Failed'));
283+
284+
return server.inject(options).then(reply => {
285+
assert.equal(reply.statusCode, 500);
286+
});
287+
});
288+
});
216289
});

0 commit comments

Comments
 (0)
Please sign in to comment.