From 1425d96debfa002c1547af0ca942966b883dc379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Alby?= Date: Mon, 4 Oct 2021 14:28:21 +0200 Subject: [PATCH] Merge pull request #5319 from overleaf/ta-split-test-assignment-date Validate User's Split Tests Schema GitOrigin-RevId: 0e37a833696359838c7133cd7cd9411ec520993a --- services/web/app/src/models/User.js | 14 ++++++++++ .../web/test/acceptance/src/ModelTests.js | 28 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/services/web/app/src/models/User.js b/services/web/app/src/models/User.js index 5a4e396792..4bfeb798cd 100644 --- a/services/web/app/src/models/User.js +++ b/services/web/app/src/models/User.js @@ -169,5 +169,19 @@ const UserSchema = new Schema({ analyticsId: { type: String }, }) +function formatSplitTestsSchema(next) { + if (this.splitTests) { + for (const splitTestKey of Object.keys(this.splitTests)) { + for (const variantIndex in this.splitTests[splitTestKey]) { + this.splitTests[splitTestKey][variantIndex].assignedAt = new Date( + this.splitTests[splitTestKey][variantIndex].assignedAt + ) + } + } + } + next() +} +UserSchema.pre('save', formatSplitTestsSchema) + exports.User = mongoose.model('User', UserSchema) exports.UserSchema = UserSchema diff --git a/services/web/test/acceptance/src/ModelTests.js b/services/web/test/acceptance/src/ModelTests.js index f90bf47657..6b31d36771 100644 --- a/services/web/test/acceptance/src/ModelTests.js +++ b/services/web/test/acceptance/src/ModelTests.js @@ -17,6 +17,34 @@ describe('mongoose', function () { await expect(User.create({ email: email })).to.be.rejected await expect(User.countDocuments({ email: email })).to.eventually.equal(1) }) + + it('formats assignedAt as Date', async function () { + await expect( + User.create({ + email, + splitTests: { + 'some-test': [ + { + variantName: 'control', + versionNumber: 1, + phase: 'release', + assignedAt: '2021-09-24T11:53:18.313Z', + }, + { + variantName: 'control', + versionNumber: 2, + phase: 'release', + assignedAt: new Date(), + }, + ], + }, + }) + ).to.be.fulfilled + + const user = await User.findOne({ email }) + expect(user.splitTests['some-test'][0].assignedAt).to.be.a('date') + expect(user.splitTests['some-test'][1].assignedAt).to.be.a('date') + }) }) describe('Subsription', function () {