2022-05-31 (C) Questetra, Inc. (MIT License) 2 This item uploads files to Slack with Bots. この工程は、Bots 機能を使って Slack にファイルをアップロードします。 https://support.questetra.com/bpmn-icons/slack-file-upload-bots https://support.questetra.com/ja/bpmn-icons/slack-file-upload-bots iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAABFBJREFUWEfN l39ME2cYx79vofwSEljXirCwLWOSYJRotjgnJDPZWNKjg4BYpDgnCCuYKCxmxLUu7pcJZupitmqY XTfFLRnaqeXqYibbXExIdNQ/tj+WLMvCEjPoGGABxULf5b3Sy7W9a0+zhd0f/aP3Ps/zeZ/fR7DE D1Fr31RgygrNh2pBsYmCrAXoYwDyFuUnAPI7AfWB4FtNqsbtueWZVaM7KYBRb8wnIN0UsALIUKMU wF0CnKCgPV6/989EMgkBjIYqKyh9H8AylYZjj82AkL3esYETSvKKANzDnIMStD+g4SgxQnGc/4vv kNMlC2A0cJ+DYuu/YVzUQfCFd4xvjNUZB6Dm5kUlRRj5ZUTUlZOXA41Gg6nxqYTMcp6IAliM+XEl LcyQa9iFzGUZmJ6cxrbVL6PhNTO2dG4BIQS8i4ejW1E8rJaQdmlOiAAs2wHya6KEaznQjNqOWpHv 1MFTgvGMrHBxzAfnUV1YkyxyMwAtjlSHCMDpuaMU6EwkXVZRhoPn3hOPeD+7hBctlUhJTRH/4wxV yQBAgA94P98lOIT9sCazEAyNq6lzBtHR0460jDSc+9CNtndb7xuA9YkUrUbHmpUAwBm4JkpxOha9 4PEVaHmrBfmP5ke9unc3CM9JDwb7B3Hx1oU4gFXrS9HU3YShr4dwofeirEcIwTZ+jO8LA+g5JwWa Y0/2/XQaeYZIt43Xs+eFThy5dDgKwLyyAWd+7kOqNlUQ6GnrwdXzP8QJE+AT3s+3CABGfdUwQNfG nhoY9QjZrfSwJDR3mZGemS4cCd4Lwv2RW/gv8jAvHd51REYF8Xn9A+sWAbi/JYNFPGz71IZnjRtk 7c/dmYOl1ILttu0w7TQJZxyvO6B/RI/63fViVbRteBWjI6NyOia8fv6hCABVumVxWTHWbFyNhfkF TI3fDt90LohrA9dEEZYrLFSjf4xBl6/DqmdKMTt9B5fPXEZoIaToQa+fD/vXqOdkAXbsfwV1u+pA NERwr/nJBnw81AvdCp1wq53rW4XbN7+5Q4y51NqkfxLW8nYEJgKyEFIA2RBIM1wuvr32XjTubUR2 brbiLRN0R2kI5JPw7G/9yMzOFJT7vvdh5vYsyk0bRWOsEZWVr0HhE4WKAM4DTrgdXyVOQqUyfPr5 p9D6TisCkwHYN9vReawrDsD1tgs21xsoWVcSZYTlzPB3PhyyHgINxUc4qgyVGlEs9j7nvjiAXH0u snKy8OOVGwo3lXdOVCNS24rlAKSz4ObVm7BttiuGQ/IiuhWzF2qG0Z6ju1FpqRT19B/rR421Bto0 rfAfc/tLBdVJAeKGUbgUk4/j5UXL4bx+UuiOLK6NpRZhMFVUV4iJaq/fnwxAfhwLEOElNOFGwUpu U91zuPLlIGYD4c2bTci0dC2uf3MjmXHlhSQiqWYlS25FIfFkltP/31L6X3jivtfyCMSSfpiIEEv5 aSZNpSX7OH3QjFcr9w829dcwn81r2gAAAABJRU5ErkJggg== { configs.put('conf_OAuth2', 'Slack'); configs.put('ChannelName', channelName); const fileDef = engine.createDataDefinition('ファイル', 1, 'q_files', 'FILE'); configs.putObject('File', fileDef); engine.setData(fileDef, file); }; /** * 指定サイズのテキストファイルを作成 * @param name * @param size */ const createQfile = (name, size) => { let text = ''; while (text.length < size) { if (text.length !== 0 && text.length * 2 < size) { text += text; } else { text += 'a'; } } return engine.createQfile(name, 'text/plain; charset=US-ASCII', text); }; /** * ファイルが添付されていない場合(正常終了) */ test('No File to upload', () => { prepareConfigs(configs, 'channel1', null); execute(); }); /** * ファイル数が HTTP リクエスト数制限を超えてエラーになる場合 */ test('Number of Files is over the limit.', () => { const files = new java.util.ArrayList(); for (let i = 0; i < httpClient.getRequestingLimit() + 1; i++) { files.add(createQfile(`ファイル${i}.txt`, 1 )); } prepareConfigs(configs, 'channel1', files); expect(execute).toThrow('Number of Files is over the limit.'); }); /** * POSTリクエストのテスト(ファイルアップロード) * @param {Object} request * @param request.url * @param request.method * @param email */ const assertPostRequest = ({url, method, contentType, body}, channels, filename, filesize) => { expect(url).toEqual(`https://slack.com/api/files.upload`); expect(method).toEqual('POST'); expect(body.size()).toEqual(2); const channel = body.get('channels').get(0); const file = body.get('file').get(0); expect(channel).toEqual(channels); expect(file.getName()).toEqual(filename); expect(file.getContentType()).startsWith('text/plain'); expect(file.getLength()).toEqual(filesize); }; /** * POST API リクエストでエラーになる場合 */ test('POST Failed', () => { const files = new java.util.ArrayList(); files.add(createQfile(`file2.txt`, 1)); prepareConfigs(configs, 'channel2', files); httpClient.setRequestHandler((request) => { assertPostRequest(request, 'channel2', "file2.txt", 1 ); return httpClient.createHttpResponse(400, 'application/json', '{}'); }); expect(execute).toThrow(`Failed to upload\n filename: file2.txt`); }); /** * アップロード成功の場合 * 1 ファイル  2 つのチャンネル */ test('Success - 1 file 2 channels', () => { const files = new java.util.ArrayList(); files.add(createQfile(`file3.txt`, 1)); prepareConfigs(configs, 'channel3, channel4', files); httpClient.setRequestHandler((request) => { filename = []; filename.push("file3.txt"); assertPostRequest(request, 'channel3, channel4', `file3.txt`, 1 ); const responseObj = { "ok" : true } return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(responseObj)); }); //