2022-05-17 (C) Questetra, Inc. (MIT License) 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 { configs.put('conf_OAuth2', 'Microsoft'); // 削除するファイル / フォルダの URL が保存されている文字型データ項目(複数行)を準備 const urlsDef = engine.createDataDefinition('削除するファイル / フォルダの URL', 1, 'q_urls', 'STRING_TEXTAREA'); engine.setData(urlsDef, urls); configs.putObject('conf_urls', urlsDef); }; /** * 削除するファイル / フォルダの URL がnullでエラー */ test('urls is null.', () => { prepareConfigs(null); expect(execute).toThrow('File / Folder URLs aren\'t set.'); }); /** * 削除するファイル / フォルダの URL が空行でエラー */ test('urls is blank lines.', () => { prepareConfigs('\n\n\n'); expect(execute).toThrow('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); expect(execute).toThrow('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', '{}'); }); expect(execute).toThrow('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', '{}'); }); expect(execute).toThrow('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', '{}'); }); execute(); }); /** * ファイル/フォルダ削除成功 - 複数のファイル/フォルダ(最大リクエスト数) */ 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', '{}'); } }); execute(); }); ]]>