This repository has been archived by the owner on Oct 2, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathrequestReply.js
85 lines (80 loc) · 3.93 KB
/
requestReply.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
import {generateExample} from '@asyncapi/generator-filters';
import { pascalCase, getMessageType} from '../../utils/index';
import {getReceivedVariableDeclaration, getExampleParameters, getFunctionParameters, getSetReceivedParameters, getVerifyExpectedParameters, getCallbackParameters} from './general';
// eslint-disable-next-line no-unused-vars
import { Message, ChannelParameter, } from '@asyncapi/parser';
/**
* Generate test code where the client requests and test client replies
*
* @param {string} channelName
* @param {Message} replyMessage
* @param {Message} receiveMessage
* @param {Object.<string, ChannelParameter>} channelParameters
* @returns
*/
export function request(channelName, replyMessage, receiveMessage, channelParameters) {
return requestReply(channelName, replyMessage, receiveMessage, channelParameters, true);
}
/**
* Generate test code where the client replies and test client requests
*
* @param {string} channelName
* @param {Message} replyMessage
* @param {Message} receiveMessage
* @param {Object.<string, ChannelParameter>} channelParameters
* @returns
*/
export function reply(channelName, replyMessage, receiveMessage, channelParameters) {
return requestReply(channelName, replyMessage, receiveMessage, channelParameters, false);
}
/**
* Request and reply test code
*
* @param {string} channelName
* @param {Message} replyMessage
* @param {Message} receiveMessage
* @param {Object.<string, ChannelParameter>} channelParameters
* @param {boolean} realClientRequests is it the real client which does the request
*/
function requestReply(channelName, replyMessage, receiveMessage, channelParameters, realClientRequests) {
const replyMessageExample = generateExample(replyMessage.payload().json());
const receiveMessageExample = generateExample(receiveMessage.payload().json());
const receivedVariableDeclaration = getReceivedVariableDeclaration(channelParameters);
const exampleParameters = getExampleParameters(channelParameters);
const functionParameters = getFunctionParameters(channelParameters);
const setReceivedVariable = getSetReceivedParameters(channelParameters);
const verifyExpectedParameters = getVerifyExpectedParameters(channelParameters);
const replyCallbackParameters = getCallbackParameters(channelParameters);
const requesterClientClass = realClientRequests ? 'Client' : 'TestClient';
const requesterClientMessageType = `${requesterClientClass}.${getMessageType(receiveMessage)}`;
const requesterClient = realClientRequests ? 'client' : 'testClient';
const replierClientClass = realClientRequests ? 'TestClient' : 'Client';
const replierClientMessageType = `${replierClientClass}.${getMessageType(replyMessage)}`;
const replierClient = realClientRequests ? 'testClient' : 'client';
return `
var receivedError: NatsTypescriptTemplateError | undefined = undefined;
var receivedMsg: ${requesterClientMessageType} | undefined = undefined;
${receivedVariableDeclaration}
var replyMessage: ${replierClientMessageType} = ${replierClientMessageType}.unmarshal(${replyMessageExample});
var receiveMessage: ${requesterClientMessageType} = ${requesterClientMessageType}.unmarshal(${receiveMessageExample});
${exampleParameters}
const replySubscription = await ${replierClient}.replyTo${pascalCase(channelName)}((err, msg
${replyCallbackParameters}) => {
return new Promise((resolve, reject) => {
receivedError = err;
receivedMsg = msg;
${setReceivedVariable}
resolve(replyMessage);
})},
(err) => {console.log(err)}
${functionParameters},
true
);
var reply = await ${requesterClient}.request${pascalCase(channelName)}(receiveMessage ${functionParameters});
expect(reply).to.be.deep.equal(replyMessage)
expect(receivedError).to.be.undefined;
expect(receivedMsg).to.not.be.undefined;
expect(receivedMsg!.marshal()).to.equal(receiveMessage.marshal());
${verifyExpectedParameters}
`;
}