Passed
Push — master ( 9d00a6...715726 )
by Dmytro
01:53
created

functions.test.js ➔ increment   A

Complexity

Conditions 5

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 2
dl 0
loc 3
rs 9.3333
c 0
b 0
f 0
1
import { assert } from 'chai';
2
import { Decorator } from '../entry';
3
import Logger from '../Logger';
4
import { verifyStdout } from '../utils';
5
6
suite('Functions');
7
8
test('Decorate a function', function () {
9
    const logger = new Logger();
10
    const decorator = new Decorator({ logger });
11
    const decorated = decorator()(function (a) {
12
        return a + 1;
13
    });
14
15
    const res = decorated(5);
16
17
    assert.equal(res, 6);
18
    verifyStdout(logger, { params: '[ 5 ]', result: '6' });
19
});
20
21
test('Decorate a named function', function () {
22
    const logger = new Logger();
23
    const decorator = new Decorator({ logger });
24
    const decorated = decorator()(function sum(a, b) {
25
        return a + b;
26
    });
27
28
    const res = decorated(5, 8);
29
30
    assert.equal(res, 13);
31
    verifyStdout(logger, { method: 'sum', params: '[ 5, 8 ]', result: '13' });
32
});
33
34
35
test('Decorate async function', async function () {
36
    const logger = new Logger();
37
    const decorator = new Decorator({ logger });
38
    const decorated = decorator()(async function double(a) {
39
        return new Promise((res) => {
40
            setTimeout(() => {
41
                return res(a * 2);
42
            }, 50);
43
        });
44
    });
45
46
    const res = await decorated(5);
47
48
    assert.equal(res, 10);
49
    verifyStdout(logger, { method: 'double', params: '[ 5 ]', result: '10' });
50
});
51
52
53
test('Decorate function, returning a promise', async function () {
54
    const logger = new Logger();
55
    const decorator = new Decorator({ logger });
56
    const decorated = decorator()(function (a) {
57
        return new Promise((res) => {
58
            setTimeout(() => {
59
                return res(a * 3);
60
            }, 50);
61
        });
62
    });
63
64
    const res = await decorated(5);
65
66
    assert.equal(res, 15);
67
    verifyStdout(logger, { params: '[ 5 ]', result: '15' });
68
});
69
70
function increment(a) {
71
    return this.base + a;
72
}
73
74
const contextSanitizer = data => data.base;
75
76
test('Function context', async function () {
77
    const logger = new Logger();
78
    const decorator = new Decorator({ logger });
79
80
81
    const context = { base: 10, _secret: 'wHHXHkd8n' };
82
    const decorated = decorator({ contextSanitizer })(increment).bind(context);
83
    const result = decorated(5);
84
85
    assert.equal(result, 15);
86
    verifyStdout(logger, { params: '[ 5 ]', result: '15', context: 10 });
87
});
88