From 6db07ce34d7e8728f13252677ed82978828f5fad Mon Sep 17 00:00:00 2001 From: Nazar Gargol Date: Tue, 18 Feb 2020 11:34:20 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fixed=20member=20CSV=20import=20?= =?UTF-8?q?setting=20subscribed=20to=20`true`=20as=20default?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit no issue - When importing through CSV we should remain the defaults of 'subscribed' fields (`true` at the moment), unless it is explicitly set to `false` or `FALSE` (the latter uppercase value often comes from scpredsheets) --- core/server/api/canary/members.js | 10 +++- .../api/canary/admin/members_spec.js | 49 +++++++++++++++++++ .../fixtures/csv/valid-members-defaults.csv | 3 ++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 core/test/utils/fixtures/csv/valid-members-defaults.csv diff --git a/core/server/api/canary/members.js b/core/server/api/canary/members.js index ba31c6d029..8b958a2ba6 100644 --- a/core/server/api/canary/members.js +++ b/core/server/api/canary/members.js @@ -343,13 +343,21 @@ const members = { entry.labels = (entry.labels && entry.labels.split(',')) || []; const entryLabels = serializeMemberLabels(entry.labels); cleanupUndefined(entry); + + let subscribed; + if (_.isUndefined(entry.subscribed_to_emails)) { + subscribed = entry.subscribed_to_emails; + } else { + subscribed = (String(entry.subscribed_to_emails).toLowerCase() !== 'false'); + } + return Promise.resolve(api.members.add.query({ data: { members: [{ email: entry.email, name: entry.name, note: entry.note, - subscribed: (String(entry.subscribed_to_emails).toLowerCase() === 'true'), + subscribed: subscribed, stripe_customer_id: entry.stripe_customer_id, comped: (String(entry.complimentary_plan).toLocaleLowerCase() === 'true'), labels: entryLabels diff --git a/core/test/regression/api/canary/admin/members_spec.js b/core/test/regression/api/canary/admin/members_spec.js index 885ab54160..ed517d38b7 100644 --- a/core/test/regression/api/canary/admin/members_spec.js +++ b/core/test/regression/api/canary/admin/members_spec.js @@ -304,6 +304,55 @@ describe('Members API', function () { }); }); + it('Can import CSV with minimum one field', function () { + return request + .post(localUtils.API.getApiQuery(`members/csv/`)) + .attach('membersfile', path.join(__dirname, '/../../../../utils/fixtures/csv/valid-members-defaults.csv')) + .set('Origin', config.get('url')) + .expect('Content-Type', /json/) + .expect('Cache-Control', testUtils.cacheRules.private) + .expect(201) + .then((res) => { + should.not.exist(res.headers['x-cache-invalidate']); + const jsonResponse = res.body; + + should.exist(jsonResponse); + should.exist(jsonResponse.meta); + should.exist(jsonResponse.meta.stats); + + jsonResponse.meta.stats.imported.should.equal(2); + jsonResponse.meta.stats.duplicates.should.equal(0); + jsonResponse.meta.stats.invalid.should.equal(0); + }) + .then(() => { + return request + .get(localUtils.API.getApiQuery(`members/`)) + .set('Origin', config.get('url')) + .expect('Content-Type', /json/) + .expect('Cache-Control', testUtils.cacheRules.private) + .expect(200); + }) + .then((res) => { + should.not.exist(res.headers['x-cache-invalidate']); + const jsonResponse = res.body; + + should.exist(jsonResponse); + should.exist(jsonResponse.members); + + const defaultMember1 = jsonResponse.members.find(member => (member.email === 'member+defaults_1@example.com')); + should(defaultMember1.name).equal(null); + should(defaultMember1.note).equal(null); + defaultMember1.subscribed.should.equal(true); + defaultMember1.comped.should.equal(false); + defaultMember1.stripe.should.not.be.undefined(); + defaultMember1.stripe.subscriptions.length.should.equal(0); + defaultMember1.labels.length.should.equal(0); + + const defaultMember2 = jsonResponse.members.find(member => (member.email === 'member+defaults_2@example.com')); + should(defaultMember2).not.be.undefined(); + }); + }); + it('Can import file with duplicate stripe customer ids', function () { return request .post(localUtils.API.getApiQuery(`members/csv/`)) diff --git a/core/test/utils/fixtures/csv/valid-members-defaults.csv b/core/test/utils/fixtures/csv/valid-members-defaults.csv new file mode 100644 index 0000000000..59718a68ca --- /dev/null +++ b/core/test/utils/fixtures/csv/valid-members-defaults.csv @@ -0,0 +1,3 @@ +email +member+defaults_1@example.com +member+defaults_2@example.com