woonplan-packages-redishelper 2.1.1 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tsc/__tests__/Broker.test.d.ts +1 -0
- package/dist/tsc/__tests__/Broker.test.js +172 -0
- package/dist/tsc/__tests__/Broker.test.js.map +1 -0
- package/dist/tsc/__tests__/Listener.test.d.ts +1 -0
- package/dist/tsc/__tests__/Listener.test.js +58 -0
- package/dist/tsc/__tests__/Listener.test.js.map +1 -0
- package/dist/tsc/types.d.ts +54 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const Broker_1 = tslib_1.__importDefault(require("../classes/Broker"));
|
|
5
|
+
const Listener_1 = tslib_1.__importDefault(require("../classes/Listener"));
|
|
6
|
+
const utils_1 = require("../services/utils");
|
|
7
|
+
const ioredis_mock_1 = tslib_1.__importDefault(require("ioredis-mock"));
|
|
8
|
+
jest.mock('ioredis', () => require("ioredis-mock"));
|
|
9
|
+
jest.mock('../classes/Listener');
|
|
10
|
+
const cb = () => { };
|
|
11
|
+
const rollbarConfig = {
|
|
12
|
+
environment: '',
|
|
13
|
+
accessToken: ''
|
|
14
|
+
};
|
|
15
|
+
const redisConfig = {
|
|
16
|
+
REDISURL: '',
|
|
17
|
+
REDISPW: ''
|
|
18
|
+
};
|
|
19
|
+
const service = "testservice", consumer = "testconsumer";
|
|
20
|
+
describe("addListener", () => {
|
|
21
|
+
afterEach(() => jest.clearAllMocks());
|
|
22
|
+
it("should create a Listener class", () => {
|
|
23
|
+
new Broker_1.default(redisConfig, rollbarConfig, service, consumer).addListener('', cb);
|
|
24
|
+
expect(Listener_1.default).toHaveBeenCalled();
|
|
25
|
+
});
|
|
26
|
+
it("should be chainable", () => {
|
|
27
|
+
new Broker_1.default(redisConfig, rollbarConfig, service, consumer).addListener('', cb).addListener('', cb).addListener('', cb);
|
|
28
|
+
expect(Listener_1.default).toHaveBeenCalledTimes(3);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe("sanitize", () => {
|
|
32
|
+
new Broker_1.default(redisConfig, rollbarConfig, service, consumer);
|
|
33
|
+
it("should return a json map if a map is given", () => {
|
|
34
|
+
expect((0, utils_1.sanitizeValue)(new Map())).toStrictEqual((0, utils_1.stringifyMap)(new Map()));
|
|
35
|
+
});
|
|
36
|
+
it("should return a number if a number is given", () => {
|
|
37
|
+
expect((0, utils_1.sanitizeValue)(1)).toStrictEqual(1);
|
|
38
|
+
});
|
|
39
|
+
it("should return a string if a string is given", () => {
|
|
40
|
+
expect((0, utils_1.sanitizeValue)('foo')).toStrictEqual('foo');
|
|
41
|
+
});
|
|
42
|
+
it("should return a JSON array if an array is given", () => {
|
|
43
|
+
expect((0, utils_1.sanitizeValue)(['foo'])).toStrictEqual(JSON.stringify(['foo']));
|
|
44
|
+
});
|
|
45
|
+
it("should return a JSON object if an object is given", () => {
|
|
46
|
+
expect((0, utils_1.sanitizeValue)({ 'foo': 'bar' })).toStrictEqual(JSON.stringify({ 'foo': 'bar' }));
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
const responses = [['foo', [['bar', ['id', 'baz']], ['bar', ['id', 'baz1']], ['bar', ['id', 'baz2']]]]];
|
|
50
|
+
describe("decyperResponse", () => {
|
|
51
|
+
const broker = new Broker_1.default(redisConfig, rollbarConfig, service, consumer);
|
|
52
|
+
it("should return a json map if a map is given", () => {
|
|
53
|
+
expect(broker.decypherResponse(...responses)).toStrictEqual([
|
|
54
|
+
{
|
|
55
|
+
stream: 'foo',
|
|
56
|
+
messages: [
|
|
57
|
+
{
|
|
58
|
+
id: 'bar',
|
|
59
|
+
parameters: {
|
|
60
|
+
id: 'baz'
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
id: 'bar',
|
|
65
|
+
parameters: {
|
|
66
|
+
id: 'baz1'
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: 'bar',
|
|
71
|
+
parameters: {
|
|
72
|
+
id: 'baz2'
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
]);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe("createRedisMessage", () => {
|
|
81
|
+
new Broker_1.default(redisConfig, rollbarConfig, service, consumer);
|
|
82
|
+
it("should create a redis message array from an object ", () => {
|
|
83
|
+
expect((0, utils_1.createRedisMessage)({
|
|
84
|
+
foo: 'bar',
|
|
85
|
+
bar: ['baz'],
|
|
86
|
+
hello: new Map([['world', 'foo']])
|
|
87
|
+
})).toStrictEqual(['foo', 'bar', 'bar', JSON.stringify(['baz']), 'hello', (0, utils_1.stringifyMap)(new Map([['world', 'foo']]))]);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
jest.setTimeout(2500);
|
|
91
|
+
describe("getRequest", () => {
|
|
92
|
+
it("should add a subscription", async () => {
|
|
93
|
+
const broker = new Broker_1.default(redisConfig, rollbarConfig, service, consumer);
|
|
94
|
+
broker.getRequest('foo', 'bar', {});
|
|
95
|
+
const mockresult = new ioredis_mock_1.default();
|
|
96
|
+
mockresult.publish(broker.subscriptions[0], 'baz');
|
|
97
|
+
expect(broker.subscriptions.length > 0).toBe(true);
|
|
98
|
+
});
|
|
99
|
+
xit("should return a response", async () => {
|
|
100
|
+
const broker = new Broker_1.default(redisConfig, rollbarConfig, service, consumer);
|
|
101
|
+
const result = broker.getRequest('foo', 'bar', {});
|
|
102
|
+
const mockresult = new ioredis_mock_1.default();
|
|
103
|
+
mockresult.publish(broker.subscriptions[0], 'baz');
|
|
104
|
+
expect(await result).toStrictEqual('baz');
|
|
105
|
+
});
|
|
106
|
+
it("should return a timeout and null if no response is given within timeout", async () => {
|
|
107
|
+
const broker = new Broker_1.default(redisConfig, rollbarConfig, service, consumer);
|
|
108
|
+
const result = broker.getRequest('foo', 'bar', {});
|
|
109
|
+
expect(await result).toStrictEqual(null);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
// Unable to test this untill ioredis-mock has a xreadgroup
|
|
113
|
+
describe("requester", () => {
|
|
114
|
+
it("should send a request and be able to receive", async () => {
|
|
115
|
+
const receiver = new Broker_1.default(redisConfig, rollbarConfig, 'foo', consumer);
|
|
116
|
+
const requestEndpoint = jest.fn(() => {
|
|
117
|
+
console.log('requestendpoint hit');
|
|
118
|
+
return 'baz';
|
|
119
|
+
});
|
|
120
|
+
receiver.setRequestEndpoint(requestEndpoint);
|
|
121
|
+
const requester = new Broker_1.default(redisConfig, rollbarConfig, 'bar', consumer);
|
|
122
|
+
requester.getRequest('foo', 'key', {})
|
|
123
|
+
.then(r => expect(r).toStrictEqual('baz'));
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
describe("getRequest", () => {
|
|
127
|
+
afterEach(() => jest.clearAllMocks());
|
|
128
|
+
it("should subscribe to a channel", async () => {
|
|
129
|
+
const spy = jest.spyOn(Broker_1.default.prototype, 'subscribe').mockResolvedValueOnce(null);
|
|
130
|
+
const broker = new Broker_1.default(redisConfig, rollbarConfig, 'foo', consumer);
|
|
131
|
+
jest.spyOn(Broker_1.default.prototype, 'requestMessageResponse');
|
|
132
|
+
broker.getRequest('foo', 'bar', {});
|
|
133
|
+
expect(spy).toBeCalled();
|
|
134
|
+
});
|
|
135
|
+
it("should setup a message response", async () => {
|
|
136
|
+
jest.spyOn(Broker_1.default.prototype, 'subscribe').mockResolvedValueOnce(null);
|
|
137
|
+
jest.spyOn(Broker_1.default.prototype, 'requestMessageResponse');
|
|
138
|
+
const broker = new Broker_1.default(redisConfig, rollbarConfig, 'foo', consumer);
|
|
139
|
+
broker.getRequest('foo', 'bar', {})
|
|
140
|
+
.then(() => expect(broker.requestMessageResponse).toBeCalled());
|
|
141
|
+
});
|
|
142
|
+
it("should setup a timeout", async () => {
|
|
143
|
+
jest.spyOn(Broker_1.default.prototype, 'subscribe').mockResolvedValueOnce(null);
|
|
144
|
+
jest.spyOn(Broker_1.default.prototype, 'requestMessageResponse');
|
|
145
|
+
jest.spyOn(Broker_1.default.prototype, 'setupTimeout');
|
|
146
|
+
const broker = new Broker_1.default(redisConfig, rollbarConfig, 'foo', consumer);
|
|
147
|
+
broker.getRequest('foo', 'bar', {})
|
|
148
|
+
.then(() => expect(broker.setupTimeout).toBeCalled());
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
const entries = [['bar', ['id', 'baz']], ['bar', ['id', 'baz1']], ['bar', ['id', 'baz2']]];
|
|
152
|
+
describe("filterStream", () => {
|
|
153
|
+
it("should filter the stream and only give back the messages with the request parameters", async () => {
|
|
154
|
+
jest.spyOn(Broker_1.default.prototype, 'getStreamInfo').mockResolvedValue([0, 1, 2, 3, 4, 5, 6, 7, 'entries', entries]);
|
|
155
|
+
const broker = new Broker_1.default(redisConfig, rollbarConfig, 'foo', consumer);
|
|
156
|
+
expect(await broker.filterStream('foo', 'id', 'baz')).toStrictEqual([{
|
|
157
|
+
id: 'bar',
|
|
158
|
+
parameters: {
|
|
159
|
+
id: 'baz'
|
|
160
|
+
}
|
|
161
|
+
}]);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
describe("addListListener", () => {
|
|
165
|
+
const broker = new Broker_1.default(redisConfig, rollbarConfig, 'foo', consumer);
|
|
166
|
+
const listcb = (id) => {
|
|
167
|
+
console.log(id);
|
|
168
|
+
};
|
|
169
|
+
const messagecb = (message) => listcb(message.id);
|
|
170
|
+
broker.addListListener('measuredataschanged', messagecb);
|
|
171
|
+
});
|
|
172
|
+
//# sourceMappingURL=Broker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Broker.test.js","sourceRoot":"","sources":["../../../src/__tests__/Broker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const Broker_1 = tslib_1.__importDefault(require("../classes/Broker"));
|
|
5
|
+
const cb = jest.fn();
|
|
6
|
+
const rollbarConfig = {
|
|
7
|
+
environment: '',
|
|
8
|
+
accessToken: ''
|
|
9
|
+
};
|
|
10
|
+
const redisConfig = {
|
|
11
|
+
REDISURL: '',
|
|
12
|
+
REDISPW: ''
|
|
13
|
+
};
|
|
14
|
+
const responses = [['foo', [['bar', ['id', 'baz']]]]];
|
|
15
|
+
jest.mock('ioredis', () => jest.fn().mockImplementation(() => {
|
|
16
|
+
return {
|
|
17
|
+
xread: jest.fn((_a, _b, _c, _d, e) => {
|
|
18
|
+
if (e == 'bar')
|
|
19
|
+
return null;
|
|
20
|
+
return responses;
|
|
21
|
+
}),
|
|
22
|
+
xreadgroup: jest.fn(() => {
|
|
23
|
+
return null;
|
|
24
|
+
}),
|
|
25
|
+
on: jest.fn()
|
|
26
|
+
};
|
|
27
|
+
}));
|
|
28
|
+
describe("listenToStream", () => {
|
|
29
|
+
afterEach(() => jest.clearAllMocks());
|
|
30
|
+
it("should call xreadgroup if a groupname is given", async () => {
|
|
31
|
+
const broker = new Broker_1.default(redisConfig, rollbarConfig, 'test', 'test').addListener('stream', cb, 'groupname');
|
|
32
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
33
|
+
expect(broker.listeners.get('stream')?.client.xreadgroup).toHaveBeenCalled();
|
|
34
|
+
expect(broker.listeners.get('stream')?.client.xread).not.toHaveBeenCalled();
|
|
35
|
+
});
|
|
36
|
+
it("should call xread if a groupname is not given", async () => {
|
|
37
|
+
const broker = new Broker_1.default(redisConfig, rollbarConfig, 'test', 'test').addListener('stream', cb);
|
|
38
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
39
|
+
expect(broker.listeners.get('stream')?.client.xreadgroup).not.toHaveBeenCalled();
|
|
40
|
+
expect(broker.listeners.get('stream')?.client.xread).toHaveBeenCalled();
|
|
41
|
+
});
|
|
42
|
+
it("should call the callback if a message comes in from the stream ", async () => {
|
|
43
|
+
const b = new Broker_1.default(redisConfig, rollbarConfig, 'test', 'test').addListener('bar', cb);
|
|
44
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
45
|
+
expect(b.listeners.has('bar')).toBeTruthy();
|
|
46
|
+
expect(b.listeners.get('bar')?.callback).toBe(cb);
|
|
47
|
+
});
|
|
48
|
+
it("should report an error", async () => {
|
|
49
|
+
const errormock = jest.fn(() => {
|
|
50
|
+
throw new Error('foo');
|
|
51
|
+
});
|
|
52
|
+
const spy = jest.spyOn(Broker_1.default.prototype, 'throwError');
|
|
53
|
+
new Broker_1.default(redisConfig, rollbarConfig, 'test', 'test').addListener('stream', errormock);
|
|
54
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
55
|
+
expect(spy).toHaveBeenCalled();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=Listener.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Listener.test.js","sourceRoot":"","sources":["../../../src/__tests__/Listener.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
|
|
2
|
+
import { Broker } from "./main";
|
|
3
|
+
interface JsonStringifiedMap{
|
|
4
|
+
dataType : 'Map',
|
|
5
|
+
value : any[]
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface RedisMessage{
|
|
9
|
+
[index: string]: any;
|
|
10
|
+
}
|
|
11
|
+
interface Struct{
|
|
12
|
+
[index: string]: any;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface RedisConfig{
|
|
16
|
+
REDISURL: string | number | undefined
|
|
17
|
+
REDISPW: string | undefined
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface RedisStreamEntry{
|
|
21
|
+
id : string
|
|
22
|
+
message:RedisMessage
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
type StreamMessage = [
|
|
26
|
+
string, StreamMessageParameters
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
type StreamMessageParameters = string[]
|
|
30
|
+
type StreamResponse = [
|
|
31
|
+
string, StreamMessage[]
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
interface DecypheredParameters{
|
|
35
|
+
[index:string] : string | number
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface DecypheredMessage{
|
|
39
|
+
id : string
|
|
40
|
+
parameters : DecypheredParameters
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
interface DecypheredResponse{
|
|
44
|
+
stream : string,
|
|
45
|
+
messages : DecypheredMessage[]
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
interface RollbarConfig{
|
|
49
|
+
accessToken : string
|
|
50
|
+
environment : string
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
export { RollbarConfig,DecypheredResponse,DecypheredMessage, DecypheredParameters, StreamMessage, StreamResponse, Struct, JsonStringifiedMap, RedisConfig, Broker }
|