From e2427fe29901cd24bcd11ffb7023439c4d468f7a Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 15 Mar 2020 09:11:55 +0100 Subject: [PATCH] Try out a mockdate class --- tests/e2e/modules/compliments_spec.js | 24 ++------ tests/e2e/modules/mocks/date.js | 86 +++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 20 deletions(-) create mode 100644 tests/e2e/modules/mocks/date.js diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index 68dcb7ff..2ebd2e82 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -1,6 +1,6 @@ const helpers = require("../global-setup"); const expect = require("chai").expect; -const moment = require("moment"); +const MockDate = require("./mocks/date.js"); const describe = global.describe; const it = global.it; @@ -93,36 +93,20 @@ describe("Compliments module", function() { describe("Feature date in compliments module", function() { describe("Set date and empty compliments for anytime, morning, evening and afternoon", function() { - let RealDate; - before(function() { // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_date.js"; - - RealDate = Date; - let customTimeMs = moment("2015-10-12T06:00:00.000Z").valueOf(); - - function MockDate() { - return new RealDate(customTimeMs); - } - - MockDate.now = function () { - return new MockDate().valueOf(); - }; - - MockDate.prototype = RealDate.prototype; - - Date = MockDate; + MockDate.set("2000-12-10"); }); - it("Show anytime because if configure empty parts of day compliments and set anytime compliments", function() { + it("Show happy birthday compliment on special date", function() { return app.client.waitUntilWindowLoaded().getText(".compliments").then(function(text) { expect(text).to.be.oneOf(["Happy birthday, Ada Lovelace!"]); }); }); after(function() { - Date = RealDate; + MockDate.reset(); }); }); }); diff --git a/tests/e2e/modules/mocks/date.js b/tests/e2e/modules/mocks/date.js new file mode 100644 index 00000000..ff33f2e6 --- /dev/null +++ b/tests/e2e/modules/mocks/date.js @@ -0,0 +1,86 @@ +(function(name, definition) { + if (typeof module !== 'undefined') module.exports = definition(); + else if (typeof define === 'function' && typeof define.amd === 'object') define(definition); + else this[name] = definition(); +}('MockDate', function() { + "use strict"; + + var _Date = Date + , _getTimezoneOffset = Date.prototype.getTimezoneOffset + , now = null + ; + + function MockDate(y, m, d, h, M, s, ms) { + var date; + + switch (arguments.length) { + + case 0: + if (now !== null) { + date = new _Date(now); + } else { + date = new _Date(); + } + break; + + case 1: + date = new _Date(y); + break; + + default: + d = typeof d === 'undefined' ? 1 : d; + h = h || 0; + M = M || 0; + s = s || 0; + ms = ms || 0; + date = new _Date(y, m, d, h, M, s, ms); + break; + } + + return date; + } + + MockDate.UTC = _Date.UTC; + + MockDate.now = function() { + return new MockDate().valueOf(); + }; + + MockDate.parse = function(dateString) { + return _Date.parse(dateString); + }; + + MockDate.toString = function() { + return _Date.toString(); + }; + + MockDate.prototype = _Date.prototype; + + function set(date, timezoneOffset) { + var dateObj = new Date(date) + if (isNaN(dateObj.getTime())) { + throw new TypeError('mockdate: The time set is an invalid date: ' + date) + } + + if (typeof timezoneOffset === 'number') { + MockDate.prototype.getTimezoneOffset = function() { + return timezoneOffset; + } + } + + Date = MockDate; + + now = dateObj.valueOf(); + } + + function reset() { + Date = _Date; + Date.prototype.getTimezoneOffset = _getTimezoneOffset + } + + return { + set: set, + reset: reset + }; + +}));