botium-core 1.13.5 → 1.13.7
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/botium-cjs.js +24 -10
- package/dist/botium-cjs.js.map +1 -1
- package/dist/botium-es.js +24 -10
- package/dist/botium-es.js.map +1 -1
- package/package.json +1 -1
- package/src/helpers/RetryHelper.js +3 -2
- package/src/scripting/MatchFunctions.js +3 -1
- package/src/scripting/ScriptingProvider.js +14 -4
- package/src/scripting/logichook/LogicHookUtils.js +3 -3
- package/src/scripting/logichook/asserter/BotRepliesConsumedAsserter.js +1 -1
- package/src/scripting/logichook/asserter/BotRepliesUnconsumedCountAsserter.js +1 -1
- package/src/scripting/logichook/asserter/ButtonsAsserter.js +1 -1
- package/src/scripting/logichook/asserter/ButtonsCountAsserter.js +1 -1
- package/src/scripting/logichook/asserter/ButtonsCountRecAsserter.js +1 -1
- package/src/scripting/logichook/asserter/CardsAsserter.js +1 -1
- package/src/scripting/logichook/asserter/CardsCountAsserter.js +1 -1
- package/src/scripting/logichook/asserter/CardsCountRecAsserter.js +1 -1
- package/src/scripting/logichook/asserter/EntitiesAsserter.js +1 -1
- package/src/scripting/logichook/asserter/EntityContentAsserter.js +2 -2
- package/src/scripting/logichook/asserter/EntityValuesAsserter.js +1 -1
- package/src/scripting/logichook/asserter/FormsAsserter.js +1 -1
- package/src/scripting/logichook/asserter/IntentAsserter.js +3 -3
- package/src/scripting/logichook/asserter/IntentConfidenceAsserter.js +4 -4
- package/src/scripting/logichook/asserter/IntentUniqueAsserter.js +2 -2
- package/src/scripting/logichook/asserter/JsonPathAsserter.js +9 -8
- package/src/scripting/logichook/asserter/JsonPathCountAsserter.js +2 -2
- package/src/scripting/logichook/asserter/MediaAsserter.js +1 -1
- package/src/scripting/logichook/asserter/MediaCountAsserter.js +1 -1
- package/src/scripting/logichook/asserter/MediaCountRecAsserter.js +1 -1
- package/src/scripting/logichook/asserter/PauseAsserter.js +1 -1
- package/src/scripting/logichook/asserter/ResponseLengthAsserter.js +3 -2
- package/src/scripting/logichook/asserter/TextContainsAllAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextContainsAllICAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextContainsAnyAsserter.js +1 -0
- package/src/scripting/logichook/asserter/TextContainsAnyICAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextEqualsAnyAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextEqualsAnyICAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextRegexpAllAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextRegexpAllICAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextRegexpAnyAsserter.js +1 -0
- package/src/scripting/logichook/asserter/TextRegexpAnyICAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextWildcardAllAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextWildcardAllICAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextWildcardAnyAsserter.js +1 -0
- package/src/scripting/logichook/asserter/TextWildcardAnyICAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextWildcardExactAllAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextWildcardExactAllICAsserter.js +2 -1
- package/src/scripting/logichook/asserter/TextWildcardExactAnyAsserter.js +1 -0
- package/src/scripting/logichook/asserter/TextWildcardExactAnyICAsserter.js +2 -1
- package/src/scripting/logichook/asserter/WerAsserter.js +10 -8
- package/test/convo/transcript.spec.js +6 -6
- package/test/scripting/asserters/convos/{wer_threshold_nok.yml → wer_threshold_nok_float.yml} +0 -0
- package/test/scripting/asserters/convos/wer_threshold_nok_percentage.yml +7 -0
- package/test/scripting/asserters/convos/{wer_threshold_ok.yml → wer_threshold_ok_float.yml} +0 -0
- package/test/scripting/asserters/convos/wer_threshold_ok_percentage.yml +7 -0
- package/test/scripting/asserters/entityContentAsserter.spec.js +2 -7
- package/test/scripting/asserters/intentAsserter.spec.js +1 -1
- package/test/scripting/asserters/jsonpathAsserter.spec.js +8 -8
- package/test/scripting/asserters/werAsserter.spec.js +25 -5
- package/test/scripting/matching/matchingmode.spec.js +42 -2
- package/test/scripting/scriptingModificator.spec.js +1 -2
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
const BaseTextAsserter = require('./BaseTextAsserter')
|
|
2
2
|
const MatchFunctions = require('../../MatchFunctions')
|
|
3
3
|
|
|
4
|
-
module.exports = class
|
|
4
|
+
module.exports = class TextWildcardExactAllAsserter extends BaseTextAsserter {
|
|
5
5
|
constructor (context, caps = {}) {
|
|
6
6
|
super(context, caps, MatchFunctions.wildcardExact(false), 'all')
|
|
7
|
+
this.name = 'Text Wildcard Exact All Asserter'
|
|
7
8
|
}
|
|
8
9
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
const BaseTextAsserter = require('./BaseTextAsserter')
|
|
2
2
|
const MatchFunctions = require('../../MatchFunctions')
|
|
3
3
|
|
|
4
|
-
module.exports = class
|
|
4
|
+
module.exports = class TextWildcardExactAllICAsserter extends BaseTextAsserter {
|
|
5
5
|
constructor (context, caps = {}) {
|
|
6
6
|
super(context, caps, MatchFunctions.wildcardExact(true), 'all')
|
|
7
|
+
this.name = 'Text Wildcard Exact All (ignore) Asserter'
|
|
7
8
|
}
|
|
8
9
|
}
|
|
@@ -4,5 +4,6 @@ const MatchFunctions = require('../../MatchFunctions')
|
|
|
4
4
|
module.exports = class TextWildcardExactAnyAsserter extends BaseTextAsserter {
|
|
5
5
|
constructor (context, caps = {}) {
|
|
6
6
|
super(context, caps, MatchFunctions.wildcardExact(false), 'any')
|
|
7
|
+
this.name = 'Text Wildcard Exact Any Asserter'
|
|
7
8
|
}
|
|
8
9
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
const BaseTextAsserter = require('./BaseTextAsserter')
|
|
2
2
|
const MatchFunctions = require('../../MatchFunctions')
|
|
3
3
|
|
|
4
|
-
module.exports = class
|
|
4
|
+
module.exports = class TextWildcardExactAnyICAsserter extends BaseTextAsserter {
|
|
5
5
|
constructor (context, caps = {}) {
|
|
6
6
|
super(context, caps, MatchFunctions.wildcardExact(true), 'any')
|
|
7
|
+
this.name = 'Text Wildcard Exact Any (ignore case) Asserter'
|
|
7
8
|
}
|
|
8
9
|
}
|
|
@@ -6,12 +6,12 @@ module.exports = class WerAsserter {
|
|
|
6
6
|
constructor (context, caps = {}) {
|
|
7
7
|
this.context = context
|
|
8
8
|
this.caps = caps
|
|
9
|
-
this.name = '
|
|
9
|
+
this.name = 'Word Error Rate Asserter'
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
assertConvoStep ({ convo, convoStep, args, botMsg }) {
|
|
13
13
|
if (!args || args.length < 1) {
|
|
14
|
-
return Promise.reject(new BotiumError(`${convoStep.stepTag}:
|
|
14
|
+
return Promise.reject(new BotiumError(`${convoStep.stepTag}: ${this.name} - no argument given`,
|
|
15
15
|
{
|
|
16
16
|
type: 'asserter',
|
|
17
17
|
subtype: 'wrong parameters',
|
|
@@ -21,7 +21,7 @@ module.exports = class WerAsserter {
|
|
|
21
21
|
))
|
|
22
22
|
}
|
|
23
23
|
if (args.length > 2) {
|
|
24
|
-
return Promise.reject(new BotiumError(`${convoStep.stepTag}:
|
|
24
|
+
return Promise.reject(new BotiumError(`${convoStep.stepTag}: ${this.name} - too many arguments "${args}"`,
|
|
25
25
|
{
|
|
26
26
|
type: 'asserter',
|
|
27
27
|
subtype: 'wrong parameters',
|
|
@@ -32,12 +32,14 @@ module.exports = class WerAsserter {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
const utterance = args[0]
|
|
35
|
-
const threshold = args[1]
|
|
35
|
+
const threshold = ([',', '.'].find(p => `${args[1]}`.includes(p)) ? parseFloat(args[1]) : parseInt(args[1]) / 100).toFixed(2)
|
|
36
36
|
|
|
37
|
-
const wer = speechScorer.wordErrorRate(botMsg.messageText, utterance)
|
|
37
|
+
const wer = speechScorer.wordErrorRate(botMsg.messageText, utterance).toFixed(2)
|
|
38
38
|
if (wer > threshold) {
|
|
39
|
+
const _toPercent = (s) => `${(s * 100).toFixed(0)}%`
|
|
40
|
+
|
|
39
41
|
return Promise.reject(new BotiumError(
|
|
40
|
-
`${convoStep.stepTag}: Word
|
|
42
|
+
`${convoStep.stepTag}: Word Error Rate (${_toPercent(wer)}) higher than accepted (${_toPercent(threshold)})`,
|
|
41
43
|
{
|
|
42
44
|
type: 'asserter',
|
|
43
45
|
source: this.name,
|
|
@@ -47,8 +49,8 @@ module.exports = class WerAsserter {
|
|
|
47
49
|
}
|
|
48
50
|
},
|
|
49
51
|
cause: {
|
|
50
|
-
expected:
|
|
51
|
-
actual:
|
|
52
|
+
expected: `<=${_toPercent(threshold)}`,
|
|
53
|
+
actual: `${_toPercent(wer)}`
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
56
|
))
|
|
@@ -287,11 +287,11 @@ describe('convo.transcript', function () {
|
|
|
287
287
|
|
|
288
288
|
assert.equal(err.transcript.err.context.input.messageText, 'Hello')
|
|
289
289
|
assert.equal(err.transcript.err.context.errors[0].type, 'asserter')
|
|
290
|
-
assert.equal(err.transcript.err.context.errors[0].source, '
|
|
290
|
+
assert.equal(err.transcript.err.context.errors[0].source, 'Text Match Asserter')
|
|
291
291
|
assert.equal(err.transcript.err.context.errors[1].type, 'asserter')
|
|
292
|
-
assert.equal(err.transcript.err.context.errors[1].source, '
|
|
292
|
+
assert.equal(err.transcript.err.context.errors[1].source, 'Buttons Asserter')
|
|
293
293
|
assert.equal(err.transcript.err.context.errors[2].type, 'asserter')
|
|
294
|
-
assert.equal(err.transcript.err.context.errors[2].source, '
|
|
294
|
+
assert.equal(err.transcript.err.context.errors[2].source, 'Buttons Asserter')
|
|
295
295
|
}
|
|
296
296
|
})
|
|
297
297
|
it('should throw simple error with multiple asserting errors if its enabled and assertConvoEnd fail', async function () {
|
|
@@ -317,11 +317,11 @@ describe('convo.transcript', function () {
|
|
|
317
317
|
|
|
318
318
|
assert.equal(err.transcript.err.context.input.messageText, 'Hello')
|
|
319
319
|
assert.equal(err.transcript.err.context.errors[0].type, 'asserter')
|
|
320
|
-
assert.equal(err.transcript.err.context.errors[0].source, '
|
|
320
|
+
assert.equal(err.transcript.err.context.errors[0].source, 'Text Match Asserter')
|
|
321
321
|
assert.equal(err.transcript.err.context.errors[1].type, 'asserter')
|
|
322
|
-
assert.equal(err.transcript.err.context.errors[1].source, '
|
|
322
|
+
assert.equal(err.transcript.err.context.errors[1].source, 'Buttons Asserter')
|
|
323
323
|
assert.equal(err.transcript.err.context.errors[2].type, 'asserter')
|
|
324
|
-
assert.equal(err.transcript.err.context.errors[2].source, '
|
|
324
|
+
assert.equal(err.transcript.err.context.errors[2].source, 'Buttons Asserter')
|
|
325
325
|
assert.equal(err.transcript.err.context.errors[3].type, 'asserter')
|
|
326
326
|
assert.equal(err.transcript.err.context.errors[3].source, 'assertConvoEnd')
|
|
327
327
|
}
|
package/test/scripting/asserters/convos/{wer_threshold_nok.yml → wer_threshold_nok_float.yml}
RENAMED
|
File without changes
|
|
File without changes
|
|
@@ -20,10 +20,9 @@ describe('scripting.asserters.entityContentAsserter', function () {
|
|
|
20
20
|
})
|
|
21
21
|
assert.fail('should have failed')
|
|
22
22
|
} catch (err) {
|
|
23
|
-
assert.isTrue(err.message.indexOf('
|
|
23
|
+
assert.isTrue(err.message.indexOf('Missing argument') > 0)
|
|
24
24
|
assert.isNotNull(err.context)
|
|
25
25
|
assert.equal(err.context.type, 'asserter')
|
|
26
|
-
assert.equal(err.context.source, 'EntityContentAsserter')
|
|
27
26
|
}
|
|
28
27
|
})
|
|
29
28
|
|
|
@@ -36,10 +35,9 @@ describe('scripting.asserters.entityContentAsserter', function () {
|
|
|
36
35
|
})
|
|
37
36
|
assert.fail('should have failed')
|
|
38
37
|
} catch (err) {
|
|
39
|
-
assert.isTrue(err.message.indexOf('
|
|
38
|
+
assert.isTrue(err.message.indexOf('Missing argument') > 0)
|
|
40
39
|
assert.isNotNull(err.context)
|
|
41
40
|
assert.equal(err.context.type, 'asserter')
|
|
42
|
-
assert.equal(err.context.source, 'EntityContentAsserter')
|
|
43
41
|
}
|
|
44
42
|
})
|
|
45
43
|
|
|
@@ -55,7 +53,6 @@ describe('scripting.asserters.entityContentAsserter', function () {
|
|
|
55
53
|
assert.isTrue(err.message.indexOf('Expected entity "something" but found nothing') > 0)
|
|
56
54
|
assert.isNotNull(err.context)
|
|
57
55
|
assert.equal(err.context.type, 'asserter')
|
|
58
|
-
assert.equal(err.context.source, 'EntityContentAsserter')
|
|
59
56
|
}
|
|
60
57
|
})
|
|
61
58
|
|
|
@@ -88,7 +85,6 @@ describe('scripting.asserters.entityContentAsserter', function () {
|
|
|
88
85
|
assert.isTrue(err.message.indexOf('test: Missing entity content: [ \'something_value\' ] of entity "something"') >= 0)
|
|
89
86
|
assert.isNotNull(err.context)
|
|
90
87
|
assert.equal(err.context.type, 'asserter')
|
|
91
|
-
assert.equal(err.context.source, 'EntityContentAsserter')
|
|
92
88
|
assert.isNotNull(err.context.cause)
|
|
93
89
|
assert.equal(err.context.cause.entity, 'something')
|
|
94
90
|
assert.deepEqual(err.context.cause.expected, ['something_value'])
|
|
@@ -126,7 +122,6 @@ describe('scripting.asserters.entityContentAsserter', function () {
|
|
|
126
122
|
assert.isTrue(err.message.indexOf('test: Missing entity content: [ \'entity1_value1\', \'entity1_value3\' ] of entity "entity1"') >= 0)
|
|
127
123
|
assert.isNotNull(err.context)
|
|
128
124
|
assert.equal(err.context.type, 'asserter')
|
|
129
|
-
assert.equal(err.context.source, 'EntityContentAsserter')
|
|
130
125
|
assert.isNotNull(err.context.cause)
|
|
131
126
|
assert.equal(err.context.cause.entity, 'entity1')
|
|
132
127
|
assert.deepEqual(err.context.cause.expected, ['entity1_value1', 'entity1_value1', 'entity1_value3'])
|
|
@@ -62,7 +62,7 @@ const _assert = (expected, found) => {
|
|
|
62
62
|
))
|
|
63
63
|
|
|
64
64
|
if (!expected) {
|
|
65
|
-
return assert.isRejected(promise, `${steptag}:
|
|
65
|
+
return assert.isRejected(promise, `${steptag}: NLU Intent Asserter Missing argument`)
|
|
66
66
|
} else if (!found) {
|
|
67
67
|
return assert.isRejected(promise, `${steptag}: Expected intent "${expected}" but found nothing`)
|
|
68
68
|
} else if (expected !== found) {
|
|
@@ -63,7 +63,7 @@ describe('scripting.asserters.jsonPathAsserter', function () {
|
|
|
63
63
|
})
|
|
64
64
|
} catch (err) {
|
|
65
65
|
console.log(err.message)
|
|
66
|
-
assert.isTrue(err.message.includes('Expected: message4 in jsonPath $.messages[*].label
|
|
66
|
+
assert.isTrue(err.message.includes('Expected: "message4" in jsonPath $.messages[*].label, actual: message1,message2,message3'))
|
|
67
67
|
}
|
|
68
68
|
})
|
|
69
69
|
it('should fail on not existing jsonpath', async function () {
|
|
@@ -133,7 +133,7 @@ describe('scripting.asserters.jsonPathAsserter', function () {
|
|
|
133
133
|
}
|
|
134
134
|
})
|
|
135
135
|
} catch (err) {
|
|
136
|
-
assert.isTrue(err.message.indexOf('Expected: {"label":"message2"} in jsonPath $.messages[0]
|
|
136
|
+
assert.isTrue(err.message.indexOf('Expected: "{"label":"message2"}" in jsonPath $.messages[0], actual: {"label":"message1"}') > 0)
|
|
137
137
|
assert.isNotNull(err.context)
|
|
138
138
|
assert.isNotNull(err.context.cause)
|
|
139
139
|
assert.isNotTrue(err.context.cause.not)
|
|
@@ -155,7 +155,7 @@ describe('scripting.asserters.jsonPathAsserter', function () {
|
|
|
155
155
|
})
|
|
156
156
|
assert.fail('should have failed')
|
|
157
157
|
} catch (err) {
|
|
158
|
-
assert.isTrue(err.message.indexOf('Expected: test2 in jsonPath $.test') > 0)
|
|
158
|
+
assert.isTrue(err.message.indexOf('Expected: "test2" in jsonPath $.test') > 0)
|
|
159
159
|
assert.isNotNull(err.context)
|
|
160
160
|
assert.isNotNull(err.context.cause)
|
|
161
161
|
assert.isNotTrue(err.context.cause.not)
|
|
@@ -196,7 +196,7 @@ describe('scripting.asserters.jsonPathAsserter', function () {
|
|
|
196
196
|
})
|
|
197
197
|
assert.fail('should have failed')
|
|
198
198
|
} catch (err) {
|
|
199
|
-
assert.isTrue(err.message.indexOf('Not expected: test1 in jsonPath $.test') > 0)
|
|
199
|
+
assert.isTrue(err.message.indexOf('Not expected: "test1" in jsonPath $.test') > 0)
|
|
200
200
|
assert.isNotNull(err.context)
|
|
201
201
|
assert.isNotNull(err.context.cause)
|
|
202
202
|
assert.isTrue(err.context.cause.not)
|
|
@@ -252,7 +252,7 @@ describe('scripting.asserters.jsonPathAsserter', function () {
|
|
|
252
252
|
})
|
|
253
253
|
assert.fail('should have failed')
|
|
254
254
|
} catch (err) {
|
|
255
|
-
assert.isTrue(err.message.indexOf('Expected: test2 in jsonPath $.test') > 0)
|
|
255
|
+
assert.isTrue(err.message.indexOf('Expected: "test2" in jsonPath $.test') > 0)
|
|
256
256
|
assert.isNotNull(err.context)
|
|
257
257
|
assert.isNotNull(err.context.cause)
|
|
258
258
|
assert.isNotTrue(err.context.cause.not)
|
|
@@ -278,7 +278,7 @@ describe('scripting.asserters.jsonPathAsserter', function () {
|
|
|
278
278
|
})
|
|
279
279
|
assert.fail('should have failed')
|
|
280
280
|
} catch (err) {
|
|
281
|
-
assert.isTrue(err.message.indexOf('
|
|
281
|
+
assert.isTrue(err.message.indexOf('0 arguments expected') > 0)
|
|
282
282
|
}
|
|
283
283
|
})
|
|
284
284
|
it('should succeed on existing jsonpath from pathPattern', async function () {
|
|
@@ -332,7 +332,7 @@ describe('scripting.asserters.jsonPathAsserter', function () {
|
|
|
332
332
|
})
|
|
333
333
|
assert.fail('should have failed')
|
|
334
334
|
} catch (err) {
|
|
335
|
-
assert.isTrue(err.message.indexOf('Expected: value in jsonPath $.test') > 0)
|
|
335
|
+
assert.isTrue(err.message.indexOf('Expected: "value" in jsonPath $.test') > 0)
|
|
336
336
|
}
|
|
337
337
|
})
|
|
338
338
|
it('should succeed on setting matching mode in global args', async function () {
|
|
@@ -373,7 +373,7 @@ describe('scripting.asserters.jsonPathAsserter', function () {
|
|
|
373
373
|
})
|
|
374
374
|
assert.fail('should have failed')
|
|
375
375
|
} catch (err) {
|
|
376
|
-
assert.isTrue(err.message.indexOf('Expected: value1 in jsonPath $.test') > 0)
|
|
376
|
+
assert.isTrue(err.message.indexOf('Expected: "value1" in jsonPath $.test') > 0)
|
|
377
377
|
}
|
|
378
378
|
})
|
|
379
379
|
})
|
|
@@ -27,16 +27,36 @@ describe('scripting.asserters.werAsserter', function () {
|
|
|
27
27
|
this.container && await this.container.Clean()
|
|
28
28
|
})
|
|
29
29
|
|
|
30
|
-
it('ok', async function () {
|
|
31
|
-
this.compiler.ReadScriptsFromDirectory(path.resolve(__dirname, 'convos', '
|
|
30
|
+
it('ok (float)', async function () {
|
|
31
|
+
this.compiler.ReadScriptsFromDirectory(path.resolve(__dirname, 'convos', 'wer_threshold_ok_float.yml'))
|
|
32
32
|
|
|
33
33
|
this.compiler.ExpandScriptingMemoryToConvos()
|
|
34
34
|
assert.equal(this.compiler.convos.length, 1)
|
|
35
35
|
await this.compiler.convos[0].Run(this.container)
|
|
36
36
|
})
|
|
37
|
+
it('ok (percentage)', async function () {
|
|
38
|
+
this.compiler.ReadScriptsFromDirectory(path.resolve(__dirname, 'convos', 'wer_threshold_ok_percentage.yml'))
|
|
37
39
|
|
|
38
|
-
|
|
39
|
-
this.compiler.
|
|
40
|
+
this.compiler.ExpandScriptingMemoryToConvos()
|
|
41
|
+
assert.equal(this.compiler.convos.length, 1)
|
|
42
|
+
await this.compiler.convos[0].Run(this.container)
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
it('nok (float)', async function () {
|
|
46
|
+
this.compiler.ReadScriptsFromDirectory(path.resolve(__dirname, 'convos', 'wer_threshold_nok_float.yml'))
|
|
47
|
+
|
|
48
|
+
this.compiler.ExpandScriptingMemoryToConvos()
|
|
49
|
+
assert.equal(this.compiler.convos.length, 1)
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
await this.compiler.convos[0].Run(this.container)
|
|
53
|
+
assert.fail('expected error')
|
|
54
|
+
} catch (err) {
|
|
55
|
+
assert.equal(err.message, 'wer_threshold_nok/Line 2: assertion error - Line 2: Word Error Rate (50%) higher than accepted (10%)')
|
|
56
|
+
}
|
|
57
|
+
})
|
|
58
|
+
it('nok (percentage)', async function () {
|
|
59
|
+
this.compiler.ReadScriptsFromDirectory(path.resolve(__dirname, 'convos', 'wer_threshold_nok_percentage.yml'))
|
|
40
60
|
|
|
41
61
|
this.compiler.ExpandScriptingMemoryToConvos()
|
|
42
62
|
assert.equal(this.compiler.convos.length, 1)
|
|
@@ -45,7 +65,7 @@ describe('scripting.asserters.werAsserter', function () {
|
|
|
45
65
|
await this.compiler.convos[0].Run(this.container)
|
|
46
66
|
assert.fail('expected error')
|
|
47
67
|
} catch (err) {
|
|
48
|
-
assert.equal(err.message, 'wer_threshold_nok/Line 2: assertion error - Line 2: Word
|
|
68
|
+
assert.equal(err.message, 'wer_threshold_nok/Line 2: assertion error - Line 2: Word Error Rate (50%) higher than accepted (10%)')
|
|
49
69
|
}
|
|
50
70
|
})
|
|
51
71
|
})
|
|
@@ -306,7 +306,7 @@ describe('scripting.matching.matchingmode', function () {
|
|
|
306
306
|
})
|
|
307
307
|
})
|
|
308
308
|
|
|
309
|
-
describe('wer.lowthreshold', function () {
|
|
309
|
+
describe('wer.lowthreshold (float)', function () {
|
|
310
310
|
beforeEach(async function () {
|
|
311
311
|
const myCaps = {
|
|
312
312
|
[Capabilities.PROJECTNAME]: 'matching.matchingmode',
|
|
@@ -326,8 +326,28 @@ describe('scripting.matching.matchingmode', function () {
|
|
|
326
326
|
assert.isFalse(this.compiler.Match('test 123', 'tast 123'))
|
|
327
327
|
})
|
|
328
328
|
})
|
|
329
|
+
describe('wer.lowthreshold (percentage)', function () {
|
|
330
|
+
beforeEach(async function () {
|
|
331
|
+
const myCaps = {
|
|
332
|
+
[Capabilities.PROJECTNAME]: 'matching.matchingmode',
|
|
333
|
+
[Capabilities.CONTAINERMODE]: echoConnector,
|
|
334
|
+
[Capabilities.SCRIPTING_MATCHING_MODE]: 'wer',
|
|
335
|
+
[Capabilities.SCRIPTING_MATCHING_MODE_ARGS]: [10]
|
|
336
|
+
}
|
|
337
|
+
const driver = new BotDriver(myCaps)
|
|
338
|
+
this.compiler = driver.BuildCompiler()
|
|
339
|
+
this.container = await driver.Build()
|
|
340
|
+
})
|
|
341
|
+
afterEach(async function () {
|
|
342
|
+
this.container && await this.container.Clean()
|
|
343
|
+
})
|
|
344
|
+
|
|
345
|
+
it('should not match because of low threshold', async function () {
|
|
346
|
+
assert.isFalse(this.compiler.Match('test 123', 'tast 123'))
|
|
347
|
+
})
|
|
348
|
+
})
|
|
329
349
|
|
|
330
|
-
describe('wer.highthreshold', function () {
|
|
350
|
+
describe('wer.highthreshold (float)', function () {
|
|
331
351
|
beforeEach(async function () {
|
|
332
352
|
const myCaps = {
|
|
333
353
|
[Capabilities.PROJECTNAME]: 'matching.matchingmode',
|
|
@@ -343,6 +363,26 @@ describe('scripting.matching.matchingmode', function () {
|
|
|
343
363
|
this.container && await this.container.Clean()
|
|
344
364
|
})
|
|
345
365
|
|
|
366
|
+
it('should match because of high threshold', async function () {
|
|
367
|
+
assert.isTrue(this.compiler.Match('test 123', 'tast 123'))
|
|
368
|
+
})
|
|
369
|
+
})
|
|
370
|
+
describe('wer.highthreshold (percentage)', function () {
|
|
371
|
+
beforeEach(async function () {
|
|
372
|
+
const myCaps = {
|
|
373
|
+
[Capabilities.PROJECTNAME]: 'matching.matchingmode',
|
|
374
|
+
[Capabilities.CONTAINERMODE]: echoConnector,
|
|
375
|
+
[Capabilities.SCRIPTING_MATCHING_MODE]: 'wer',
|
|
376
|
+
[Capabilities.SCRIPTING_MATCHING_MODE_ARGS]: [60]
|
|
377
|
+
}
|
|
378
|
+
const driver = new BotDriver(myCaps)
|
|
379
|
+
this.compiler = driver.BuildCompiler()
|
|
380
|
+
this.container = await driver.Build()
|
|
381
|
+
})
|
|
382
|
+
afterEach(async function () {
|
|
383
|
+
this.container && await this.container.Clean()
|
|
384
|
+
})
|
|
385
|
+
|
|
346
386
|
it('should match because of high threshold', async function () {
|
|
347
387
|
assert.isTrue(this.compiler.Match('test 123', 'tast 123'))
|
|
348
388
|
})
|
|
@@ -55,9 +55,8 @@ describe('scriptingModificator.assertions', function () {
|
|
|
55
55
|
})
|
|
56
56
|
assert.fail('should have failed')
|
|
57
57
|
} catch (err) {
|
|
58
|
-
assert.isTrue(err.message.indexOf('Expected asserter
|
|
58
|
+
assert.isTrue(err.message.indexOf('Expected asserter NLU Intent Asserter with args "test1" to fail') > 0)
|
|
59
59
|
assert.isNotNull(err.context)
|
|
60
|
-
assert.equal(err.context.source, 'IntentAsserter')
|
|
61
60
|
}
|
|
62
61
|
})
|
|
63
62
|
})
|