2021-12-20
(C) Questetra, Inc. (MIT License)
2
Delete a single sheet in a Google Sheet. When the Google Sheet has only one sheet, it cannot be deleted.
Google スプレッドシートのシートを削除します。ただし、スプレッドシートにシートが 1 つしかない場合は削除できません。
https://support.questetra.com/bpmn-icons/service-task-google-sheets-sheet-delete/
https://support.questetra.com/ja/bpmn-icons/service-task-google-sheets-sheet-delete/
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADbElEQVRYR8WXS0hUURjH/2dGJFDz
lqNimmORhAU5hRVFojgTQSTarl3azN5x1aboQdAqGoVc2AyOFoGCpQuN7E6MRIVW4BBZUqJkbYTw
+H7M48Sdx3Ve986d0crFuDjfd8/v+5/vcQ7Bf/4jyezPWfX1IKQKDDoAHIj/P8AwBoCCYAwETnqF
71f63YQAXEc1B19aE8DMAOGUfZhRgFig8rTQRieV85EF4Gw1DQC5r3zj6K0YBUMjNTn6pCAkATir
3gJCmpRFnNDKQo18czyruACcVW8HIZcTfjYpA2anRkdjtEsMQHjkvefuoqawQvTxMV8w54S8Y2DM
/4uhmRGUZhfj9gcbBn+8lcZirIWaHOZwgwiAwJmrOkIGzro2lOeUJozzxcwITuYf8ts1v2lB39Sw
HMTF8JwQAQLZrp4KT7hkAbj0LMxvLOHquwfonuQlIBiFyrsvVB2bADbDTQA3wr1SARD8F9zLuD7a
jq6JQSklblEjL+yHTQCrQWgk2akC7FCnY2d6hug+uzqHSy+vSapAjY5dIkCwwz2LtlaqwNz6Ihbd
yxHuK551nHpqSpgLfgWkal4pQLxdlj1rKOqqTVgRAQCbwQmgKlUFUgIAhqmRrw4pMA1CtHIAK541
LGxEyhxtr1apkbsjMC4SK4AxauKPhhRg8aIIPwLX7294NPEch3fvR/d3HpUFOuzJ0IhuHuYF//M9
us/eUQYgjE8jT5ICGJoZhU5TivbxPpwvPo2izLxNAJ8X9omBFAGs+oRHICjw6tdHHNMcRNvnXtRq
z2BvZr4I4PZ58PBLfxIAzEWNDp3iJBQAeiYdOJJzAJ1fB2AoOoHCzFwRwOvzon/6dRIAkUkYd/RG
58Do7DgqcsvQ+qkHdSWV0GYVRChwz/VEOUBwMIWqQLhqyTaibU9CxvxDSXErFspwyb0q3VgAqAiB
RkkZMsxTE++v120ZRik0ojjDSBjH3rTp8IH0V1oxwzzUnpKYcRxoyZEXkqELrTieVyYru9Si0DW1
j+tjl4NnH1qQvZKltLO8kyi9JEBwOm7/pZSxTmpyNETz/atreUzksgqEFv0XFRB79E1J8dEICQfW
kNLDRIQIPM3MYDArBhE2JhCeZpYtPc2iIw0ogmoQogMYB5DygA1zAYSCMeGR6pSLWHEOKJZ5i4Z/
AEwJzTC2ALrNAAAAAElFTkSuQmCC
{
configs.put('conf_OAuth2', 'Google');
configs.put('conf_SheetTitle', sheetTitle);
// 文字型データ項目(単一行)を準備
const dataDef = engine.createDataDefinition('スプレッドシートの ID', 1, 'q_SpreadSheetId', 'STRING_TEXTFIELD');
engine.setData(dataDef, spreadSheetId);
configs.putObject('conf_SpreadSheetId', dataDef);
};
/**
* conf_SheetTitle が、空でエラーになる場合
*/
test('Sheet Title is blank', () => {
prepareConfigs('abc123', '');
try {
execute();
fail('not come here');
} catch (e) {
expect(e.message).endsWith('Sheet Title is empty.');
}
});
/**
* conf_SpreadSheetId でデータ項目を選択し、値が空でエラーになる場合
*/
test('Spreadsheet ID is blank', () => {
prepareConfigs('', 'シート1');
try {
execute();
fail('not come here');
} catch (e) {
expect(e.message).endsWith('Spreadsheet ID is empty.');
}
});
const SAMPLE_GET = {
"spreadsheetId": "abc123",
"sheets": [
{
"properties": {
"sheetId": 0,
"title": "シート1",
"index": 0,
"sheetType": "GRID",
"gridProperties": {
"rowCount": 1000,
"columnCount": 26
}
}
},
{
"properties": {
"sheetId": 1,
"title": "シート2",
"index": 1,
"sheetType": "GRID",
"gridProperties": {
"rowCount": 1000,
"columnCount": 26
}
}
}
],
"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/abc123/edit?ouid=102859041491136123607"
}
/**
* GET リクエストのテスト(Google スプレッドシートのシート ID を取得)
* @param {Object} request
* @param request.url
* @param request.method
* @param spreadSheetId
*/
const assertGetRequest = ({url, method}, spreadSheetId) => {
expect(url).toEqual(`https://sheets.googleapis.com/v4/spreadsheets/${encodeURIComponent(
spreadSheetId
)}?includeGridData=false`);
expect(method).toEqual('GET');
};
const SAMPLE_POST = {
"spreadsheetId": "abc123",
"replies": [
{}
]
}
/**
* POST リクエストのテスト (Google スプレッドシートのシートを削除)
* @param {Object} request
* @param request.url
* @param request.method
* @param request.contentType
* @param request.body
* @param spreadSheetId
* @param sheetId
*/
const assertPostRequest = ({url, method, contentType, body}, spreadSheetId, sheetId) => {
expect(url).toEqual(`https://sheets.googleapis.com/v4/spreadsheets/${encodeURIComponent(
spreadSheetId
)}:batchUpdate`);
expect(method).toEqual('POST');
expect(contentType).toEqual('application/json; charset=UTF-8');
const bodyObj = JSON.parse(body);
expect(bodyObj.requests[0].deleteSheet.sheetId).toEqual(sheetId);
};
/**
* シート削除成功の場合 - 先頭にあるシート
*/
test('Success - 1st sheet', () => {
prepareConfigs('abc123', 'シート1');
let reqCount = 0;
httpClient.setRequestHandler((request) => {
if (reqCount === 0) {
assertGetRequest(request, 'abc123');
reqCount++;
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_GET));
}
assertPostRequest(request, 'abc123', 0);
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_POST));
});
execute();
});
/**
* シート削除成功の場合 - 2番目にあるシート
*/
test('Success - 2nd sheet', () => {
prepareConfigs('abc123', 'シート2');
let reqCount = 0;
httpClient.setRequestHandler((request) => {
if (reqCount === 0) {
assertGetRequest(request, 'abc123');
reqCount++;
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_GET));
}
assertPostRequest(request, 'abc123', 1);
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_POST));
});
execute();
});
/**
* シート削除成功の場合 - スプレッドシートの ID を固定値で指定
*/
test('Success - Set the Spreadsheet ID as a fixed value', () => {
configs.put('conf_OAuth2', 'Google');
configs.put('conf_SpreadSheetId', 'abc123');
configs.put('conf_SheetTitle', 'シート1');
let reqCount = 0;
httpClient.setRequestHandler((request) => {
if (reqCount === 0) {
assertGetRequest(request, 'abc123');
reqCount++;
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_GET));
}
assertPostRequest(request, 'abc123', 0);
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(SAMPLE_POST));
});
execute();
});
/**
* Google Sheets への GET API リクエストでエラー
*/
test('GET Failed', () => {
prepareConfigs('defg4567', 'シート1');
httpClient.setRequestHandler((request) => {
assertGetRequest(request, 'defg4567');
return httpClient.createHttpResponse(400, 'application/json', '{}');
});
try {
execute();
fail('not come here');
} catch (e) {
expect(e.message).endsWith('Failed to get sheet information. status: 400');
}
});
/**
* Box への POST API リクエストでエラー
*/
test('POST Failed', () => {
prepareConfigs('snEtnFH1', 'テストシート');
let reqCount = 0;
httpClient.setRequestHandler((request) => {
if (reqCount === 0) {
assertGetRequest(request, 'snEtnFH1');
reqCount++;
const responseObj = {
"spreadsheetId": "snEtnFH1",
"sheets": [
{
"properties": {
"sheetId": 15521,
"title": "あああシート",
}
},
{
"properties": {
"sheetId": 95523,
"title": "テストシート",
}
}
]
}
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(responseObj));
}
assertPostRequest(request, 'snEtnFH1', 95523);
return httpClient.createHttpResponse(400, 'application/json', '{}');
});
try {
execute();
fail('not come here');
} catch (e) {
expect(e.message).endsWith('Failed to delete sheet. status: 400');
}
});
/**
* Google Sheets に指定したシートのタイトルがない
*/
test('Sheet Title dose not exist', () => {
prepareConfigs('pBEk7jKX', 'シート3');
httpClient.setRequestHandler((request) => {
assertGetRequest(request, 'pBEk7jKX');
const responseObj = {
"spreadsheetId": "pBEk7jKX",
"sheets": [
{
"properties": {
"sheetId": 48752,
"title": "シート33",
}
},
{
"properties": {
"sheetId": 45652,
"title": "シート333",
}
}
]
}
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(responseObj));
});
try {
execute();
fail('not come here');
} catch (e) {
expect(e.message).endsWith('Sheet シート3 does not exist');
}
});
]]>