aboutsummaryrefslogtreecommitdiff
path: root/test/support/function-helpers.js
blob: 5411ac71d2c157eb4d65c7f8b52facda1887d5ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
if (typeof module !== 'undefined') {
    var assert = require('assert');
    var sinon = require('sinon');
    var faker = require('../../index');
}

var functionHelpers = {};

module.exports = functionHelpers;


var IGNORED_MODULES = ['locales', 'locale', 'localeFallback', 'definitions', 'fake', 'helpers', 'mersenne'];
var IGNORED_METHODS = {
    system: ['directoryPath', 'filePath'] // these are TODOs
};

function isTestableModule(mod) {
    return IGNORED_MODULES.indexOf(mod) === -1;
}

function isMethodOf(mod) {
    return function(meth) {
        return typeof faker[mod][meth] === 'function';
    };
}

function isTestableMethod(mod) {
    return function(meth) {
        return !(mod in IGNORED_METHODS && IGNORED_METHODS[mod].indexOf(meth) >= 0);
    };
}

function both(pred1, pred2) {
    return function(value) {
        return pred1(value) && pred2(value);
    };
}

// Basic smoke tests to make sure each method is at least implemented and returns a value.

functionHelpers.modulesList = function modulesList () {
  var modules = Object.keys(faker)
      .filter(isTestableModule)
      .reduce(function(result, mod) {
          result[mod] = Object.keys(faker[mod]).filter(both(isMethodOf(mod), isTestableMethod(mod)));
          return result;
      }, {});
      
  return modules;
}