0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-11 02:12:21 -05:00

Added handling for PUT members endpoint (#11194)

no issue

- Adds the ability to edit `name` field for a specific member by using `PUT /members/:id` endpoint
This commit is contained in:
Naz Gargol 2019-10-03 13:38:22 +02:00 committed by GitHub
parent d4f71ade11
commit 30326cbd2d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 124 additions and 10 deletions

View file

@ -68,6 +68,26 @@ const members = {
}
},
edit: {
statusCode: 200,
headers: {},
options: [
'id'
],
validation: {
options: {
id: {
required: true
}
}
},
permissions: true,
async query(frame) {
const member = await membersService.api.members.update(frame.data.members[0], frame.options);
return member;
}
},
destroy: {
statusCode: 204,
headers: {},

View file

@ -16,6 +16,14 @@ module.exports = {
};
},
edit(data, apiConfig, frame) {
debug('edit');
frame.response = {
members: [data]
};
},
read(data, apiConfig, frame) {
debug('read');

View file

@ -5,5 +5,11 @@ module.exports = {
const schema = require('./schemas/members-add');
const definitions = require('./schemas/members');
return jsonSchema.validate(schema, definitions, frame.data);
},
edit(apiConfig, frame) {
const schema = require('./schemas/members-edit');
const definitions = require('./schemas/members');
return jsonSchema.validate(schema, definitions, frame.data);
}
};

View file

@ -0,0 +1,21 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "members.edit",
"title": "members.edit",
"description": "Schema for members.edit",
"type": "object",
"additionalProperties": false,
"properties": {
"members": {
"type": "array",
"minItems": 1,
"maxItems": 1,
"items": {
"type": "object",
"allOf": [{"$ref": "members#/definitions/member"}]
}
}
},
"required": ["members"]
}

View file

@ -68,6 +68,26 @@ const members = {
}
},
edit: {
statusCode: 200,
headers: {},
options: [
'id'
],
validation: {
options: {
id: {
required: true
}
}
},
permissions: true,
async query(frame) {
const member = await membersService.api.members.update(frame.data.members[0], frame.options);
return member;
}
},
destroy: {
statusCode: 204,
headers: {},

View file

@ -16,6 +16,14 @@ module.exports = {
};
},
edit(data, apiConfig, frame) {
debug('edit');
frame.response = {
members: [data]
};
},
read(data, apiConfig, frame) {
debug('read');

View file

@ -5,5 +5,11 @@ module.exports = {
const schema = require('./schemas/members-add');
const definitions = require('./schemas/members');
return jsonSchema.validate(schema, definitions, frame.data);
},
edit(apiConfig, frame) {
const schema = require('./schemas/members-edit');
const definitions = require('./schemas/members');
return jsonSchema.validate(schema, definitions, frame.data);
}
};

View file

@ -0,0 +1,21 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "members.edit",
"title": "members.edit",
"description": "Schema for members.edit",
"type": "object",
"additionalProperties": false,
"properties": {
"members": {
"type": "array",
"minItems": 1,
"maxItems": 1,
"items": {
"type": "object",
"allOf": [{"$ref": "members#/definitions/member"}]
}
}
},
"required": ["members"]
}

View file

@ -105,6 +105,7 @@ module.exports = function apiRoutes() {
router.get('/members', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.browse));
router.post('/members', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.add));
router.get('/members/:id', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.read));
router.put('/members/:id', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.edit));
router.del('/members/:id', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.destroy));
// ## Roles

View file

@ -105,6 +105,7 @@ module.exports = function apiRoutes() {
router.get('/members', shared.middlewares.labs.members, mw.authAdminApi, http(apiv2.members.browse));
router.post('/members', shared.middlewares.labs.members, mw.authAdminApi, http(apiv2.members.add));
router.get('/members/:id', shared.middlewares.labs.members, mw.authAdminApi, http(apiv2.members.read));
router.put('/members/:id', shared.middlewares.labs.members, mw.authAdminApi, http(apiv2.members.edit));
router.del('/members/:id', shared.middlewares.labs.members, mw.authAdminApi, http(apiv2.members.destroy));
// ## Roles

View file

@ -114,15 +114,15 @@ describe('Members API', function () {
.expect(422);
});
it.skip('Can edit by id', function () {
it('Can edit by id', function () {
const memberToChange = {
name: 'changed',
email: 'member1Changed@test.com'
name: 'change me',
email: 'member2Change@test.com'
};
const memberChanged = {
name: 'changed',
email: 'member1Changed@test.com'
email: 'cantChangeMe@test.com'
};
return request
@ -159,7 +159,8 @@ describe('Members API', function () {
jsonResponse.members.should.have.length(1);
localUtils.API.checkResponse(jsonResponse.members[0], 'member');
jsonResponse.members[0].name.should.equal(memberChanged.name);
jsonResponse.members[0].email.should.equal(memberChanged.email);
jsonResponse.members[0].email.should.not.equal(memberChanged.email);
jsonResponse.members[0].email.should.equal(memberToChange.email);
});
});
});

View file

@ -114,15 +114,15 @@ describe('Members API', function () {
.expect(422);
});
it.skip('Can edit by id', function () {
it('Can edit by id', function () {
const memberToChange = {
name: 'changed',
email: 'member1Changed@test.com'
name: 'change me',
email: 'member2Change@test.com'
};
const memberChanged = {
name: 'changed',
email: 'member1Changed@test.com'
email: 'cantChangeMe@test.com'
};
return request
@ -159,7 +159,8 @@ describe('Members API', function () {
jsonResponse.members.should.have.length(1);
localUtils.API.checkResponse(jsonResponse.members[0], 'member');
jsonResponse.members[0].name.should.equal(memberChanged.name);
jsonResponse.members[0].email.should.equal(memberChanged.email);
jsonResponse.members[0].email.should.not.equal(memberChanged.email);
jsonResponse.members[0].email.should.equal(memberToChange.email);
});
});
});