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));
});
//