From 6989d08b193f872721697b41f774835d127f315c Mon Sep 17 00:00:00 2001 From: Naz Date: Mon, 7 Nov 2022 17:18:36 +0700 Subject: [PATCH] Fixed validation for Members API newsletters endpoint refs https://github.com/TryGhost/Toolbox/issues/465 refs https://github.com/TryGhost/SDK/blob/31546a6fd36f44eed2610025f11b9bef579c851b/packages/admin-api-schema/lib/schemas/members.json#L93-L103 - Updated Members API newsletter validation to match the subset of Admin API's members validation schema. --- ghost/core/test/e2e-frontend/members.test.js | 14 ++++++++++++++ ghost/members-api/lib/repositories/member.js | 6 ++++++ 2 files changed, 20 insertions(+) diff --git a/ghost/core/test/e2e-frontend/members.test.js b/ghost/core/test/e2e-frontend/members.test.js index 7fa3fa7fd3..a35c322e21 100644 --- a/ghost/core/test/e2e-frontend/members.test.js +++ b/ghost/core/test/e2e-frontend/members.test.js @@ -187,6 +187,8 @@ describe('Front-end members behavior', function () { getJsonResponse.newsletters.should.have.length(1); // Can update newsletter subscription + const originalNewsletters = getJsonResponse.newsletters; + const res = await request.put(`/members/api/member/newsletters?uuid=${memberUUID}`) .send({ newsletters: [] @@ -198,6 +200,18 @@ describe('Front-end members behavior', function () { jsonResponse.should.have.properties(['email', 'uuid', 'status', 'name', 'newsletters']); jsonResponse.should.not.have.property('id'); jsonResponse.newsletters.should.have.length(0); + + const resRestored = await request.put(`/members/api/member/newsletters?uuid=${memberUUID}`) + .send({ + newsletters: originalNewsletters + }) + .expect(200); + + const restoreJsonResponse = resRestored.body; + should.exist(restoreJsonResponse); + restoreJsonResponse.should.have.properties(['email', 'uuid', 'status', 'name', 'newsletters']); + restoreJsonResponse.should.not.have.property('id'); + restoreJsonResponse.newsletters.should.have.length(1); }); it('should serve theme 404 on members endpoint', async function () { diff --git a/ghost/members-api/lib/repositories/member.js b/ghost/members-api/lib/repositories/member.js index 982d3b051f..b40726354f 100644 --- a/ghost/members-api/lib/repositories/member.js +++ b/ghost/members-api/lib/repositories/member.js @@ -405,6 +405,12 @@ module.exports = class MemberRepository { 'expertise' ]); + if (data.newsletters) { + data.newsletters = data.newsletters.map(newsletter => ({ + id: newsletter.id + })); + } + // Trim whitespaces from expertise if (memberData.expertise) { memberData.expertise = memberData.expertise.trim();