forked from Geertvdc/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.
Add Commerce functions from https://github.com/stympy/faker into java…
…script
- Loading branch information
1 parent
a39082f
commit 3418839
Showing
5 changed files
with
238 additions
and
5 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
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 |
---|---|---|
@@ -0,0 +1,81 @@ | ||
var faker = require('../index'); | ||
|
||
var commerce = { | ||
|
||
color: function() { | ||
return faker.random.array_element(faker.definitions.commerce.color); | ||
}, | ||
|
||
department: function(max, fixedAmount) { | ||
max = max || 3; | ||
|
||
var num = Math.floor((Math.random() * max) + 1); | ||
if(fixedAmount) { | ||
num = max; | ||
} | ||
|
||
var categories = faker.commerce.categories(num); | ||
|
||
console.log("NUMBER: " + num); | ||
|
||
if(num > 1) { | ||
return faker.commerce.mergeCategories(categories); | ||
} | ||
|
||
return categories[0]; | ||
}, | ||
|
||
productName: function() { | ||
return faker.commerce.productAdjective() + " " + | ||
faker.commerce.productMaterial() + " " + | ||
faker.commerce.product(); | ||
}, | ||
|
||
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; | ||
} | ||
|
||
return symbol + (Math.round((Math.random() * (max - min) + min) * Math.pow(10, dec)) / Math.pow(10, dec)).toFixed(dec); | ||
}, | ||
|
||
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); | ||
|
||
return categories; | ||
}, | ||
|
||
mergeCategories: function(categories) { | ||
var separator = faker.definitions.separator; | ||
var commaSeparated = categories.slice(0, -1).join(', '); | ||
|
||
return [commaSeparated, categories[categories.length - 1]].join(separator); | ||
}, | ||
|
||
productAdjective: function() { | ||
return faker.random.array_element(faker.definitions.commerce.product_name.adjective); | ||
}, | ||
|
||
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); | ||
} | ||
|
||
}; | ||
|
||
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
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 |
---|---|---|
@@ -0,0 +1,112 @@ | ||
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); | ||
|
||
assert.strictEqual(department.split(" ").length, 1); | ||
assert.ok(faker.random.array_element.calledOnce); | ||
|
||
faker.random.array_element.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"); | ||
}); | ||
|
||
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); | ||
|
||
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 () { | ||
|
||
var amount = faker.commerce.price(); | ||
|
||
var regexp = new RegExp(/[0-9.]/); | ||
|
||
var expected = true; | ||
var actual = regexp.test(amount); | ||
|
||
assert.equal(actual, expected, 'The expected match should not include a currency symbol'); | ||
}); | ||
|
||
it("it should handle negative amounts, but return 0", function () { | ||
|
||
var amount = faker.commerce.price(-200, -1); | ||
|
||
assert.ok(amount); | ||
assert.equal((amount == 0.00), true, "the amount should equal 0"); | ||
}); | ||
}); | ||
|
||
}); |