UNPKG

6.81 kBJavaScriptView Raw
1var casual = require('../');
2
3describe('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});