From adc8802d093dcee3bf14487f0d3432be77b65b62 Mon Sep 17 00:00:00 2001 From: lbuerste Date: Tue, 2 Mar 2021 13:46:53 +0100 Subject: Issue 1114: new datatypes module Current status: - moved tests with seeding problem back to random.unit - implemented date method - added datatype module to seed funtion - added tests for date method --- lib/datatype.js | 22 +++++++++++++++++-- lib/index.js | 2 ++ test/browser.unit.html | 1 + test/datatype.unit.js | 59 +++++++++++++++++++++++++------------------------- test/internet.unit.js | 16 +++++++------- test/random.unit.js | 23 ++++++++++++++++++++ 6 files changed, 83 insertions(+), 40 deletions(-) diff --git a/lib/datatype.js b/lib/datatype.js index fba728ab..b7526907 100644 --- a/lib/datatype.js +++ b/lib/datatype.js @@ -84,8 +84,26 @@ function Datatype (faker, seed) { * * @method faker.datatype.date */ - this.date = function () { - var random = faker.datatype.number({ min: 0, max: 8600000000000000 }); + this.date = function (options) { + if (typeof options === "number") { + options = { + max: options + }; + } + + var minMax = 8640000000000000; + + options = options || {}; + + if (typeof options.min === "undefined" || options.min < minMax*-1) { + options.min = new Date().setFullYear(1990, 1, 1); + } + + if (typeof options.max === "undefined" || options.max > minMax) { + options.max = new Date().setFullYear(2100,1,1); + } + + var random = faker.datatype.number(options); return new Date(random); }; diff --git a/lib/index.js b/lib/index.js index 1f2ab0c5..cd1bede3 100644 --- a/lib/index.js +++ b/lib/index.js @@ -163,7 +163,9 @@ Faker.prototype.setLocale = function (locale) { Faker.prototype.seed = function(value) { var Random = require('./random'); + var Datatype = require('./datatype'); this.seedValue = value; this.random = new Random(this, this.seedValue); + this.datatype = new Datatype(this, this.seedValue); } module['exports'] = Faker; diff --git a/test/browser.unit.html b/test/browser.unit.html index 467f35ce..d01126d0 100644 --- a/test/browser.unit.html +++ b/test/browser.unit.html @@ -18,6 +18,7 @@ + diff --git a/test/datatype.unit.js b/test/datatype.unit.js index 7300d26f..a0a6a281 100644 --- a/test/datatype.unit.js +++ b/test/datatype.unit.js @@ -80,30 +80,6 @@ describe("datatype.js", function () { assert.strictEqual(opts.max, max); }); - it('should return deterministic results when seeded with integer', function() { - faker.seed(100); - var name = faker.name.findName(); - assert.strictEqual(name, 'Eva Jenkins'); - }) - - it('should return deterministic results when seeded with 0', function() { - faker.seed(0); - var name = faker.name.findName(); - assert.strictEqual(name, 'Lola Sporer'); - }) - - it('should return deterministic results when seeded with array - one element', function() { - faker.seed([10]); - var name = faker.name.findName(); - assert.strictEqual(name, 'Duane Kub'); - }) - - it('should return deterministic results when seeded with array - multiple elements', function() { - faker.seed([10, 100, 1000]); - var name = faker.name.findName(); - assert.strictEqual(name, 'Alma Shanahan'); - }) - }); describe("float", function() { @@ -183,6 +159,29 @@ describe("datatype.js", function () { }); }); + describe('date', function (){ + it('check validity of date and if returned value is created by Date()', function (){ + var date = faker.datatype.date(); + assert.ok(typeof date == 'object'); + assert.ok(!isNaN(date.getTime())); + assert.ok(Object.prototype.toString.call(date) === "[object Date]"); + }); + it('basic test with stubed value', function (){ + var today = new Date(); + sinon.stub(faker.datatype, 'number').returns(today); + var date = faker.datatype.date(); + assert.ok(today.valueOf() === date.valueOf()); + faker.datatype.number.restore(); + }); + it('check if date works with seeding', function (){ + faker.seed(100); + var date = faker.datatype.date(); + var dateVal = date.valueOf(); + console.log(dateVal); + assert.ok(dateVal === 2520186296319) + }); + }); + describe('boolean', function() { it('should generate a boolean value', function() { var bool = faker.datatype.boolean(); @@ -195,8 +194,8 @@ describe("datatype.js", function () { var UUID = faker.datatype.uuid(); var RFC4122 = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/; assert.ok(RFC4122.test(UUID)); - }) - }) + }); + }); describe('hexaDecimal', function() { var hexaDecimal = faker.datatype.hexaDecimal; @@ -204,11 +203,11 @@ describe("datatype.js", function () { it('should generate single hex character when no additional argument was provided', function() { var hex = hexaDecimal(); assert.ok(hex.match(/^(0x)[0-9a-f]{1}$/i)); - }) + }); it('should generate a random hex string', function() { var hex = hexaDecimal(5); assert.ok(hex.match(/^(0x)[0-9a-f]+$/i)); - }) - }) -}) \ No newline at end of file + }); + }); +}); \ No newline at end of file diff --git a/test/internet.unit.js b/test/internet.unit.js index cceaacc8..48006472 100644 --- a/test/internet.unit.js +++ b/test/internet.unit.js @@ -43,19 +43,19 @@ describe("internet.js", function () { describe("userName()", function () { it("occasionally returns a single firstName", function () { - sinon.stub(faker.random, 'number').returns(0); + sinon.stub(faker.datatype, 'number').returns(0); sinon.spy(faker.name, 'firstName'); var username = faker.internet.userName(); assert.ok(username); assert.ok(faker.name.firstName.called); - faker.random.number.restore(); + faker.datatype.number.restore(); faker.name.firstName.restore(); }); it("occasionally returns a firstName with a period or hyphen and a lastName", function () { - sinon.stub(faker.random, 'number').returns(1); + sinon.stub(faker.datatype, 'number').returns(1); sinon.spy(faker.name, 'firstName'); sinon.spy(faker.name, 'lastName'); sinon.spy(faker.random, 'arrayElement'); @@ -66,7 +66,7 @@ describe("internet.js", function () { assert.ok(faker.name.lastName.called); assert.ok(faker.random.arrayElement.calledWith(['.', '_'])); - faker.random.number.restore(); + faker.datatype.number.restore(); faker.name.firstName.restore(); faker.name.lastName.restore(); faker.random.arrayElement.restore(); @@ -116,21 +116,21 @@ describe("internet.js", function () { }); it('should occasionally return http', function () { - sinon.stub(faker.random, 'number').returns(0); + sinon.stub(faker.datatype, 'number').returns(0); var protocol = faker.internet.protocol(); assert.ok(protocol); assert.strictEqual(protocol, 'http'); - faker.random.number.restore(); + faker.datatype.number.restore(); }); it('should occasionally return https', function () { - sinon.stub(faker.random, 'number').returns(1); + sinon.stub(faker.datatype, 'number').returns(1); var protocol = faker.internet.protocol(); assert.ok(protocol); assert.strictEqual(protocol, 'https'); - faker.random.number.restore(); + faker.datatype.number.restore(); }); }); diff --git a/test/random.unit.js b/test/random.unit.js index 28675c31..06b9186b 100644 --- a/test/random.unit.js +++ b/test/random.unit.js @@ -18,6 +18,29 @@ describe("random.js", function () { faker.datatype.number.restore() console.log.restore(); }); + it('should return deterministic results when seeded with integer', function() { + faker.seed(100); + var name = faker.name.findName(); + assert.strictEqual(name, 'Eva Jenkins'); + }) + + it('should return deterministic results when seeded with 0', function() { + faker.seed(0); + var name = faker.name.findName(); + assert.strictEqual(name, 'Lola Sporer'); + }) + + it('should return deterministic results when seeded with array - one element', function() { + faker.seed([10]); + var name = faker.name.findName(); + assert.strictEqual(name, 'Duane Kub'); + }) + + it('should return deterministic results when seeded with array - multiple elements', function() { + faker.seed([10, 100, 1000]); + var name = faker.name.findName(); + assert.strictEqual(name, 'Alma Shanahan'); + }) }); describe("float", function() { -- cgit v1.2.3