2023-12-19
(C) Questetra, Inc. (MIT License)
3
2
This item deletes files and folders on OneDrive. It can delete multiple ones at once. It must contain one URL per line.
この工程は、OneDrive 上のファイル / フォルダを削除します。一度に複数の削除が可能です。1行につき1つのURLが含まれている必要があります。
https://support.questetra.com/bpmn-icons/onedrive-file-delete/
https://support.questetra.com/ja/bpmn-icons/onedrive-file-delete/
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADXUlEQVRYR8WXW0hUURSG/33GbC5e
8pJJF6nM6YKUmsFAIAZSONOM4FtqL/mQVg9GhXR5iCIiEAqF9KEMsvKpi06OZoRPGaRmVoSGU4om
aqaMzeXYOLPjTJ7R41w8k8bZLwNn1r/Wt9dee+29CSQeRHR8vVEpd7vzGTAHKKXpADYDiJnTTwEY
IIR0u+FuYxnmCYx6uxjfSwKotE2JbuoqB0EJALkYpwBYUNQwRHbDZtKNBtMEBVBqG0ooSAUAlcjA
i81sBPSs3ZRXE0gfEECuM94mlJb+Y2CBjBJSzTbpT/jz5RdAoTU+BGjBSgSf90EeOUz6wsU+fQBW
cuaLg/nLhABgbs2rV3bmQm8EtHRhTXgBPNUOV/8yCk4st42BbBu/O7wAitzGmyAoE+tlWXYUtxzN
htOcj78AeqNS4aI/Q9jneH5Ng0x1DCLkMlhZFz59m0ZZ9UfPr4jBOmQkjmtWHgC5rqGIUFIXTHih
QI3UzVHoH7HhsCYROzZF+JgPjNqxq/iViPgAJfQo25T3wAOg1BnvUkqP+VNGKsLQXpmF5PXCXmR1
zKJvyAqL3Yn4qHCoN0ZCHs6gvm0YxRXdS0IQQmrtTfpiD4BC2/gOANfffUbjVQ1yMtYKvnNZGJlg
kZESDeVqGSy2WbzoHPdkpdtswcnKniUBAHQ7TIYMHmBywcEiEPfey0FSgsL7zWJzosc8jazdcQI7
l5tiwvIbUaowTE47UfXMjMqnX4OBTDlMhlgegC62TNmgwp0z6UhLjsaqMMbzN5f25o4x5O5bhwhF
WNBZ2mdcyDn3Gu/NloB2DpOBBAToqs7GzqRIr/j7BIu+4V9I2xqN2KhwMSlGbcsgTlV9EAXgswSW
Bp135pQCrV3jOJSZICowb2RjXWjtHEfh9U5/OsES+BThj8daqOQyb+q/DFuRkbImJADOmKuNg+Xt
ePOZm6NgzBehv21YfzETek0iGIZgxun2OMjeEx8yACfIv/wWLR1jAq1gGwZqROePqLE/NRZjUzOo
ezmE++V7ER8tbv35aFzm0o63+YALGlEorfhS0XZsSVSKysTgmANX6nr92QpbMWch7WHEncFSH8dc
FiS9kPALJemVjIeQ9FL6PzIR8rWch5D0YcJDSPo0E3QQqR6nolreMoz+ACVfiTBvFfnjAAAAAElF
TkSuQmCC
{
const oauth2 = httpClient.createAuthSettingOAuth2(
'OneDrive',
'https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize',
'https://login.microsoftonline.com/organizations/oauth2/v2.0/token',
'https://graph.microsoft.com/Files.ReadWrite.All offline_access',
'client_id',
'client_secret',
'access_token'
);
configs.putObject('conf_OAuth2', oauth2);
// 削除するファイル / フォルダの URL が保存されている文字型データ項目(複数行)を準備
const urlsDef = engine.createDataDefinition('削除するファイル / フォルダの URL', 1, 'q_urls', 'STRING_TEXTAREA');
engine.setData(urlsDef, urls);
configs.putObject('conf_urls', urlsDef);
};
/**
* 異常系のテスト
* @param func
* @param errorMsg
*/
const assertError = (func, errorMsg) => {
try {
func();
fail();
} catch (e) {
expect(e.toString()).toEqual(errorMsg);
}
};
/**
* 削除するファイル / フォルダの URL がnullでエラー
*/
test('urls is null.', () => {
prepareConfigs(null);
assertError(main, 'File / Folder URLs aren\'t set.');
});
/**
* 削除するファイル / フォルダの URL が空行でエラー
*/
test('urls is blank lines.', () => {
prepareConfigs('\n\n\n');
assertError(main, 'File / Folder URLs aren\'t set.');
});
/**
* 削除するファイル / フォルダがリクエストの制限数を超える
*/
test('Number of urls is over the limit', () => {
let urls = '';
for (let i = 0; i <= httpClient.getRequestingLimit() / 2; i++) {
urls += `https://test-my.sharepoint.com/personal/staff_questetra365_onmicrosoft_com/Documents/f${i}\n`;
}
prepareConfigs(urls);
assertError(main, 'Necessary HTTP requests exceeds the limit.');
});
/**
* GET リクエストのテスト
* @param {Object} request
* @param request.url
* @param request.method
* @param deleteUrl
*/
const assertGetRequest = ({url, method}, deleteUrl) => {
const encodedUrl = encodeSharingUrl(deleteUrl);
expect(url).toEqual(`${GRAPH_URI}shares/${encodedUrl}/driveItem`);
expect(method).toEqual('GET');
};
/**
* GET リクエストでエラー
*/
test('GET Failed', () => {
prepareConfigs('https://test-my.sharepoint.com/personal/aaa/Documents/f1');
httpClient.setRequestHandler((request) => {
assertGetRequest(request, 'https://test-my.sharepoint.com/personal/aaa/Documents/f1');
return httpClient.createHttpResponse(400, 'application/json', '{}');
});
assertError(main, 'Failed to get drive item. status: 400');
});
/**
* DELETE リクエストのテスト
* @param {Object} request
* @param request.url
* @param request.method
* @param driveId
* @param id
*/
const assertDeleteRequest = ({url, method}, driveId, id) => {
expect(url).toEqual(`${GRAPH_URI}drives/${driveId}/items/${id}`);
expect(method).toEqual('DELETE');
};
/**
* DELETE リクエストでエラー
*/
test('DELETE Failed', () => {
prepareConfigs('https://test-my.sharepoint.com/personal/aaa/Documents/f2');
let reqCount = 0;
httpClient.setRequestHandler((request) => {
if (reqCount === 0) {
assertGetRequest(request, 'https://test-my.sharepoint.com/personal/aaa/Documents/f2');
reqCount++;
const sampleGet1 = {
"id":"Id001",
"parentReference":{
"driveId":"Drive001"
}
};
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(sampleGet1));
}
assertDeleteRequest(request, 'Drive001', 'Id001');
return httpClient.createHttpResponse(400, 'application/json', '{}');
});
assertError(main, 'Failed to delete. status: 400');
});
/**
* ファイル/フォルダ削除成功 - 1つのファイル/フォルダ
*/
test('201 Success - 1 file/folder', () => {
prepareConfigs('https://test-my.sharepoint.com/personal/aaa/Documents/f3');
let reqCount = 0;
httpClient.setRequestHandler((request) => {
if (reqCount === 0) {
assertGetRequest(request, 'https://test-my.sharepoint.com/personal/aaa/Documents/f3');
reqCount++;
const sampleGet2 = {
"id":"Id002",
"parentReference":{
"driveId":"Drive002"
}
};
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(sampleGet2));
}
assertDeleteRequest(request, 'Drive002', 'Id002');
return httpClient.createHttpResponse(204, 'application/json', '{}');
});
main();
});
/**
* ファイル/フォルダ削除成功 - 複数のファイル/フォルダ(最大リクエスト数)
*/
test('201 Success - multiple files/folders', () => {
let urls = '';
for (let i = 0; i < httpClient.getRequestingLimit() / 2; i++) {
urls += `https://test-my.sharepoint.com/personal/staff_questetra365_onmicrosoft_com/Documents/f${i}\n`;
}
prepareConfigs(urls);
let reqCount = 0;
let fileCount = 0;
httpClient.setRequestHandler((request) => {
if (reqCount % 2 === 0) {
assertGetRequest(request, `https://test-my.sharepoint.com/personal/staff_questetra365_onmicrosoft_com/Documents/f${fileCount}`);
reqCount++;
const sample_get = {
"id":`Id${fileCount}`,
"parentReference":{
"driveId":`Drive${fileCount}`
}
}
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(sample_get));
} else {
assertDeleteRequest(request, `Drive${fileCount}`, `Id${fileCount}`);
reqCount++;
fileCount++;
return httpClient.createHttpResponse(204, 'application/json', '{}');
}
});
main();
});
]]>