From d45d23ced9ea1790d48eac80fb1b078582ca58b2 Mon Sep 17 00:00:00 2001 From: Zhu Liang Date: Sun, 17 Feb 2019 16:34:29 +0800 Subject: [PATCH] test(delegate): test dingtalk integration, pass response to controller --- .prettierrc | 4 ++++ app/controller/delegate.js | 21 +++++++++------------ app/extend/helper.js | 10 +++++++--- config/config.local.js | 5 ++--- test/app/controller/delegate.test.js | 22 ++++++++++++++++++++++ 5 files changed, 44 insertions(+), 18 deletions(-) create mode 100644 .prettierrc create mode 100644 test/app/controller/delegate.test.js diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..c6a1376 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "trailingComma": "es5", + "singleQuote": true +} diff --git a/app/controller/delegate.js b/app/controller/delegate.js index c1b0ff3..7cead46 100644 --- a/app/controller/delegate.js +++ b/app/controller/delegate.js @@ -1,28 +1,25 @@ 'use strict'; -const { - Controller, -} = require('egg'); +const { Controller } = require('egg'); class DelegateController extends Controller { - async message() { const ctx = this.ctx; - const { - webhook, - text, - title, - } = ctx.request.body; + console.log(ctx.request.body); + const { webhook, text, title } = ctx.request.body; - await ctx.helper.sendMarkdown({ + const res = await ctx.helper.sendMarkdown({ webhook, title: title || 'title', text, }); - ctx.success({}); + if (res.data) { + ctx.success(res.data); + } else { + ctx.success({}); + } } - } module.exports = DelegateController; diff --git a/app/extend/helper.js b/app/extend/helper.js index 8d82222..c1adb21 100644 --- a/app/extend/helper.js +++ b/app/extend/helper.js @@ -3,16 +3,20 @@ const debug = require('debug')('reliable:reliable-dingtalk'); const ChatBot = require('dingtalk-robot-sender'); +// response format is axios +// https://github.com/axios/axios#response-schema +// https://github.com/x-cold/dingtalk-robot/blob/master/lib/bot.js const sendMarkdown = async options => { debug(options); const robot = new ChatBot({ webhook: options.webhook.url, }); + let res; if (options.isRawMarkdown) { - await robot.markdown(options.title, options.text); - return; + res = await robot.markdown(options.title, options.text); } - await robot.markdown(options.title, options.text.join('\n\n')); + res = await robot.markdown(options.title, options.text.join('\n\n')); + return res; }; module.exports = { diff --git a/config/config.local.js b/config/config.local.js index c9e8293..5735386 100644 --- a/config/config.local.js +++ b/config/config.local.js @@ -1,10 +1,10 @@ 'use strict'; module.exports = () => { - const config = exports = {}; + const config = (exports = {}); config.reliableView = { - // assetsUrl: '//127.0.0.1:8080', + assetsUrl: '//127.0.0.1:8080', }; config.authorize = { enable: false, @@ -22,4 +22,3 @@ module.exports = () => { }; return config; }; - diff --git a/test/app/controller/delegate.test.js b/test/app/controller/delegate.test.js new file mode 100644 index 0000000..61c5ff3 --- /dev/null +++ b/test/app/controller/delegate.test.js @@ -0,0 +1,22 @@ +'use strict'; + +const { app, assert } = require('egg-mock/bootstrap'); + +describe('test/app/controller/delegate.test.js', () => { + it('POST /api/delegate/message delegate message', async () => { + const { body } = await app + .httpRequest() + .post('/api/delegate/message') + .send({ + webhook: { + url: 'https://oapi.dingtalk.com/robot/send?access_token=xxxxx', + }, + title: 'title', + text: [ 'text1', 'text2' ], + }); + assert(body.success); + const data = body.data; + // data is the response from DingTalk, something like { errmsg: 'token is not exist', errcode: 300001 } + assert(data); + }); +});