Skip to content
This repository was archived by the owner on Jun 27, 2019. It is now read-only.

Commit 1ca5e0a

Browse files
added settings service
1 parent a19490b commit 1ca5e0a

File tree

5 files changed

+171
-0
lines changed

5 files changed

+171
-0
lines changed

server/models/settings.model.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// settings-model.js - A mongoose model
2+
//
3+
// See http://mongoosejs.com/docs/models.html
4+
// for more of what you can do here.
5+
module.exports = function (app) {
6+
const mongooseClient = app.get('mongooseClient');
7+
const { Schema } = mongooseClient;
8+
9+
const settings = new Schema({
10+
key: {type: String, default: 'system', index: true, unique: true},
11+
invites: {
12+
userCanInvite: { type: Boolean, required: true, default: false },
13+
maxInvitesByUser: { type: Number, required: true, default: 1 }
14+
},
15+
maintenance: false
16+
}, {
17+
timestamps: true
18+
});
19+
20+
return mongooseClient.model('settings', settings);
21+
};

server/services/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const search = require('./search/search.service.js');
2121
const usersettings = require('./usersettings/usersettings.service.js');
2222
const pages = require('./pages/pages.service.js');
2323
const systemNotifications = require('./system-notifications/system-notifications.service.js');
24+
const settings = require('./settings/settings.service.js');
2425

2526
module.exports = function () {
2627
const app = this; // eslint-disable-line no-unused-vars
@@ -47,4 +48,5 @@ module.exports = function () {
4748
app.configure(usersettings);
4849
app.configure(pages);
4950
app.configure(systemNotifications);
51+
app.configure(settings);
5052
};
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
const { authenticate } = require('@feathersjs/authentication').hooks;
2+
const isAdmin = require('../../hooks/is-admin');
3+
const mapCreateToUpsert = require('../../hooks/map-create-to-upsert');
4+
5+
module.exports = {
6+
before: {
7+
all: [],
8+
find: [],
9+
get: [],
10+
create: [
11+
isAdmin(),
12+
mapCreateToUpsert(context => {
13+
const { data } = context;
14+
return { key: data.key || 'system' };
15+
})
16+
],
17+
update: [
18+
isAdmin()
19+
],
20+
patch: [
21+
isAdmin()
22+
],
23+
remove: [
24+
isAdmin()
25+
]
26+
},
27+
28+
after: {
29+
all: [],
30+
find: [],
31+
get: [],
32+
create: [],
33+
update: [],
34+
patch: [],
35+
remove: []
36+
},
37+
38+
error: {
39+
all: [],
40+
find: [],
41+
get: [],
42+
create: [],
43+
update: [],
44+
patch: [],
45+
remove: []
46+
}
47+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Initializes the `settings` service on path `/settings`
2+
const createService = require('feathers-mongoose');
3+
const createModel = require('../../models/settings.model');
4+
const hooks = require('./settings.hooks');
5+
6+
module.exports = function (app) {
7+
const Model = createModel(app);
8+
9+
const options = {
10+
Model
11+
};
12+
13+
// Initialize our service with any options it requires
14+
app.use('/settings', createService(options));
15+
16+
// Get our initialized service so that we can register hooks
17+
const service = app.service('settings');
18+
19+
service.hooks(hooks);
20+
};

test/services/settings.test.js

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
const assert = require('assert');
2+
const app = require('../../server/app');
3+
const { userData, adminData } = require('../assets/users');
4+
const { merge } = require('lodash');
5+
const userService = app.service('users');
6+
7+
describe('"settings" service', () => {
8+
const service = app.service('settings');
9+
let res;
10+
let user;
11+
let adminUser;
12+
let params;
13+
let adminParams;
14+
let settingRes;
15+
16+
const settingsObject = {
17+
invites: {
18+
userCanInvite: true,
19+
maxInvitesByUser: 3
20+
},
21+
maintenance: false
22+
};
23+
24+
before(async () => {
25+
await app.get('mongooseClient').connection.dropDatabase();
26+
27+
user = await userService.create(userData);
28+
params = {
29+
user: user
30+
};
31+
32+
adminUser = await userService.create(adminData);
33+
adminParams = {
34+
user: adminUser
35+
};
36+
});
37+
38+
it('registered the service', () => {
39+
assert.ok(service, 'Registered the service');
40+
});
41+
42+
it('fails to create settings for non admin users', async () => {
43+
let error;
44+
try {
45+
res = await service.create(settingsObject, params);
46+
} catch (err) {
47+
error = err;
48+
}
49+
assert.ok(error, 'error is thrown for non admins');
50+
assert.strictEqual(error.name, 'Forbidden');
51+
assert.strictEqual(error.message, 'You don\'t have admin rights.');
52+
});
53+
54+
it('create settings', async () => {
55+
res = await service.create(settingsObject, adminParams);
56+
settingRes = res.pop();
57+
58+
assert.ok(settingRes, 'settingRes object is here');
59+
assert.strictEqual(settingRes.invites.userCanInvite, settingsObject.invites.userCanInvite, 'invites.userCanInvite was set');
60+
assert.strictEqual(settingRes.invites.maxInvitesByUser, settingsObject.invites.maxInvitesByUser, 'invites.maxInvitesByUser was set');
61+
assert.strictEqual(settingRes.maintenance, settingsObject.maintenance, 'maintenance was set');
62+
});
63+
64+
it('update settings', async () => {
65+
res = await service.create(settingsObject, adminParams);
66+
settingRes = res.pop();
67+
68+
const updatedData = merge(settingRes, {
69+
invites: {
70+
userCanInvite: false
71+
}
72+
});
73+
74+
res = await service.patch(settingRes._id, updatedData, adminParams);
75+
76+
assert.ok(res, 'res object is here');
77+
assert.strictEqual(res.invites.userCanInvite, false, 'invites.userCanInvite was set');
78+
assert.strictEqual(res.invites.maxInvitesByUser, settingsObject.invites.maxInvitesByUser, 'invites.maxInvitesByUser was not changed');
79+
assert.strictEqual(res.maintenance, settingsObject.maintenance, 'maintenance was not changed');
80+
});
81+
});

0 commit comments

Comments
 (0)