START_EVENT 2022-09-05 (C) Questetra, Inc. (MIT License) 2 This item starts a process when Gmail has received a new message. このアイテムは、Gmail が新しいメールを受信すると、プロセスを開始します。 https://support.questetra.com/bpmn-icons/start-event-gmail-message-received/ https://support.questetra.com/ja/bpmn-icons/start-event-gmail-message-received/ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADPUlEQVRYR8WXX0hTURzHv2dzy5bb 1HKKRH+gtx7K2izooXI+BVH41F+IglAJmhVICr2kgRG6DFRERXBpGIgkZA/Oeigir+VzIGQE1bTU yXYdy90Tu+5u997dea9p3PO2nd+fz/md359zCXReRKv/76cPW4ysoYKAnARoCSj2gCCP16dYAMEM QKYo6OuYhRsqHvnIarGtCjB7wlWELNSCohJAthajACIg6MAKmhxvmJ9r6awJECgrrSSEPgKwTaNj uViYUnKncHyiI5N+RoC5clcbpaj6R8cSNULQXjDGVCvZUgQIlDn7CSHnN8O5YINSOlA4PnlBbjMN YDNPnuZMIRISgMSdt2/myeW2KCVV4pxIAvDZbsS0kHCGAgdsdQ0w2HPBPvchMvpCMxexWmGrb4Sx qBiRl8NgB31i3TBi2CdURwqg3NUCCo8gme8b5g0IK8q8R7C+BuC4NUFMJU7YG70gZnNSLnj3JuL6 yUXgdYwxNfHfPEC8yWSxht/iOi949Q7IMkmcccFFLHquI/ZtRhEip/oWtlacS9tjB/sQ7nwi/j+y YuG2x5sVDxBwuy4RoE8soQTA71MOodaHWB4ZSh3IakWetwvG3XsVweJXEO5slexR4HKhn/HxALPu 0m6AXtUEkBASrsR80AlbQ7Mk5HIKJQCA9Dj8E9cSAK5PAErWA8AHg2VBLBbV5FQGwJTDzxxaBShz zScHS8JcxitQdZcuoAhAseAYZ/KFCFC5WhoApQBRnV2AglyGCMDhZ1YtzrpdqgCxwA+w/b2wemoB YlCMQ+zrF4Sf9sBWd1+yrw6g4QriAPMXz8C4cxdyH3fxDUq8loeeIdTWDPORY7A3tqgDyK5ANQkF AN6ywQD7Ay/MzqOg0SiW7t1GdPIDv6UZAOIk1FCGEoDE+bYcd+PP1CS4pWDyxNoBRGWopREpASgl glYASSNSasU7Rt+CmFL9fEMAA70Id7eJeaWtmK8E2TDKqfIg+9TZZOmtTH/m54DaMu0/AHtTqu3S UAgLN66A+zWXUpUPIx5ANo7VHG1gX3kcxw3q+iARTqTrk0yA0PVR+j8ise5neSoSOn6YCBC6fpqJ S023j9MN1Lsm1b9qWLIw6P4tOAAAAABJRU5ErkJggg== { configs.put('conf_auth', 'Gmail'); configs.put('conf_label', label); }; /** * ラベル一覧 を取得する GET リクエストのテスト * @param {Object} request * @param request.url * @param request.method */ const assertGetLabelListRequest = ({url, method}) => { expect(url).toEqual('https://gmail.googleapis.com/gmail/v1/users/me/labels'); expect(method).toEqual('GET'); }; /** * メール一覧を取得する GET リクエストのテスト * @param {Object} request * @param request.url * @param request.method * @param labelIds * @param limit * @param timestampLowerLimit */ const assertGetMessageListRequest = ({url, method}, labelIds, limit, timestampLowerLimit) => { let expectedUrl = 'https://gmail.googleapis.com/gmail/v1/users/me/messages' + `?maxResults=${limit}`; labelIds.forEach(labelId => { expectedUrl += `&labelIds=${labelId}`; }); const q = `newer: ${Math.floor(timestampLowerLimit.addDays(-1).getTime() / 1000)}`; expectedUrl += `&q=${encodeURIComponent(q)}`; expectedUrl = expectedUrl.replace(/%20/g, '+'); // HttpRequestWrapper#queryParam() はスペースを + に置き換える; expect(url).toEqual(expectedUrl); expect(method).toEqual('GET'); }; /** * メールを取得する GET リクエストのテスト * @param {Object} request * @param request.url * @param request.method * @param messageId */ const assertGetMessageRequest = ({url, method}, messageId) => { const expectedUrl = `https://gmail.googleapis.com/gmail/v1/users/me/messages/${messageId}` + '?format=metadata'; expect(url).toEqual(expectedUrl); expect(method).toEqual('GET'); }; /** * 返り値の message のテスト * @param message * @param id * @param timestamp * @param rfc822msgId */ const assertMessage = (message, id, timestamp, rfc822msgId) => { expect(message.id).toEqual(id); expect(message.timestamp).toEqual(timestamp); expect(message.rfc822msgId).toEqual(rfc822msgId); }; const DATETIME_FORMAT = 'yyyy-MM-dd\'T\'HH:mm:ssX'; const LABEL_LIST_RES = { "labels": [ { "id": "CHAT", "name": "CHAT", "messageListVisibility": "hide", "labelListVisibility": "labelHide", "type": "system" }, { "id": "SENT", "name": "SENT", "type": "system" }, { "id": "INBOX", "name": "INBOX", "type": "system" }, { "id": "IMPORTANT", "name": "IMPORTANT", "messageListVisibility": "hide", "labelListVisibility": "labelHide", "type": "system" }, { "id": "TRASH", "name": "TRASH", "messageListVisibility": "hide", "labelListVisibility": "labelHide", "type": "system" }, { "id": "DRAFT", "name": "DRAFT", "type": "system" }, { "id": "SPAM", "name": "SPAM", "messageListVisibility": "hide", "labelListVisibility": "labelHide", "type": "system" }, { "id": "CATEGORY_FORUMS", "name": "CATEGORY_FORUMS", "messageListVisibility": "hide", "labelListVisibility": "labelHide", "type": "system" }, { "id": "CATEGORY_UPDATES", "name": "CATEGORY_UPDATES", "messageListVisibility": "hide", "labelListVisibility": "labelHide", "type": "system" }, { "id": "CATEGORY_PERSONAL", "name": "CATEGORY_PERSONAL", "messageListVisibility": "hide", "labelListVisibility": "labelHide", "type": "system" }, { "id": "CATEGORY_PROMOTIONS", "name": "CATEGORY_PROMOTIONS", "messageListVisibility": "hide", "labelListVisibility": "labelHide", "type": "system" }, { "id": "CATEGORY_SOCIAL", "name": "CATEGORY_SOCIAL", "messageListVisibility": "hide", "labelListVisibility": "labelHide", "type": "system" }, { "id": "STARRED", "name": "STARRED", "type": "system" }, { "id": "UNREAD", "name": "UNREAD", "type": "system" }, { "id": "Label_1234567", "name": "ラベル 1", "type": "user" }, { "id": "Label_2345678", "name": "ラベル 2", "type": "user" }, { "id": "Label_3456789", "name": "ラベル 3", "type": "user" } ] }; const MESSAGE_METADATA_1 = { "id": "abc123", "payload": { "headers": [ { "name": "From", "value": "from@example.com" }, { "name": "To", "value": "to@example.com" }, { "name": "Message-ID", "value": "rfc822msgId-1234567" }, { "name": "Subject", "value": "メール 1 の件名" } ] }, "internalDate": "1661482800000" // 2022-08-26T12:00:00+09:00 }; const MESSAGE_METADATA_2 = { "id": "def456", "payload": { "headers": [ { "name": "From", "value": "from@example.com" }, { "name": "To", "value": "to@example.com" }, { "name": "Message-ID", "value": "rfc822msgId-4567890" }, { "name": "Subject", "value": "メール 2 の件名" } ] }, "internalDate": "1660100400000" // 2022-08-10T12:00:00+09:00 }; const MESSAGE_METADATA_3 = { "id": "efg789", "payload": { "headers": [ { "name": "From", "value": "from@example.com" }, { "name": "To", "value": "to@example.com" }, { "name": "Message-ID", "value": "rfc822msgId-7890123" }, { "name": "Subject", "value": "メール 3 の件名" } ] }, "internalDate": "1659322800000" // 2022-08-01T12:00:00+09:00 }; const SAMPLE_MESSAGE_LIST_RES = { "messages": [ { "id": "abc123" }, { "id": "def456" }, { "id": "efg789" } ] }; const MESSAGE_DETAILS = [ MESSAGE_METADATA_1, MESSAGE_METADATA_2, MESSAGE_METADATA_3 ]; /** * 正常系のテストケース * ラベルを 1 つだけ指定した場合 */ test('Success - one label', () => { const label = 'ラベル 1'; const labelIds = ['Label_1234567']; prepareConfigs(label); //