forked from zuriby/Faker.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[fix] [api] Add back commerce methods.
- Loading branch information
Showing
3 changed files
with
145 additions
and
143 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,81 +1,81 @@ | ||
var faker = require('./index'); | ||
var Commerce = function (faker) { | ||
var self = this; | ||
|
||
var commerce = { | ||
self.color = function() { | ||
return faker.random.array_element(faker.definitions.commerce.color); | ||
}; | ||
|
||
color: function() { | ||
return faker.random.array_element(faker.definitions.commerce.color); | ||
}, | ||
self.department = function(max, fixedAmount) { | ||
max = max || 3; | ||
|
||
department: function(max, fixedAmount) { | ||
max = max || 3; | ||
var num = Math.floor((Math.random() * max) + 1); | ||
if (fixedAmount) { | ||
num = max; | ||
} | ||
|
||
var num = Math.floor((Math.random() * max) + 1); | ||
if(fixedAmount) { | ||
num = max; | ||
} | ||
var categories = faker.commerce.categories(num); | ||
|
||
var categories = faker.commerce.categories(num); | ||
if(num > 1) { | ||
return faker.commerce.mergeCategories(categories); | ||
} | ||
|
||
if(num > 1) { | ||
return faker.commerce.mergeCategories(categories); | ||
} | ||
return categories[0]; | ||
}; | ||
|
||
return categories[0]; | ||
}, | ||
self.productName = function() { | ||
return faker.commerce.productAdjective() + " " + | ||
faker.commerce.productMaterial() + " " + | ||
faker.commerce.product(); | ||
}; | ||
|
||
productName: function() { | ||
return faker.commerce.productAdjective() + " " + | ||
faker.commerce.productMaterial() + " " + | ||
faker.commerce.product(); | ||
}, | ||
self.price = function(min, max, dec, symbol) { | ||
min = min || 0; | ||
max = max || 1000; | ||
dec = dec || 2; | ||
symbol = symbol || ''; | ||
|
||
price: function(min, max, dec, symbol) { | ||
min = min || 0; | ||
max = max || 1000; | ||
dec = dec || 2; | ||
symbol = symbol || ''; | ||
if(min < 0 || max < 0) { | ||
return symbol + 0.00; | ||
} | ||
|
||
if(min < 0 || max < 0) { | ||
return symbol + 0.00; | ||
} | ||
return symbol + (Math.round((Math.random() * (max - min) + min) * Math.pow(10, dec)) / Math.pow(10, dec)).toFixed(dec); | ||
}; | ||
|
||
return symbol + (Math.round((Math.random() * (max - min) + min) * Math.pow(10, dec)) / Math.pow(10, dec)).toFixed(dec); | ||
}, | ||
self.categories = function(num) { | ||
var categories = []; | ||
|
||
categories: function(num) { | ||
var categories = []; | ||
do { | ||
var category = faker.random.array_element(faker.definitions.commerce.department); | ||
if(categories.indexOf(category) === -1) { | ||
categories.push(category); | ||
} | ||
} while(categories.length < num); | ||
|
||
do { | ||
var category = faker.random.array_element(faker.definitions.commerce.department); | ||
if(categories.indexOf(category) === -1) { | ||
categories.push(category); | ||
} | ||
} while(categories.length < num); | ||
return categories; | ||
}; | ||
|
||
return categories; | ||
}, | ||
self.mergeCategories = function(categories) { | ||
var separator = faker.definitions.separator || " &"; | ||
// TODO: find undefined here | ||
categories = categories || faker.definitions.commerce.categories; | ||
var commaSeparated = categories.slice(0, -1).join(', '); | ||
|
||
mergeCategories: function(categories) { | ||
var separator = faker.definitions.separator || " &"; | ||
// TODO: find undefined here | ||
categories = categories || faker.definitions.commerce.categories; | ||
var commaSeparated = categories.slice(0, -1).join(', '); | ||
return [commaSeparated, categories[categories.length - 1]].join(separator + " "); | ||
}; | ||
|
||
return [commaSeparated, categories[categories.length - 1]].join(separator); | ||
}, | ||
self.productAdjective = function() { | ||
return faker.random.array_element(faker.definitions.commerce.product_name.adjective); | ||
}; | ||
|
||
productAdjective: function() { | ||
return faker.random.array_element(faker.definitions.commerce.product_name.adjective); | ||
}, | ||
self.productMaterial = function() { | ||
return faker.random.array_element(faker.definitions.commerce.product_name.material); | ||
}; | ||
|
||
productMaterial: function() { | ||
return faker.random.array_element(faker.definitions.commerce.product_name.material); | ||
}, | ||
|
||
product: function() { | ||
return faker.random.array_element(faker.definitions.commerce.product_name.product); | ||
} | ||
self.product = function() { | ||
return faker.random.array_element(faker.definitions.commerce.product_name.product); | ||
} | ||
|
||
return self; | ||
}; | ||
|
||
module.exports = commerce; | ||
module['exports'] = Commerce; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,114 +1,113 @@ | ||
return; | ||
|
||
if(typeof module !== 'undefined') { | ||
if (typeof module !== 'undefined') { | ||
var assert = require('assert'), | ||
sinon = require('sinon'), | ||
faker = require('../index'); | ||
} | ||
|
||
describe("commerce.js", function() { | ||
|
||
describe("color()", function() { | ||
it("returns random value from commerce.color array", function() { | ||
var color = faker.commerce.color(); | ||
assert.ok(faker.definitions.commerce.color.indexOf(color) !== -1); | ||
}); | ||
}); | ||
|
||
describe("department(max, fixedValue)", function() { | ||
it("should use the default amounts when not passing arguments", function() { | ||
var department = faker.commerce.department(); | ||
|
||
assert.ok(department.split(" ").length <= 4); | ||
}); | ||
|
||
it("should return only one value if we specify a maximum of one", function() { | ||
sinon.spy(faker.random, 'array_element'); | ||
|
||
var department = faker.commerce.department(1); | ||
describe("color()", function() { | ||
it("returns random value from commerce.color array", function() { | ||
var color = faker.commerce.color(); | ||
assert.ok(faker.definitions.commerce.color.indexOf(color) !== -1); | ||
}); | ||
}); | ||
|
||
assert.strictEqual(department.split(" ").length, 1); | ||
assert.ok(faker.random.array_element.calledOnce); | ||
describe("department(max, fixedValue)", function() { | ||
|
||
faker.random.array_element.restore(); | ||
}); | ||
it("should use the default amounts when not passing arguments", function() { | ||
var department = faker.commerce.department(); | ||
|
||
it("should return the maxiumum value if we specify the fixed value", function() { | ||
sinon.spy(faker.random, 'array_element'); | ||
assert.ok(department.split(" ").length <= 4); | ||
}); | ||
|
||
var department = faker.commerce.department(5, true); | ||
it("should return only one value if we specify a maximum of one", function() { | ||
sinon.spy(faker.random, 'array_element'); | ||
|
||
console.log(department); | ||
var department = faker.commerce.department(1); | ||
|
||
// account for the separator | ||
assert.strictEqual(department.split(" ").length, 6); | ||
// Sometimes it will generate duplicates that aren't used in the final string, | ||
// so we check if array_element has been called exactly or more than 5 times | ||
assert.ok(faker.random.array_element.callCount >= 5); | ||
assert.strictEqual(department.split(" ").length, 1); | ||
assert.ok(faker.random.array_element.calledOnce); | ||
|
||
faker.random.array_element.restore(); | ||
}) | ||
faker.random.array_element.restore(); | ||
}); | ||
|
||
describe("productName()", function() { | ||
it("returns name comprising of an adjective, material and product", function() { | ||
sinon.spy(faker.random, 'array_element'); | ||
sinon.spy(faker.commerce, 'productAdjective'); | ||
sinon.spy(faker.commerce, 'productMaterial'); | ||
sinon.spy(faker.commerce, 'product'); | ||
var name = faker.commerce.productName(); | ||
|
||
assert.ok(name.split(' ').length >= 3); | ||
assert.ok(faker.random.array_element.calledThrice); | ||
assert.ok(faker.commerce.productAdjective.calledOnce); | ||
assert.ok(faker.commerce.productMaterial.calledOnce); | ||
assert.ok(faker.commerce.product.calledOnce); | ||
|
||
faker.random.array_element.restore(); | ||
faker.commerce.productAdjective.restore(); | ||
faker.commerce.productMaterial.restore(); | ||
faker.commerce.product.restore(); | ||
}); | ||
it("should return the maxiumum value if we specify the fixed value", function() { | ||
sinon.spy(faker.random, 'array_element'); | ||
|
||
var department = faker.commerce.department(5, true); | ||
|
||
console.log(department); | ||
|
||
// account for the separator | ||
assert.strictEqual(department.split(" ").length, 6); | ||
// Sometimes it will generate duplicates that aren't used in the final string, | ||
// so we check if array_element has been called exactly or more than 5 times | ||
assert.ok(faker.random.array_element.callCount >= 5); | ||
|
||
faker.random.array_element.restore(); | ||
}) | ||
}); | ||
|
||
describe("productName()", function() { | ||
it("returns name comprising of an adjective, material and product", function() { | ||
sinon.spy(faker.random, 'array_element'); | ||
sinon.spy(faker.commerce, 'productAdjective'); | ||
sinon.spy(faker.commerce, 'productMaterial'); | ||
sinon.spy(faker.commerce, 'product'); | ||
var name = faker.commerce.productName(); | ||
|
||
assert.ok(name.split(' ').length >= 3); | ||
assert.ok(faker.random.array_element.calledThrice); | ||
assert.ok(faker.commerce.productAdjective.calledOnce); | ||
assert.ok(faker.commerce.productMaterial.calledOnce); | ||
assert.ok(faker.commerce.product.calledOnce); | ||
|
||
faker.random.array_element.restore(); | ||
faker.commerce.productAdjective.restore(); | ||
faker.commerce.productMaterial.restore(); | ||
faker.commerce.product.restore(); | ||
}); | ||
}); | ||
|
||
describe("price(min, max, dec, symbol", function() { | ||
it("should use the default amounts when not passing arguments", function() { | ||
var price = faker.commerce.price(); | ||
|
||
assert.ok(price); | ||
assert.equal((price > 0), true, "the amount should be greater than 0"); | ||
assert.equal((price < 1001), true, "the amount should be less than 1000"); | ||
}); | ||
|
||
describe("price(min, max, dec, symbol", function() { | ||
it("should use the default amounts when not passing arguments", function() { | ||
var price = faker.commerce.price(); | ||
|
||
assert.ok(price); | ||
assert.equal((price > 0), true, "the amount should be greater than 0"); | ||
assert.equal((price < 1001), true, "the amount should be less than 1000"); | ||
}); | ||
|
||
it("should use the default decimal location when not passing arguments", function() { | ||
var price = faker.commerce.price(); | ||
it("should use the default decimal location when not passing arguments", function() { | ||
var price = faker.commerce.price(); | ||
|
||
var decimal = "."; | ||
var expected = price.length - 3; | ||
var actual = price.indexOf(decimal); | ||
var decimal = "."; | ||
var expected = price.length - 3; | ||
var actual = price.indexOf(decimal); | ||
|
||
assert.equal(actual, expected, "The expected location of the decimal is " + expected + " but it was " + actual + " amount " + price); | ||
}); | ||
assert.equal(actual, expected, "The expected location of the decimal is " + expected + " but it was " + actual + " amount " + price); | ||
}); | ||
|
||
it("should not include a currency symbol by default", function () { | ||
it("should not include a currency symbol by default", function () { | ||
|
||
var amount = faker.commerce.price(); | ||
var amount = faker.commerce.price(); | ||
|
||
var regexp = new RegExp(/[0-9.]/); | ||
var regexp = new RegExp(/[0-9.]/); | ||
|
||
var expected = true; | ||
var actual = regexp.test(amount); | ||
var expected = true; | ||
var actual = regexp.test(amount); | ||
|
||
assert.equal(actual, expected, 'The expected match should not include a currency symbol'); | ||
}); | ||
assert.equal(actual, expected, 'The expected match should not include a currency symbol'); | ||
}); | ||
|
||
it("it should handle negative amounts, but return 0", function () { | ||
it("it should handle negative amounts, but return 0", function () { | ||
|
||
var amount = faker.commerce.price(-200, -1); | ||
var amount = faker.commerce.price(-200, -1); | ||
|
||
assert.ok(amount); | ||
assert.equal((amount == 0.00), true, "the amount should equal 0"); | ||
}); | ||
assert.ok(amount); | ||
assert.equal((amount == 0.00), true, "the amount should equal 0"); | ||
}); | ||
}); | ||
|
||
}); |