START_EVENT 2024-03-11 (C) Questetra, Inc. (MIT License) 3 2 This item starts a process when Event's start time has passed on Google Calendar. このアイテムは、Google カレンダーに登録されている、予定の開始時刻を経過すると、プロセスを開始します。 https://support.questetra.com/bpmn-icons/start-event-google-calendar-event-started/ https://support.questetra.com/ja/bpmn-icons/start-event-google-calendar-event-started/ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEt0lEQVRYR8VXX2xTVRj/ndv2tmv3 p1cGDyqM8SBRx9jcNBEMW7apSMKYMWoiD9sSEhITQ33AB23DyOaDJmoxGqPRbBgwEhMdUSRKS4ri XMA/I4jJhkZQIEhgbdm69ra395hz72572t5u3UbwvDS99/vO+Z3v+/2+77sE//MiCzm/vT/cRYjQ AtAGAG4A7JetMQARgIwBJBTwVh4udd95AbT2hd1Wm7CLqtRDiHbovItSRIhA/EpK3RfqkyJzOcwJ oO3VcA9RyVulHpx/EAMC0N6gTxouBqIogPb+sJ8Qsmve65ZkQPwBb9WLZqamANoHwkMEpLukvUs0 oiBDQW9Vb755AQD+5utrrGirs8FmmZcqpjAmp1UcPJlAPKm/ppTuC/okD2+cszPLuUDJoGHwTm85 1t5p0f5ejaoYnVCwuUGEw2Z+7ZkkcPy3JDautUFyEagUGD6dxHvH4hkHSumTPCcyABjbLRbyF0+4 D3dWoKZa0Jwvh1WEzqXQ9aAdLrs5gJgMfP2rjLY6EcvK9a2PjiXx5hEeACLpNK011JEB0NEf7gMh e4ytm9dY0V4ngpaYYzMzgQBTCYpDIwlcn+J2onRvwCf1MZ8sgIEwKyRVxkb+7nLcf7ce/qWstAp8 fkrGB8EElwZEgj63lAGgVzjyBX/Q69tdaFxtXcrZmm8qDRwakbH/uyyAWUJqXNAiYKb53VudeKy+ CNsWAIsp4N1v4/jmzKwUZn0NRWgAOvrDIRDSwu/b0+LAMw/bYeOy8PcNFYOhBG5MqRo/Hq0X4RQB Rr7xKwrGLirY1mTHsoqsuCIxijeOzGD0vJILm9ITAZ/UqkdgIHyBgNTwFtuaRexoK8tIjpHp4EkZ Tz1kR3UlwU9/KojJVJPc8GkZVU4BlybT6Gyyo5oDwNTzyqcxXJ5U8+M2FvC6G/UIDEQKyL7pXhs8 T5Shoky/DdM0y6do1Zl7aVLFqT9S6Gy2g7Gdke3Ln5NgfjyA81fTeP6jadOkBbxuUhRA3UoLXu5y YXllbhWUFeBaVMWxs0m03idizQq9TjBwZgBGJhTs+Sw2NwCzFNx1h4DnNjrgduUCiMsUCYXi93/S WFUtYGW1ThIWgdGJFNatsqLSmfUZv5LGx3kKmFXBmaBPaihKwgdqrXip05mpaPlX+DdK8dUvMrY/ 4tB4UiwCjJi7D5hEIIeEJq23Y50NL2x2aixni/WCHycUbG0SYRWAUgFcvK5ix/tTBSnIkaFZIere 5MCzG7IyZCRkveDaTRW1KywYGdf7Qu08HGAl+LXDM5pE+WU0paKl2LOlDFsaxWytZu0UwHSC4mac YnmFoCnCWAwgAye5BNi556xGvH10BsfPpbjzaTTglbTxrmgz2vu0CxvuuTWl+JMfEjjwvZwFYNaM tOHTigtGQ+JngQVU3gLTwpmARhUFqwvaMfPkB5KdHQ48Xi/CsshpyEAyHacYPBFH4KyegqIDieFw a4fRvIBwoTfe3MahlO4PeqWe/BzdnrHc5OZzRoBLRxchGOInpYURkkYpRc+iPkyMgzR1WOABgad0 IDQKCr+Shn9Jn2b5t2UVEwAbIhoo4CaErDcaCwFYT2cfqaG5blwyBxYW6sVb/wdgbxw/u9E3bAAA AABJRU5ErkJggg== { const quser = engine.createQuser(3, 'サウスポール', 'SouthPole@questetra.com'); configs.putObject('conf_User', quser); configs.put('conf_CalendarId', calenderId); }; /** * GET リクエストのテスト * @param {Object} request * @param request.url * @param request.method * @param calendarId */ const assertGetRequest = ({url, method}, calendarId, limit, timestampLowerLimit) => { const expectedUrl = `https://www.googleapis.com/calendar/v3/calendars/${calendarId}/events` + `?maxResults=${limit}` + `&orderBy=startTime` + `&singleEvents=true` + `&timeMin=${encodeURIComponent(dateFormatter.format(DATETIME_FORMAT, timestampLowerLimit))}` + `&timeMax=`; // 現在時刻のテストは難しいので省略 expect(url).startsWith(expectedUrl); expect(url).endsWith(`&timeZone=${encodeURIComponent(engine.getTimeZoneId())}`); expect(method).toEqual('GET'); }; /** * 返り値の event のテスト * @param event * @param eventId * @param timestamp * @param endTimestamp * @param summary * @param description * @param htmlLink */ const assertEvent = (event, eventId, timestamp, endTimestamp, summary, description, htmlLink) => { expect(event.eventId).toEqual(eventId); expect(event.timestamp).toEqual(timestamp); expect(event.id).toEqual(`${eventId}_${timestamp.getTime()}`); expect(event.endTimestamp).toEqual(endTimestamp); expect(event.summary).toEqual(summary); expect(event.description).toEqual(description); expect(event.htmlLink).toEqual(htmlLink); }; /** * 正常系のテストケース */ test('Success', () => { const SAMPLE_RESPONSE = { "kind": "calendar#events", "etag": "\"p32gdrq7bj2tvi0g\"", "summary": "TEST", "updated": "2022-08-10T02:10:27.812Z", "timeZone": "Asia/Tokyo", "items": [ { "kind": "calendar#event", "etag": "\"2439652485198000\"", "id": "mq441nohvo8nvrukgf3jt6qols", "status": "confirmed", "htmlLink": "https://www.google.com/calendar/event?eid=bXE0NDFub2h2bzhudnJ1a2dmM2p0NnFvbHMgaGF0YW5ha2FAcXVlc3RldHJhLmNvbQ", "created": "2008-08-27T05:52:58.000Z", "updated": "2008-08-27T08:37:22.599Z", "summary": "イベント1", "description": "説明1", "start": { "dateTime": "2008-09-01T13:30:00+09:00", "timeZone": "Asia/Tokyo" }, "end": { "dateTime": "2008-09-01T14:30:00+09:00", "timeZone": "Asia/Tokyo" } }, { "kind": "calendar#event", "etag": "\"2439780885850000\"", "id": "jga9498bk1bqi33jig3bkvjssk", "status": "confirmed", "htmlLink": "https://www.google.com/calendar/event?eid=amdhOTQ5OGJrMWJxaTMzamlnM2Jrdmpzc2sgaGF0YW5ha2FAcXVlc3RldHJhLmNvbQ", "created": "2008-08-26T07:45:26.000Z", "updated": "2008-08-28T02:27:22.925Z", "summary": "イベント2", "description": "説明2", "start": { "dateTime": "2008-08-28T14:00:00+09:00", "timeZone": "Asia/Tokyo" }, "end": { "dateTime": "2008-08-28T15:00:00+09:00", "timeZone": "Asia/Tokyo" } }, { "kind": "calendar#event", "etag": "\"2440848753292000\"", "id": "7vfgnrou66tvl4qi4c5m6354qo", "status": "confirmed", "htmlLink": "https://www.google.com/calendar/event?eid=N3ZmZ25yb3U2NnR2bDRxaTRjNW02MzU0cW8gaGF0YW5ha2FAcXVlc3RldHJhLmNvbQ", "created": "2008-09-01T03:51:02.000Z", "updated": "2008-09-03T06:46:16.646Z", "summary": "イベント3", "description": "説明3", "start": { "dateTime": "2008-09-08T14:00:00+09:00", "timeZone": "Asia/Tokyo" }, "end": { "dateTime": "2008-09-08T15:00:00+09:00", "timeZone": "Asia/Tokyo" } } ] }; const calendarId = '23456789'; prepareConfigs(configs, calendarId); const limit = 3; const timestampMin = new com.questetra.bpms.util.AddableTimestamp().addDays(-1); httpClient.setRequestHandler((request) => { assertGetRequest(request, calendarId, limit, timestampMin); return httpClient.createHttpResponse(201, 'application/json', JSON.stringify(SAMPLE_RESPONSE)); }); const result = list(limit, timestampMin); expect(result.length).toEqual(3); // レスポンスと逆順で返される assertEvent(result[0], '7vfgnrou66tvl4qi4c5m6354qo', dateFormatter.parse(DATETIME_FORMAT, '2008-09-08T14:00:00+09:00'), dateFormatter.parse(DATETIME_FORMAT, '2008-09-08T15:00:00+09:00'), 'イベント3', '説明3', 'https://www.google.com/calendar/event?eid=N3ZmZ25yb3U2NnR2bDRxaTRjNW02MzU0cW8gaGF0YW5ha2FAcXVlc3RldHJhLmNvbQ' ); assertEvent(result[1], 'jga9498bk1bqi33jig3bkvjssk', dateFormatter.parse(DATETIME_FORMAT, '2008-08-28T14:00:00+09:00'), dateFormatter.parse(DATETIME_FORMAT, '2008-08-28T15:00:00+09:00'), 'イベント2', '説明2', 'https://www.google.com/calendar/event?eid=amdhOTQ5OGJrMWJxaTMzamlnM2Jrdmpzc2sgaGF0YW5ha2FAcXVlc3RldHJhLmNvbQ' ); assertEvent(result[2], 'mq441nohvo8nvrukgf3jt6qols', dateFormatter.parse(DATETIME_FORMAT, '2008-09-01T13:30:00+09:00'), dateFormatter.parse(DATETIME_FORMAT, '2008-09-01T14:30:00+09:00'), 'イベント1', '説明1', 'https://www.google.com/calendar/event?eid=bXE0NDFub2h2bzhudnJ1a2dmM2p0NnFvbHMgaGF0YW5ha2FAcXVlc3RldHJhLmNvbQ' ); }); /** * 正常系のテストケース * 終日イベントが含まれている */ test('Success - including all day event', () => { const SAMPLE_RESPONSE2 = { "kind": "calendar#events", "etag": "\"p324a71fiub7vi0g\"", "summary": "テスト", "updated": "2022-08-18T07:46:34.821Z", "timeZone": "Asia/Tokyo", "items": [ { "kind": "calendar#event", "etag": "\"2442033006104000\"", "id": "9q31gco50okhgjblv5lg81r3fg", "status": "confirmed", "htmlLink": "https://www.google.com/calendar/event?eid=OXEzMWdjbzUwb2toZ2pibHY1bGc4MXIzZmcgaGF0YW5ha2FAcXVlc3RldHJhLmNvbQ", "created": "2008-04-02T09:41:31.000Z", "updated": "2008-09-10T03:15:03.052Z", "start": { "date": "2008-04-05" }, "end": { "date": "2008-04-06" }, "eventType": "default" }, { "kind": "calendar#event", "etag": "\"2528760997468000\"", "id": "ji07chs928rfb6ledempvd88jg", "status": "confirmed", "htmlLink": "https://www.google.com/calendar/event?eid=amkwN2NoczkyOHJmYjZsZWRlbXB2ZDg4amcgaGF0YW5ha2FAcXVlc3RldHJhLmNvbQ", "created": "2008-04-30T03:57:17.000Z", "updated": "2010-01-25T00:48:18.734Z", "summary": "来客", "start": { "dateTime": "2008-05-01T17:00:00+09:00", "timeZone": "Asia/Tokyo" }, "end": { "dateTime": "2008-05-01T18:00:00+09:00", "timeZone": "Asia/Tokyo" }, "eventType": "default" } ] }; const calendarId = '01234'; prepareConfigs(configs, calendarId); const limit = 5; const timestampMin = new com.questetra.bpms.util.AddableTimestamp().addDays(-7); httpClient.setRequestHandler((request) => { assertGetRequest(request, calendarId, limit, timestampMin); return httpClient.createHttpResponse(201, 'application/json', JSON.stringify(SAMPLE_RESPONSE2)); }); const result = list(limit, timestampMin); expect(result.length).toEqual(2); // レスポンスと逆順で返される assertEvent(result[0], 'ji07chs928rfb6ledempvd88jg', dateFormatter.parse(DATETIME_FORMAT, '2008-05-01T17:00:00+09:00'), dateFormatter.parse(DATETIME_FORMAT, '2008-05-01T18:00:00+09:00'), '来客', null, 'https://www.google.com/calendar/event?eid=amkwN2NoczkyOHJmYjZsZWRlbXB2ZDg4amcgaGF0YW5ha2FAcXVlc3RldHJhLmNvbQ' ); assertEvent(result[1], // 終日のイベント '9q31gco50okhgjblv5lg81r3fg', dateFormatter.parse(DATETIME_FORMAT_FOR_ALL_DAY, '2008-04-05 00:00:00'), dateFormatter.parse(DATETIME_FORMAT_FOR_ALL_DAY, '2008-04-06 00:00:00'), null, null, 'https://www.google.com/calendar/event?eid=OXEzMWdjbzUwb2toZ2pibHY1bGc4MXIzZmcgaGF0YW5ha2FAcXVlc3RldHJhLmNvbQ' ); }); /** * 異常系のテストケース * イベントの一覧取得で 403 エラー */ test('Fail', () => { const calendarId = '13579'; prepareConfigs(configs, calendarId); const limit = 4; const timestampMin = new com.questetra.bpms.util.AddableTimestamp().addDays(-3); httpClient.setRequestHandler((request) => { assertGetRequest(request, calendarId, limit, timestampMin); return httpClient.createHttpResponse(403, 'application/json', JSON.stringify({})); }); try { list(limit, timestampMin); fail(); } catch (e) { expect(e.toString()).toEqual('Failed to get events. status: 403'); } }); ]]>