1 | var casual = require('../');
|
2 |
|
3 | describe('API', function() {
|
4 | var max_times = 10;
|
5 | var test = function(name) {
|
6 | it('casual.' + name + ' should be ok', function(done) {
|
7 | if (typeof casual[name] === 'function') {
|
8 | var pivot = casual[name]();
|
9 | } else {
|
10 | var pivot = casual[name];
|
11 | }
|
12 |
|
13 | for (var i = 0; i < max_times; i++) {
|
14 | if (typeof casual[name] === 'function') {
|
15 | var result = casual[name]();
|
16 | } else {
|
17 | var result = casual[name];
|
18 | }
|
19 |
|
20 | if (result != pivot) {
|
21 | return done();
|
22 | }
|
23 | }
|
24 |
|
25 | done('Fail');
|
26 | });
|
27 | };
|
28 |
|
29 | var address = [
|
30 | 'zip',
|
31 | 'city',
|
32 | 'street',
|
33 | 'address',
|
34 | 'address1',
|
35 | 'address2',
|
36 | 'state',
|
37 | 'state_abbr',
|
38 | 'latitude',
|
39 | 'longitude',
|
40 | 'country',
|
41 | 'building_number'
|
42 | ];
|
43 |
|
44 | var text = [
|
45 | 'sentence',
|
46 | 'sentences',
|
47 | 'title',
|
48 | 'text',
|
49 | 'description',
|
50 | 'short_description',
|
51 | 'string',
|
52 | 'word',
|
53 | 'words',
|
54 | 'array_of_words',
|
55 | 'letter'
|
56 | ];
|
57 |
|
58 | var internet = [
|
59 | 'ip',
|
60 | 'domain',
|
61 | 'url',
|
62 | 'email'
|
63 | ];
|
64 |
|
65 | var person = [
|
66 | 'name',
|
67 | 'username',
|
68 | 'first_name',
|
69 | 'last_name',
|
70 | 'full_name',
|
71 | 'password',
|
72 | 'name_prefix',
|
73 | 'name_suffix',
|
74 | 'company_name',
|
75 | 'catch_phrase',
|
76 | 'phone'
|
77 | ];
|
78 |
|
79 | var number = [
|
80 | 'integer',
|
81 | 'double',
|
82 | 'digit',
|
83 | 'array_of_digits',
|
84 | 'array_of_integers',
|
85 | 'array_of_doubles'
|
86 | ];
|
87 |
|
88 | var date = [
|
89 | 'unix_time',
|
90 | 'moment',
|
91 | 'date',
|
92 | 'time',
|
93 | 'century',
|
94 | 'am_pm',
|
95 | 'day_of_year',
|
96 | 'day_of_month',
|
97 | 'day_of_week',
|
98 | 'month_number',
|
99 | 'month_name',
|
100 | 'year',
|
101 | 'timezone'
|
102 | ];
|
103 |
|
104 | var payment = [
|
105 | 'card_type',
|
106 | 'card_number',
|
107 | 'card_exp',
|
108 | 'card_data'
|
109 | ];
|
110 |
|
111 | var misc = [
|
112 | 'country_code',
|
113 | 'language_code',
|
114 | 'locale',
|
115 | 'mime_type',
|
116 | 'file_extension'
|
117 | ];
|
118 |
|
119 | var color = [
|
120 | 'color_name',
|
121 | 'safe_color_name',
|
122 | 'rgb_hex',
|
123 | 'rgb_array'
|
124 | ];
|
125 |
|
126 | var providers = [
|
127 | address,
|
128 | text,
|
129 | internet,
|
130 | person,
|
131 | number,
|
132 | date,
|
133 | payment,
|
134 | misc,
|
135 | color
|
136 | ];
|
137 |
|
138 | describe('Embedded generators', function() {
|
139 | describe('Address address provider', function() {
|
140 | address.forEach(test);
|
141 | });
|
142 |
|
143 | describe('Text provider', function() {
|
144 | text.forEach(test);
|
145 | });
|
146 |
|
147 | describe('Internet provider', function() {
|
148 | internet.forEach(test);
|
149 | });
|
150 |
|
151 | describe('Person provider', function() {
|
152 | person.forEach(test);
|
153 | });
|
154 |
|
155 | describe('Number generator', function() {
|
156 | number.forEach(test);
|
157 | });
|
158 |
|
159 | describe('Date provider', function() {
|
160 | date.forEach(test);
|
161 | });
|
162 |
|
163 | describe('Payment provider', function() {
|
164 | payment.forEach(test);
|
165 | });
|
166 |
|
167 | describe('Misc provider', function() {
|
168 | misc.forEach(test);
|
169 | });
|
170 |
|
171 | describe('Color provider', function() {
|
172 | color.forEach(test);
|
173 | });
|
174 | });
|
175 |
|
176 | describe('Casual helpers', function() {
|
177 | describe('define', function() {
|
178 | it('Should create new casual property if getter doesn\'t have arguments', function() {
|
179 | casual.define('wow', function() {
|
180 | return 'wow wow';
|
181 | });
|
182 |
|
183 | casual.wow.should.be.equal('wow wow');
|
184 | });
|
185 |
|
186 | it('Should create new casual method if getter does have arguments', function() {
|
187 | casual.define('x2', function(x) {
|
188 | x = x || 2;
|
189 | return x * 2;
|
190 | });
|
191 |
|
192 | casual.x2(3).should.be.equal(6);
|
193 | });
|
194 | });
|
195 |
|
196 | describe('random_element', function() {
|
197 | it('Should pick random element from array', function(done) {
|
198 | var array = [1,2,3,4,5,23,6,7,8,95,43];
|
199 | var pivot = casual.random_element(array);
|
200 |
|
201 | for (var i = 0; i < max_times; ++i) {
|
202 | if (pivot != casual.random_element(array)) {
|
203 | return done();
|
204 | }
|
205 | }
|
206 |
|
207 | done('Fail');
|
208 | });
|
209 | });
|
210 |
|
211 | describe('random_key', function() {
|
212 | it('Should return random object key', function(done) {
|
213 | var key = casual.random_key({ a: 1, b: 2});
|
214 | if (key === 'a' || key === 'b') {
|
215 | return done();
|
216 | }
|
217 |
|
218 | done('Fail');
|
219 | });
|
220 | });
|
221 |
|
222 | describe('random_value', function() {
|
223 | it('Should return random object value', function(done) {
|
224 | var key = casual.random_value({ a: 1, b: 2});
|
225 | if (key === 1 || key === 2) {
|
226 | return done();
|
227 | }
|
228 |
|
229 | done('Fail');
|
230 | });
|
231 | });
|
232 |
|
233 | describe('extend', function() {
|
234 | it('Should extend object', function() {
|
235 | var result = casual.extend({}, {a: 42});
|
236 | result.should.have.property('a', 42);
|
237 | });
|
238 | });
|
239 |
|
240 | describe('numerify', function() {
|
241 | it('Should replace every # in string with digit', function() {
|
242 | var format = '####';
|
243 | var numbers = casual.numerify(format);
|
244 | parseInt(numbers).should.be.within(0, 9999);
|
245 | });
|
246 | });
|
247 |
|
248 | describe('letterify',function(){
|
249 | it('should replace every X in a string with a letter',function() {
|
250 | var re = /^[a-zA-Z]+$/;
|
251 |
|
252 | var result = casual.letterify('XXXX');
|
253 | re.test(result).should.be.true;
|
254 |
|
255 | result = casual.letterify('1234');
|
256 | re.test(result).should.be.false;
|
257 |
|
258 | result = casual.letterify('X123X');
|
259 | re.test(result).should.be.false;
|
260 | });
|
261 | })
|
262 |
|
263 | describe('register_provider', function() {
|
264 | it('Should define generators', function() {
|
265 | casual.register_provider({
|
266 | really_custom_generator: function() { return 'custom' }
|
267 | });
|
268 |
|
269 | casual.really_custom_generator.should.be.equal('custom');
|
270 | });
|
271 | });
|
272 |
|
273 | describe('join', function() {
|
274 | it('Should join strings with spaces like a boss', function() {
|
275 | casual.join('wow', 'such', 'sentence').should.be.equal('wow such sentence');
|
276 | })
|
277 | });
|
278 | });
|
279 |
|
280 | describe('Generator seeding', function() {
|
281 | var create_data_set = function() {
|
282 | return [
|
283 | casual.description,
|
284 | casual.text,
|
285 | casual.random,
|
286 | casual.integer,
|
287 | casual.card_number,
|
288 | casual.phone,
|
289 | casual.unix_time,
|
290 | casual.day_of_year,
|
291 | casual.date,
|
292 | casual.time
|
293 | ];
|
294 | };
|
295 |
|
296 | it('Should repeat random sequence on same seed', function() {
|
297 | var seed = 123;
|
298 |
|
299 | casual.seed(seed);
|
300 | var set1 = create_data_set();
|
301 |
|
302 | casual.seed(seed);
|
303 | var set2 = create_data_set();
|
304 |
|
305 | for (var i in set1) {
|
306 | set1[i].should.be.equal(set2[i]);
|
307 | }
|
308 | })
|
309 | });
|
310 |
|
311 | var verify_generator = function(generator) {
|
312 | var function_name = '_' + generator;
|
313 | casual[function_name].should.be.a.Function;
|
314 |
|
315 | var seed = 123;
|
316 |
|
317 | casual.seed(seed);
|
318 | var val = casual[generator];
|
319 | val = typeof val === 'function' ? val() : val;
|
320 |
|
321 | casual.seed(seed);
|
322 | var function_val = casual[function_name]();
|
323 | val.should.be.eql(function_val);
|
324 | };
|
325 |
|
326 | var check_getters = function(generators) {
|
327 | generators.forEach(verify_generator);
|
328 | };
|
329 |
|
330 | describe('Pure getters', function() {
|
331 | it('Should have getter function at _{name}', function() {
|
332 | providers.forEach(check_getters);
|
333 | });
|
334 |
|
335 | it('Should return only funtions interface', function() {
|
336 | var functions = casual.functions();
|
337 | for (var name in functions) {
|
338 | if (name === 'seed' || casual.locales.indexOf(name) !== -1) {
|
339 | continue;
|
340 | }
|
341 |
|
342 | var generator = functions[name];
|
343 | var seed = 546;
|
344 |
|
345 | casual.seed(seed);
|
346 | var first = casual['_' + name]();
|
347 |
|
348 | casual.seed(seed);
|
349 | var second = generator();
|
350 |
|
351 | first.should.be.eql(second);
|
352 | }
|
353 | });
|
354 | });
|
355 | });
|