From d45d23ced9ea1790d48eac80fb1b078582ca58b2 Mon Sep 17 00:00:00 2001 From: Zhu Liang Date: Sun, 17 Feb 2019 16:34:29 +0800 Subject: [PATCH 1/4] 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); + }); +}); From d740f30702fc55a21ebafaf58b65807a7871e119 Mon Sep 17 00:00:00 2001 From: Zhu Liang Date: Sun, 17 Feb 2019 16:38:02 +0800 Subject: [PATCH 2/4] docs: add url to app --- docker/reliable-web/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/reliable-web/README.md b/docker/reliable-web/README.md index a65fdc9..7768011 100644 --- a/docker/reliable-web/README.md +++ b/docker/reliable-web/README.md @@ -70,6 +70,7 @@ start server: ```bash npm run dev +# open app at localhost:7001 ``` insert seed data: From bf953df8d6512807910544d7a1e5ec79ca65a6bc Mon Sep 17 00:00:00 2001 From: Zhu Liang Date: Sun, 17 Feb 2019 16:45:19 +0800 Subject: [PATCH 3/4] trigger ci From 7c7788eb0d909855c79bc99b13011f3f98fdb56b Mon Sep 17 00:00:00 2001 From: Zhu Liang Date: Sun, 24 Feb 2019 16:00:38 +0800 Subject: [PATCH 4/4] test(delegate): stub external request --- app/controller/delegate.js | 1 - test/app/controller/delegate.test.js | 34 +++++++++++++++++++++------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/app/controller/delegate.js b/app/controller/delegate.js index 7cead46..db212f6 100644 --- a/app/controller/delegate.js +++ b/app/controller/delegate.js @@ -5,7 +5,6 @@ const { Controller } = require('egg'); class DelegateController extends Controller { async message() { const ctx = this.ctx; - console.log(ctx.request.body); const { webhook, text, title } = ctx.request.body; const res = await ctx.helper.sendMarkdown({ diff --git a/test/app/controller/delegate.test.js b/test/app/controller/delegate.test.js index 61c5ff3..658bda0 100644 --- a/test/app/controller/delegate.test.js +++ b/test/app/controller/delegate.test.js @@ -3,20 +3,38 @@ const { app, assert } = require('egg-mock/bootstrap'); describe('test/app/controller/delegate.test.js', () => { + const webhook = { + url: 'https://oapi.dingtalk.com/robot/send?access_token=xxxxx', + }; + const title = 'test title'; + const text = [ 'text1', 'text2' ]; + const responseData = { test: 1 }; + + before(function() { + app.mockContext({ + helper: { + sendMarkdown: async options => { + assert.deepStrictEqual(options.webhook, webhook); + assert.deepStrictEqual(options.title, title); + assert.deepStrictEqual(options.text, text); + return { + data: responseData, + }; + }, + }, + }); + }); + 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' ], + webhook, + title, + text, }); assert(body.success); - const data = body.data; - // data is the response from DingTalk, something like { errmsg: 'token is not exist', errcode: 300001 } - assert(data); + assert.deepStrictEqual(body.data, responseData); }); });