From ed891f6a341c27673906b8aa5e54f34858c528d3 Mon Sep 17 00:00:00 2001 From: Niek Candaele Date: Sat, 28 Jan 2023 10:57:21 +0100 Subject: [PATCH] feat: add timeDiff and timeDiffPretty helpers --- package-lock.json | 37 ++++++----- package.json | 1 + .../sdtd/execute-custom-command.test.js | 66 +++++++++++++++++-- worker/util/Handlebars.js | 22 +++++++ 4 files changed, 101 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 502fb18f2..a65de438b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,6 +36,7 @@ "lusca": "^1.7.0", "minimist": "^1.2.3", "morgan": "^1.10.0", + "ms": "^2.1.3", "mysql2": "^2.3.0", "p-wait-for": "^4.1.0", "passport": "^0.4.1", @@ -3512,6 +3513,11 @@ } } }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/debuglog": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", @@ -9578,12 +9584,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -9677,9 +9677,9 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/multiparty": { "version": "4.1.3", @@ -21889,6 +21889,13 @@ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "debuglog": { @@ -26554,12 +26561,6 @@ } } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -26675,9 +26676,9 @@ } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "multiparty": { "version": "4.1.3", diff --git a/package.json b/package.json index 65347b68d..94668777b 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "lusca": "^1.7.0", "minimist": "^1.2.3", "morgan": "^1.10.0", + "ms": "^2.1.3", "mysql2": "^2.3.0", "p-wait-for": "^4.1.0", "passport": "^0.4.1", diff --git a/test/unit/helpers/sdtd/execute-custom-command.test.js b/test/unit/helpers/sdtd/execute-custom-command.test.js index 422adb90a..625dab9d3 100644 --- a/test/unit/helpers/sdtd/execute-custom-command.test.js +++ b/test/unit/helpers/sdtd/execute-custom-command.test.js @@ -1,6 +1,7 @@ const { expect } = require('chai'); const faker = require('faker'); const wait = require('../../../../worker/util/wait'); +const MockDate = require('mockdate'); describe('HELPER execute-custom-command', function () { beforeEach(function () { @@ -445,7 +446,7 @@ say "1 - 1 = {{subtract 1 1}}" expect(sails.helpers.sdtdApi.executeConsoleCommand.getCall(3).lastArg).to.equal(`say "The var is: "`); }); - it('Can list variables', async() => { + it('Can list variables', async () => { const names = [ 'exchange:rate', 'exchange:max', @@ -515,7 +516,7 @@ say "1 - 1 = {{subtract 1 1}}" .map((string) => string.trim()); expect(result).to.have.length(1, 'simpleSearch: error running command'); expect(resultArray).to.have.length(3, 'simpleSearch: invalid length'); - expect(resultArray).to.eql([ 'zk_id0', 'zk_id1', 'zk_id2' ], 'simpleSearch: eql'); + expect(resultArray).to.eql(['zk_id0', 'zk_id1', 'zk_id2'], 'simpleSearch: eql'); result = await sails.helpers.sdtd.executeCustomCmd(sails.testServer, startsWithSearch, {}); resultArray = sails.helpers.sdtdApi.executeConsoleCommand.lastCall.lastArg @@ -523,7 +524,7 @@ say "1 - 1 = {{subtract 1 1}}" .map((string) => string.trim()); expect(result).to.have.length(1, 'startsWithSearch: error running command'); expect(resultArray).to.have.length(2, 'startsWithSearch: invalid length'); - expect(resultArray).to.eql([ 'exchange:rate', 'exchange:max' ], 'startsWithSearch: eql'); + expect(resultArray).to.eql(['exchange:rate', 'exchange:max'], 'startsWithSearch: eql'); result = await sails.helpers.sdtd.executeCustomCmd(sails.testServer, endsWithSearch, {}); let resultString = sails.helpers.sdtdApi.executeConsoleCommand.lastCall.lastArg; @@ -546,7 +547,7 @@ say "1 - 1 = {{subtract 1 1}}" .map((string) => string.trim()); expect(result).to.have.length(1, 'searchWithSortDesc: error running command'); expect(resultArray).to.have.length(3, 'searchWithSortDesc: invalid length'); - expect(resultArray).to.eql([ 'zk_id2', 'zk_id1', 'zk_id0' ], 'searchWithSortDesc: eql'); + expect(resultArray).to.eql(['zk_id2', 'zk_id1', 'zk_id0'], 'searchWithSortDesc: eql'); result = await sails.helpers.sdtd.executeCustomCmd(sails.testServer, searchWithSortAsc, {}); resultArray = sails.helpers.sdtdApi.executeConsoleCommand.lastCall.lastArg @@ -554,7 +555,7 @@ say "1 - 1 = {{subtract 1 1}}" .map((string) => string.trim()); expect(result).to.have.length(1, 'searchWithSortAsc: error running command'); expect(resultArray).to.have.length(3, 'searchWithSortAsc: invalid length'); - expect(resultArray).to.eql([ 'zk_id0', 'zk_id1', 'zk_id2' ], 'searchWithSortAsc: eql'); + expect(resultArray).to.eql(['zk_id0', 'zk_id1', 'zk_id2'], 'searchWithSortAsc: eql'); result = await sails.helpers.sdtd.executeCustomCmd(sails.testServer, searchWithTheLot, {}); resultArray = sails.helpers.sdtdApi.executeConsoleCommand.lastCall.lastArg @@ -562,7 +563,7 @@ say "1 - 1 = {{subtract 1 1}}" .map((string) => string.trim()); expect(result).to.have.length(1, 'searchWithTheLot: error running command'); expect(resultArray).to.have.length(2, 'searchWithTheLot: invalid length'); - expect(resultArray).to.eql([ 'zk_id0', 'zk_id1'], 'searchWithTheLot: eql'); + expect(resultArray).to.eql(['zk_id0', 'zk_id1'], 'searchWithTheLot: eql'); result = await sails.helpers.sdtd.executeCustomCmd(sails.testServer, searchWithNoQuery, {}); resultArray = sails.helpers.sdtdApi.executeConsoleCommand.lastCall.lastArg @@ -570,7 +571,7 @@ say "1 - 1 = {{subtract 1 1}}" .map((string) => string.trim()); expect(result).to.have.length(1, 'searchWithNoQuery: error running command'); expect(resultArray).to.have.length(8, 'searchWithNoQuery: invalid length'); - expect(resultArray).to.eql([ 'exchange:rate', 'exchange:max', 'zk_id0', 'zk_id1', 'zk_id2', 'pk_id0', 'pk_id1', 'pk_id2'], 'searchWithNoQuery: eql'); + expect(resultArray).to.eql(['exchange:rate', 'exchange:max', 'zk_id0', 'zk_id1', 'zk_id2', 'pk_id0', 'pk_id1', 'pk_id2'], 'searchWithNoQuery: eql'); result = await sails.helpers.sdtd.executeCustomCmd(sails.testServer, searchWithNoResults, {}); expect(result).to.have.length(0, 'searchWithNoResults: wait what????'); @@ -628,6 +629,57 @@ say "1 - 1 = {{subtract 1 1}}" }); + describe('timeDiff helper', () => { + it('Can display the time left until a date', async () => { + MockDate.set('2020-01-01T00:00:00.000Z'); + const template = [ + '{{timeDiff "2020-01-02T00:00:00.000Z"}}', + ].join(';'); + + await sails.helpers.sdtd.executeCustomCmd(sails.testServer, template, { player: sails.testPlayer }); + expect(sails.helpers.sdtdApi.executeConsoleCommand.lastCall.lastArg).to.equal('86400'); + }); + + it('Can display time passed for date in the past', async () => { + MockDate.set('2020-02-10T00:00:00.000Z'); + const template = [ + '{{timeDiff "2020-02-09T00:00:00.000Z"}}', + ].join(';'); + + await sails.helpers.sdtd.executeCustomCmd(sails.testServer, template, { player: sails.testPlayer }); + expect(sails.helpers.sdtdApi.executeConsoleCommand.lastCall.lastArg).to.equal('-86400'); + }); + + it('can pretty-print a timediff in the future', async () => { + MockDate.set('2020-02-10T00:00:00.000Z'); + const template = [ + '{{timeDiffPretty "2020-02-11T00:00:00.000Z"}}', + ].join(';'); + + await sails.helpers.sdtd.executeCustomCmd(sails.testServer, template, { player: sails.testPlayer }); + expect(sails.helpers.sdtdApi.executeConsoleCommand.lastCall.lastArg).to.equal('1 day'); + }); + + it('Can pretty-print a timediff thats two days away', async () => { + MockDate.set('2020-02-10T00:00:00.000Z'); + const template = [ + '{{timeDiffPretty "2020-02-12T00:00:00.000Z"}}', + ].join(';'); + + await sails.helpers.sdtd.executeCustomCmd(sails.testServer, template, { player: sails.testPlayer }); + expect(sails.helpers.sdtdApi.executeConsoleCommand.lastCall.lastArg).to.equal('2 days'); + }); + + it('can pretty-print a timediff in the past', async () => { + MockDate.set('2020-02-10T00:00:00.000Z'); + const template = [ + '{{timeDiffPretty "2020-02-09T00:00:00.000Z"}}', + ].join(';'); + + await sails.helpers.sdtd.executeCustomCmd(sails.testServer, template, { player: sails.testPlayer }); + expect(sails.helpers.sdtdApi.executeConsoleCommand.lastCall.lastArg).to.equal('1 day ago'); + }); + }); }); diff --git a/worker/util/Handlebars.js b/worker/util/Handlebars.js index b2a866f0c..44076d424 100644 --- a/worker/util/Handlebars.js +++ b/worker/util/Handlebars.js @@ -1,4 +1,5 @@ const promisedHandlebars = require('promised-handlebars'); +const ms = require('ms'); const PersistentVariablesManager = require('./CSMMCommand/persistentVariables'); @@ -310,4 +311,25 @@ Handlebars.registerHelper('datePassed', function (date) { return ((Date.now() - Date.parse(date)) >= 0); }); +Handlebars.registerHelper('timeDiff', function (date) { + //Get milliseconds from Date.now() + let timeDiff = -1 * (Date.now() - Date.parse(date)); + return timeDiff / 1000; +}); + +Handlebars.registerHelper('timeDiffPretty', function (date) { + //Get milliseconds from Date.now() + let timeDiff = Date.now() - Date.parse(date); + + const isInPast = timeDiff > 0; + + timeDiff = Math.abs(timeDiff); + + if (isInPast) { + return ms(timeDiff, { long: true }) + ' ago'; + } + + return ms(timeDiff, { long: true }); +}); + module.exports = Handlebars;