bottender
Version:
A framework for building conversational user interfaces.
237 lines • 13.8 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const SimulatedContext_1 = __importDefault(require("./SimulatedContext"));
class ContextSimulator {
constructor({ platform, initialState, mockFn, }) {
this._platform = platform;
this._initialState = initialState || {};
this._mockFn = mockFn || jest.fn;
}
createClient() {
switch (this._platform) {
case 'messenger':
case 'line':
case 'slack':
case 'telegram':
default:
return {};
}
}
createUser() {
switch (this._platform) {
case 'messenger':
return {
id: '__ID__',
first_name: 'First',
last_name: 'Last',
profile_pic: 'https://example.com/pic.png',
locale: 'en_US',
timezone: 8,
gender: 'male',
};
case 'line':
return {
id: '__ID__',
displayName: 'Display',
userId: '__ID__',
pictureUrl: 'https://example.com/pic.png',
statusMessage: 'Status',
};
case 'slack':
return {
id: '__ID__',
team_id: '__TEAM_ID__',
name: 'spengler',
deleted: false,
color: '9f69e7',
real_name: 'episod',
tz: 'America/Los_Angeles',
tz_label: 'Pacific Daylight Time',
tz_offset: -25200,
profile: {
avatar_hash: 'ge3b51ca72de',
status_text: 'Print is dead',
status_emoji: ':books:',
real_name: 'Egon Spengler',
display_name: 'spengler',
real_name_normalized: 'Egon Spengler',
display_name_normalized: 'spengler',
email: 'spengler@ghostbusters.example.com',
image_24: 'https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg',
image_32: 'https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg',
image_48: 'https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg',
image_72: 'https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg',
image_192: 'https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg',
image_512: 'https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg',
team: 'T012AB3C4',
},
is_admin: true,
is_owner: false,
is_primary_owner: false,
is_restricted: false,
is_ultra_restricted: false,
is_bot: false,
updated: 1502138686,
is_app_user: false,
has_2fa: false,
};
case 'telegram':
return {
id: '__ID__',
first_name: 'First',
last_name: 'Last',
username: 'Username',
language_code: 'en',
};
default:
return {
id: '__ID__',
};
}
}
createContext({ event, state, }) {
const context = new SimulatedContext_1.default({
client: this.createClient(),
event: this.createEvent(event),
session: {
id: '__ID__',
user: this.createUser(),
_state: state || this._initialState,
},
initialState: this._initialState,
requestContext: undefined,
emitter: null,
platform: this._platform || 'other',
});
context.setState = this._mockFn(context.setState.bind(context));
context.resetState = this._mockFn(context.resetState.bind(context));
context.sendText = this._mockFn();
context.typing = this._mockFn();
switch (this._platform) {
case 'messenger':
context.sendMessage = this._mockFn();
context.sendAttachment = this._mockFn();
context.sendImage = this._mockFn();
context.sendAudio = this._mockFn();
context.sendVideo = this._mockFn();
context.sendFile = this._mockFn();
context.sendQuickReplies = this._mockFn();
context.sendTemplate = this._mockFn();
context.sendGenericTemplate = this._mockFn();
context.sendButtonTemplate = this._mockFn();
context.sendListTemplate = this._mockFn();
context.sendOpenGraphTemplate = this._mockFn();
context.sendMediaTemplate = this._mockFn();
context.sendReceiptTemplate = this._mockFn();
context.sendAirlineBoardingPassTemplate = this._mockFn();
context.sendAirlineCheckinTemplate = this._mockFn();
context.sendAirlineItineraryTemplate = this._mockFn();
context.sendAirlineFlightUpdateTemplate = this._mockFn();
context.typingOn = this._mockFn();
context.typingOff = this._mockFn();
context.markSeen = this._mockFn();
context.passThreadControl = this._mockFn();
context.passThreadControlToPageInbox = this._mockFn();
context.takeThreadControl = this._mockFn();
context.associateLabel = this._mockFn();
context.dissociateLabel = this._mockFn();
context.getAssociatedLabels = this._mockFn();
break;
case 'line':
context.isReplied = false;
context.sendText = this._mockFn();
context.sendImage = this._mockFn();
context.sendVideo = this._mockFn();
context.sendAudio = this._mockFn();
context.sendLocation = this._mockFn();
context.sendSticker = this._mockFn();
context.sendImagemap = this._mockFn();
context.sendButtonTemplate = this._mockFn();
context.sendConfirmTemplate = this._mockFn();
context.sendCarouselTemplate = this._mockFn();
context.sendImageCarouselTemplate = this._mockFn();
context.reply = this._mockFn();
context.replyText = this._mockFn();
context.replyImage = this._mockFn();
context.replyVideo = this._mockFn();
context.replyAudio = this._mockFn();
context.replyLocation = this._mockFn();
context.replySticker = this._mockFn();
context.replyImagemap = this._mockFn();
context.replyButtonTemplate = this._mockFn();
context.replyConfirmTemplate = this._mockFn();
context.replyCarouselTemplate = this._mockFn();
context.replyImageCarouselTemplate = this._mockFn();
context.push = this._mockFn();
context.pushText = this._mockFn();
context.pushImage = this._mockFn();
context.pushVideo = this._mockFn();
context.pushAudio = this._mockFn();
context.pushLocation = this._mockFn();
context.pushSticker = this._mockFn();
context.pushImagemap = this._mockFn();
context.pushButtonTemplate = this._mockFn();
context.pushConfirmTemplate = this._mockFn();
context.pushCarouselTemplate = this._mockFn();
context.pushImageCarouselTemplate = this._mockFn();
context.leave = this._mockFn();
context.getLinkedRichMenu = this._mockFn();
context.linkRichMenu = this._mockFn();
context.unlinkRichMenu = this._mockFn();
break;
case 'slack':
context.postMessage = this._mockFn();
break;
case 'telegram':
context.sendMessage = this._mockFn();
context.sendPhoto = this._mockFn();
context.sendAudio = this._mockFn();
context.sendDocument = this._mockFn();
context.sendSticker = this._mockFn();
context.sendVideo = this._mockFn();
context.sendVoice = this._mockFn();
context.sendVideoNote = this._mockFn();
context.sendMediaGroup = this._mockFn();
context.sendLocation = this._mockFn();
context.sendVenue = this._mockFn();
context.sendContact = this._mockFn();
context.sendChatAction = this._mockFn();
context.sendInvoice = this._mockFn();
context.sendGame = this._mockFn();
context.setGameScore = this._mockFn();
context.getGameHighScores = this._mockFn();
break;
default:
}
return context;
}
createEvent(properties = {}) {
switch (this._platform) {
case 'messenger':
return Object.assign({ rawEvent: {}, isMessage: false, isText: false, hasAttachment: false, isImage: false, isAudio: false, isVideo: false, isLocation: false, isFile: false, isFallback: false, isSticker: false, isLikeSticker: false, isQuickReply: false, isEcho: false, isPostback: false, isOptin: false, isPayment: false, isCheckoutUpdate: false, isPreCheckout: false, isRead: false, isDelivery: false, isPayload: false, isPolicyEnforcement: false, isAppRoles: false, isStandby: false, isPassThreadControl: false, isTakeThreadControl: false, message: null, text: null, attachments: null, image: null, audio: null, video: null, location: null, file: null, fallback: null, sticker: null, quickReply: null, postback: null, optin: null, payment: null, checkoutUpdate: null, preCheckout: null, read: null, delivery: null, payload: null, policyEnforcement: null, appRoles: null, passThreadControl: null, takeThreadControl: null }, properties);
case 'line':
return Object.assign({ rawEvent: {}, replyToken: null, source: {}, isMessage: false, isText: false, isImage: false, isVideo: false, isAudio: false, isLocation: false, isSticker: false, isFollow: false, isUnfollow: false, isJoin: false, isLeave: false, isPostback: false, isBeacon: false, message: null, text: null, image: null, video: null, audio: null, location: null, sticker: null, follow: null, unfollow: null, join: null, leave: null, postback: null, date: null, time: null, datetime: null, beacon: null }, properties);
case 'slack':
return Object.assign({ rawEvent: {}, isMessage: false, isText: false, message: null, text: null, isChannelsMessage: false, isGroupsMessage: false, isImMessage: false, isMpimMessage: false, isAppUninstalled: false, isChannelArchive: false, isChannelCreated: false, isChannelDeleted: false, isChannelHistoryChanged: false, isChannelRename: false, isChannelUnarchive: false, isDndUpdated: false, isDndUpdatedUser: false, isEmailDomainChanged: false, isEmojiChanged: false, isFileChange: false, isFileCommentAdded: false, isFileCommentDeleted: false, isFileCommentEdited: false, isFileCreated: false, isFileDeleted: false, isFilePublic: false, isFileShared: false, isFileUnshared: false, isGridMigrationFinished: false, isGridMigrationStarted: false, isGroupArchive: false, isGroupClose: false, isGroupHistoryChanged: false, isGroupOpen: false, isGroupRename: false, isGroupUnarchive: false, isImClose: false, isImCreated: false, isImHistoryChanged: false, isImOpen: false, isLinkShared: false, isMemberJoinedChannel: false, isMemberLeftChannel: false, isPinAdded: false, isPinRemoved: false, isReactionAdded: false, isReactionRemoved: false, isStarAdded: false, isStarRemoved: false, isSubteamCreated: false, isSubteamMembersChanged: false, isSubteamSelfAdded: false, isSubteamSelfRemoved: false, isSubteamUpdated: false, isTeamDomainChange: false, isTeamJoin: false, isTeamRename: false, isTokensRevoked: false, isUrlVerification: false, isUserChange: false }, properties);
case 'telegram':
return Object.assign({ rawEvent: {}, isMessage: false, isText: false, isAudio: false, isDocument: false, isGame: false, isPhoto: false, isSticker: false, isVideo: false, isVoice: false, isVideoNote: false, isContact: false, isLocation: false, isVenue: false, isCallbackQuery: false, message: null, text: null, audio: null, document: null, game: null, photo: null, sticker: null, video: null, voice: null, videoNote: null, contact: null, location: null, venue: null, callbackQuery: null }, properties);
default:
return Object.assign({ rawEvent: {}, isMessage: false, isText: false, message: null, text: null }, properties);
}
}
createTextContext(text, options) {
return this.createContext(Object.assign({ event: {
isMessage: true,
isText: true,
message: {
text,
},
text,
} }, options));
}
}
exports.default = ContextSimulator;
//# sourceMappingURL=ContextSimulator.js.map