Skip to content

Commit

Permalink
chore: complete Luis test (#12)
Browse files Browse the repository at this point in the history
  • Loading branch information
lorenzojlamas authored Oct 5, 2019
1 parent fca5d75 commit a08fb66
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 29 deletions.
10 changes: 5 additions & 5 deletions lib/engines/luis/luis.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ export class LuisRecognizer extends EngineRecognizer {
qs: queryString,
uri: `${this.baseUri}`,
};
try {
request(options, (error, response, body) => {
request(options, (error, response, body) => {
try {
if (error) {
reject(error);
} else {
Expand All @@ -53,10 +53,10 @@ export class LuisRecognizer extends EngineRecognizer {
reject(new Error( JSON.stringify({ response, body })));
}
}
} catch (error) {
reject(error);
}
});
} catch (error) {
reject(error);
}

}) ;
}
Expand Down
25 changes: 25 additions & 0 deletions lib/engines/luis/test/luis.constants.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,20 @@ export const CODE_504: string = '504';


export const APP_ID_CODE_200: string = 'APP_ID_200';
export const APP_ID_CODE_200_BAD: string = 'APP_ID_200_BAD';
export const APP_ID_CODE_204: string = 'APP_ID_204';
export const APP_ID_CODE_400: string = 'APP_ID_400';
export const APP_ID_CODE_403: string = 'APP_ID_403';
export const APP_ID_CODE_404: string = 'APP_ID_404';
export const APP_ID_CODE_500: string = 'APP_ID_500';
export const APP_ID_CODE_504: string = 'APP_ID_504';
export const APP_ID_CODE_ERROR: string = 'APP_ID_ERROR';

export const QUERY_200: string = 'QUERY_200';
export const QUERY_200_BAD: string = 'QUERY_200_BAD';
export const QUERY_204: string = 'QUERY_204';
export const QUERY_500: string = 'QUERY_500';
export const QUERY_ERROR: string = 'QUERY_ERROR';

export const INTENT_200 = {
intent: 'INTENT.200',
Expand Down Expand Up @@ -86,6 +90,10 @@ export const LUIS_URI_PARTS_200: LuisUriParts = {
host: BASE_PATH,
appId: APP_ID_CODE_200,
}
export const LUIS_URI_PARTS_200_BAD: LuisUriParts = {
host: BASE_PATH,
appId: APP_ID_CODE_200_BAD,
}

export const LUIS_URI_PARTS_204: LuisUriParts = {
host: BASE_PATH,
Expand All @@ -95,13 +103,29 @@ export const LUIS_URI_PARTS_500: LuisUriParts = {
host: BASE_PATH,
appId: APP_ID_CODE_500,
}
export const LUIS_URI_PARTS_ERROR: LuisUriParts = {
host: BASE_PATH,
appId: APP_ID_CODE_ERROR,
}

export const LUIS_QUERY_PARAMS_200: LuisQueryParams = {
q: QUERY_200,
'subscription-key': SUBSCRIPTION_KEY,
timezoneOffset: 0,
verbose: true,
}
export const LUIS_QUERY_PARAMS_200_BAD: LuisQueryParams = {
q: QUERY_200_BAD,
'subscription-key': SUBSCRIPTION_KEY,
timezoneOffset: 0,
verbose: true,
}
export const LUIS_QUERY_PARAMS_ERROR: LuisQueryParams = {
q: QUERY_ERROR,
'subscription-key': SUBSCRIPTION_KEY,
timezoneOffset: 0,
verbose: true,
}
export const LUIS_QUERY_PARAMS_204: LuisQueryParams = {
q: QUERY_200,
'subscription-key': SUBSCRIPTION_KEY,
Expand All @@ -121,6 +145,7 @@ export const LUIS_RESPONSE_200 = {
entities: [],
sentimentAnalysis: SENTIMENT
}
export const LUIS_RESPONSE_ERROR = 'some error in request'
export const LUIS_RESPONSE_204 = {
query: QUERY_200,
topScoringIntent: INTENT_204,
Expand Down
53 changes: 34 additions & 19 deletions lib/engines/luis/test/luis.mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,37 @@
import nock = require('nock');

import * as Constants from './luis.constants.spec';
import { LuisUriParts } from './luis.constants.spec';
import { LuisUriParts, LUIS_URI_PARTS_ERROR } from './luis.constants.spec';

interface NockGetReplyParams {
uri: string;
queryParams: any;
code: number;
code?: number;
body?: any;
headers?: nock.RequestHeaderMatcher;
replyWithError?: string;
}


function AddGetReplyToNock(nock: nock.Scope, nockGetParams: NockGetReplyParams) {
if (nockGetParams.queryParams !== undefined) {
return nock.get(nockGetParams.uri)
.query(true)
if (nockGetParams.replyWithError){
return nock.get(nockGetParams.uri)
.query(true)
.replyWithError(nockGetParams.replyWithError);
} else {
if (nockGetParams.queryParams !== undefined) {
return nock.get(nockGetParams.uri)
.query(true)
.reply(nockGetParams.code,
nockGetParams.body);
} else {
return nock.get(nockGetParams.uri)
.reply(nockGetParams.code,
nockGetParams.body);

// .query(nockGetParams.queryParams)
.reply(nockGetParams.code,
nockGetParams.body);
} else {
return nock.get(nockGetParams.uri)
.reply(nockGetParams.code,
nockGetParams.body);

}
}
}
}

function luisQueryUrl(params: LuisUriParts): string {
return `/luis/v2.0/apps/${params.appId}`;
Expand All @@ -41,6 +46,19 @@ var luisCases: NockGetReplyParams[] = [
body: Constants.LUIS_RESPONSE_200,
headers: undefined
},
{
uri: luisQueryUrl(Constants.LUIS_URI_PARTS_200_BAD),
queryParams: Constants.LUIS_QUERY_PARAMS_200_BAD,
code: 200,
body: {},
headers: undefined
},
{
uri: luisQueryUrl(Constants.LUIS_URI_PARTS_ERROR),
queryParams: Constants.LUIS_QUERY_PARAMS_ERROR,
replyWithError: Constants.LUIS_RESPONSE_ERROR,
headers: undefined
},
{
uri: luisQueryUrl(Constants.LUIS_URI_PARTS_204),
queryParams: Constants.LUIS_QUERY_PARAMS_204,
Expand All @@ -61,11 +79,8 @@ const luisMock = function(basePath: string) {

var cases: NockGetReplyParams[] = luisCases;

cases.reduce((scope, current) => AddGetReplyToNock(scope, current), nock(basePath));

/*for (let mockUrl of nock.pendingMocks()) {
console.error('url: %j', mockUrl);
}*/
const luisMockOut = cases.reduce((scope, current) => AddGetReplyToNock(scope, current), nock(basePath));
return luisMockOut;

};

Expand Down
47 changes: 42 additions & 5 deletions lib/engines/luis/test/luis.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,27 @@ describe('LuisApp', () => {
expect(sut).to.be.a.instanceOf(LuisRecognizer);
});

it('request LUIS with utterace with result in request error', async () => {

const app: IRecognizerParams = {
id: 'ID',
type: 'luis',
params: {
key: Constants.SUBSCRIPTION_KEY,
appHost: Constants.BASE_PATH,
appId: Constants.APP_ID_CODE_ERROR
}
}

const sut: LuisRecognizer = new LuisRecognizer(app);
const result = await sut.recognice(Constants.QUERY_ERROR).catch((error:Error) => {
expect(error).to.be.instanceOf(Error);
expect(error.message).to.be.equal('some error in request');
}
);
expect(result).to.be.undefined;
});

it('request LUIS with utterace with result code 200', async function() {

const app: IRecognizerParams = {
Expand All @@ -45,6 +66,27 @@ describe('LuisApp', () => {

});

it('request LUIS with utterace with bad result code 200', async function() {

const app: IRecognizerParams = {
id: 'ID',
type: 'luis',
params: {
key: Constants.SUBSCRIPTION_KEY,
appHost: Constants.BASE_PATH,
appId: Constants.APP_ID_CODE_200_BAD
}
}

const sut: LuisRecognizer = new LuisRecognizer(app);
const result = await sut.recognice(Constants.QUERY_200_BAD).catch((error: Error) => {
expect(error).to.be.instanceof(Error);
expect(error.message).to.be.equal('Cannot read property \'intent\' of undefined');
});
expect(result).to.be.undefined;

});

it('request LUIS with utterace with result code 204', async function() {

const app: IRecognizerParams = {
Expand Down Expand Up @@ -86,11 +128,6 @@ describe('LuisApp', () => {
expect(error).is.instanceOf(Error);
expect(error.message).to.be.equal('{"response":{"statusCode":500,"body":"{}","headers":{"content-type":"application/json"},"request":{"uri":{"protocol":"http:","slashes":true,"auth":null,"host":"westus.api.cognitive.microsoft.com","port":null,"hostname":"westus.api.cognitive.microsoft.com","hash":null,"search":"?q=QUERY_500&subscription-key=SUBS_KEY&timezoneOffset=0&verbose=true","query":"q=QUERY_500&subscription-key=SUBS_KEY&timezoneOffset=0&verbose=true","pathname":"/luis/v2.0/apps/APP_ID_500","path":"/luis/v2.0/apps/APP_ID_500?q=QUERY_500&subscription-key=SUBS_KEY&timezoneOffset=0&verbose=true","href":"http://westus.api.cognitive.microsoft.com/luis/v2.0/apps/APP_ID_500?q=QUERY_500&subscription-key=SUBS_KEY&timezoneOffset=0&verbose=true"},"method":"GET","headers":{}}},"body":"{}"}');
}
// expect(result.intent).is.deep.equal({
// name: "INTENT.204",
// score: 0.2
// });
// expect(result.entities.length).is.equal(0);

});

Expand Down

0 comments on commit a08fb66

Please sign in to comment.