From a0d01a7dbd5ff438095980c491ddc548ee29e96a Mon Sep 17 00:00:00 2001 From: Justin Wind Date: Mon, 23 Aug 2021 14:51:51 -0700 Subject: [PATCH] fix sqlite subscription data to return native dates This resolves the admin subscription page not displaying, when using sqlite backend. --- src/db/sqlite/index.js | 23 ++++++++++++++++++++--- test/src/db/sqlite.js | 2 +- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/db/sqlite/index.js b/src/db/sqlite/index.js index a4c3d38..9ef1fe5 100644 --- a/src/db/sqlite/index.js +++ b/src/db/sqlite/index.js @@ -299,12 +299,29 @@ class DatabaseSQLite extends Database { } + /** + * Converts engine subscription fields to native types. + * @param {Object} data + */ + static _subscriptionDataToNative(data) { + const epochToDate = (epoch) => new Date(Number(epoch) * 1000); + if (data) { + ['created', 'verified', 'expires', 'contentDelivered'].forEach((field) => { + // eslint-disable-next-line security/detect-object-injection + data[field] = epochToDate(data[field]); + }); + } + return data; + } + + subscriptionsByTopicId(dbCtx, topicId) { const _scope = _fileScope('subscriptionsByTopicId'); this.logger.debug(_scope, 'called', { topicId }); try { - return this.statement.subscriptionsByTopicId.all({ topicId }); + const subscriptions = this.statement.subscriptionsByTopicId.all({ topicId }); + return subscriptions.map((s) => DatabaseSQLite._subscriptionDataToNative(s)); } catch (e) { this.logger.error(_scope, 'failed', { error: e, topicId }); throw e; @@ -463,7 +480,7 @@ class DatabaseSQLite extends Database { let subscription; try { subscription = this.statement.subscriptionGet.get({ callback, topicId }); - return subscription; + return DatabaseSQLite._subscriptionDataToNative(subscription); } catch (e) { this.logger.error(_scope, 'failed', { error: e, callback, topicId }); throw e; @@ -478,7 +495,7 @@ class DatabaseSQLite extends Database { let subscription; try { subscription = this.statement.subscriptionGetById.get({ subscriptionId }); - return subscription; + return DatabaseSQLite._subscriptionDataToNative(subscription); } catch (e) { this.logger.error(_scope, 'failed', { error: e, subscriptionId }); throw e; diff --git a/test/src/db/sqlite.js b/test/src/db/sqlite.js index 310e87a..0c96df3 100644 --- a/test/src/db/sqlite.js +++ b/test/src/db/sqlite.js @@ -339,7 +339,7 @@ describe('DatabaseSQLite', function () { describe('subscriptionsByTopicId', function () { it('success', async function () { - const expected = { count: 3 }; + const expected = [{ id: 3 }]; sinon.stub(db.statement.subscriptionsByTopicId, 'all').returns(expected); const result = await db.subscriptionsByTopicId(dbCtx, topicUrl); assert.deepStrictEqual(result, expected); -- 2.45.2