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)

Most upvoted comments

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.