-
Notifications
You must be signed in to change notification settings - Fork 136
/
index.node.js
107 lines (97 loc) · 2.71 KB
/
index.node.js
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/** Copyright (c) 2018 Uber Technologies, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/
import test from 'tape-cup';
import {getSimulator} from 'fusion-test-utils';
import App from 'fusion-core';
import {LoggerToken} from 'fusion-tokens';
import UniversalEvents, {
UniversalEventsToken,
} from 'fusion-plugin-universal-events';
import TransportStream from 'winston-transport';
import plugin from '../server.js';
import {UniversalLoggerConfigToken} from '../tokens';
type SupportedLevelsType =
| 'error'
| 'warn'
| 'info'
| 'verbose'
| 'debug'
| 'silly';
test('Server logger', async t => {
t.plan(4);
class Transport extends TransportStream {
name: string;
constructor() {
super();
this.name = 'test-transport';
}
log({level, message}: {level: SupportedLevelsType, message: string}): void {
t.equals(level, 'info', 'level is ok');
t.equals(message, 'test message', 'message is ok');
}
}
const app = new App('element', el => el);
app.register(UniversalEventsToken, UniversalEvents);
app.register(LoggerToken, plugin);
app.register(UniversalLoggerConfigToken, {transports: [new Transport()]});
app.middleware(
{events: UniversalEventsToken, logger: LoggerToken},
({events, logger}) => {
events.on('universal-log', ({args, level}) => {
t.equals(
args[0],
'test message',
'all logs are passed through event emitter'
);
});
t.ok(logger);
logger.info('test message');
return (ctx, next) => next();
}
);
getSimulator(app);
});
test('Server logger listening on events', async t => {
let called = false;
class Transport extends TransportStream {
name: string;
constructor() {
super();
this.name = 'test-transport';
}
log({
level,
message,
hello,
}: {
level: SupportedLevelsType,
message: string,
hello: string,
}) {
t.equals(level, 'info', 'level is ok');
t.equals(message, 'test', 'message is ok');
t.equals(message, 'test', 'message is ok');
t.equals(hello, 'world', 'meta is ok');
called = true;
}
}
const app = new App('element', el => el);
app.register(UniversalEventsToken, UniversalEvents);
app.register(LoggerToken, plugin);
app.register(UniversalLoggerConfigToken, {transports: [new Transport()]});
app.middleware({events: UniversalEventsToken}, ({events}) => {
events.emit('universal-log', {
level: 'info',
args: ['test', {hello: 'world'}],
});
return (ctx, next) => next();
});
getSimulator(app);
t.equals(called, true, 'called');
t.end();
});