botium-core: SimpleREST ContainerMode not working with SIMPLEREST_HEADERS_TEMPLATE
Hello,
After many hours testing, I think it may be a bug: botium-cli --version: 0.0.38 node --version: v10.15.0
I have a simple bot (bot.py) that only answers the same string “Adeus, obrigado pelo contato =)” for POST requests passing the parameters user_id and message:
from flask import Flask, request, jsonify
def create_app(test_config=None):
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False # retrieve UTF-8 messages
app.config['DEBUG'] = True
@app.route('/reply', methods=['POST'])
def reply():
params = request.json
if not params:
return jsonify({
"status": "error",
"error": "Request must be of the application/json type!",
})
user_id = params.get("user_id")
message = params.get("message")
# Make sure the required params are present.
if not user_id or not message:
return jsonify({
"status": "error",
"error": "user_id and message are required keys",
})
reply = "Adeus, obrigado pelo contato =)"
# Send the response.
return jsonify({
"status": "ok",
"reply": reply
})
return app
I can test it with a simple curl:
curl -X POST http://localhost:5002/reply -H 'content-type: application/json' -d '{
"message": "tchau",
"user_id": "dummy123"
}'
Response:
{
"reply": "Adeus, obrigado pelo contato =)",
"status": "ok"
}
I’ve made a simple convo file (despedida.convo.txt):
#me
tchau
#bot
Adeus, obrigado pelo contato =)
I’ve also made a simple config to match the curl (botium.json):
{
"botium": {
"Capabilities": {
"PROJECTNAME": "First Test",
"CONTAINERMODE": "simplerest",
"SIMPLEREST_URL": "http://localhost:5002/reply",
"SIMPLEREST_METHOD": "POST",
"SIMPLEREST_HEADERS_TEMPLATE": { "content-type": "application/json" },
"SIMPLEREST_BODY_TEMPLATE": { "message": "{{msg.messageText}}", "user_id": "{{context.conversation_id}}" },
"SIMPLEREST_RESPONSE_JSONPATH": "$.reply.*"
},
"Sources": {},
"Envs": {}
}
}
But when I do the botium-cli run --verbose
, I see my application returns an error that suggests SIMPLEREST_HEADERS_TEMPLATE is being ignored:
botium-SimpleRestContainer got response body: "{\n \"error\": \"Request must be of the application/json type!\", \n \"status\": \"error\"\n}\n" +32ms
And the normal outputs this:
Botium Test-Suite
1) convos/despedida.convo.txt
0 passing (10s)
1 failing
1) Botium Test-Suite
convos/despedida.convo.txt:
AssertionError: convos/despedida.convo.txt/Line 5: bot says nothing
at ScriptingProvider.compiler.scriptingEvents.fail (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/src/run/index.js:49:12)
at scriptingEvents.onBotStart.then.then (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/scripting/Convo.js:179:40)
It seems to timeout in 10 seconds everytime, even though the application responds instantly to the curl command. I also tried to change the SIMPLEREST_HEADERS_TEMPLATE as in issue #162:
"SIMPLEREST_HEADERS_TEMPLATE": "{ \"Content-Type\": \"application/json\"}"
But then I get the instant error:
Botium Test-Suite
1) convos/despedida.convo.txt
0 passing (118ms)
1 failing
1) Botium Test-Suite
convos/despedida.convo.txt:
Error: convos/despedida.convo.txt/Line 4: error sending to bot { AssertionError: Error: convos/despedida.convo.txt/Line 4: error sending to bot Error: composing headers from SIMPLEREST_HEADERS_TEMPLATE failed (TypeError: Invalid template! Template should be a "string" but "object" was given as the first argument for mustache#render(template, view, partials)
at Object.render (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/mustache/mustache.js:598:13)
at SimpleRestContainer._buildRequest (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:270:54)
at Promise (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:145:35)
at new Promise (<anonymous>)
at SimpleRestContainer._doRequest (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:144:12)
at SimpleRestContainer.UserSays (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:101:17)
at scriptingEvents.onMeStart.then.then (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/scripting/Convo.js:150:32))
at SimpleRestContainer._buildRequest (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:272:15)
at Promise (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:145:35)
at new Promise (<anonymous>)
at SimpleRestContainer._doRequest (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:144:12)
at SimpleRestContainer.UserSays (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:101:17)
at scriptingEvents.onMeStart.then.then (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/scripting/Convo.js:150:32)
at ScriptingProvider.compiler.scriptingEvents.fail (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/src/run/index.js:49:12)
at scriptingEvents.onMeStart.then.then.then.then.catch (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/scripting/Convo.js:159:38)
message:
Error: convos/despedida.convo.txt/Line 4: error sending to bot Error: composing headers from SIMPLEREST_HEADERS_TEMPLATE failed (TypeError: Invalid template! Template should be a "string" but "object" was given as the first argument for mustache#render(template, view, partials)
at Object.render (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/mustache/mustache.js:598:13)
at SimpleRestContainer._buildRequest (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:270:54)
at Promise (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:145:35)
at new Promise (<anonymous>)
at SimpleRestContainer._doRequest (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:144:12)
at SimpleRestContainer.UserSays (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:101:17)
at scriptingEvents.onMeStart.then.then (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/scripting/Convo.js:150:32))
at SimpleRestContainer._buildRequest (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:272:15)
at Promise (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:145:35)
at new Promise (<anonymous>)
at SimpleRestContainer._doRequest (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:144:12)
at SimpleRestContainer.UserSays (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/containers/SimpleRestContainer.js:101:17)
at scriptingEvents.onMeStart.then.then (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/scripting/Convo.js:150:32)
at scriptingEvents.onMeStart.then.then.then.then.catch (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/scripting/Convo.js:159:43),
showDiff: false,
actual: null,
expected: null,
operator: undefined }
at scriptingEvents.onMeStart.then.then.then.then.catch (/home/thiagoc/.npm-global/lib/node_modules/botium-cli/node_modules/botium-core/src/scripting/Convo.js:163:33)
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 15 (8 by maintainers)
From the Wiki I though conversation_id is automatic (https://github.com/codeforequity-at/botium-core/wiki/operation-mode-simplerest).
I used “SIMPLEREST_INIT_CONTEXT”: “{ "conversation_id": "botium" }” and it worked!
I think you can close this issue then. Thanks a lot! Botium is a very nice product and I will make good marketing with my fellow developer friends.