From 2b97c5ca6d878912724a75c768fc3753ee3f7ed5 Mon Sep 17 00:00:00 2001 From: Juliano Penna Date: Sun, 22 Jan 2017 17:15:19 -0200 Subject: [PATCH] Add bot tests and improved bot methods --- .../chatRoom.sassc | Bin 59746 -> 59736 bytes public/img/avatars/231095546.jpg | Bin 7080 -> 0 bytes public/scripts/bundle.js | 11 +- public/styles/css/chatRoom.css | 2 +- public/styles/css/chatRoom.css.map | 2 +- public/styles/sass/chatRoom.sass | 4 +- .../chatRoom/components/chatRoom.react.js | 2 +- .../messagesPanel/MessageBox.react.js | 8 +- server/bot/bot.js | 7 +- server/test/bot.test.js | 196 ++++++++++++++++-- server/test/seed/botgramSeed.js | 66 ++++++ server/test/seed/chatSeed.js | 2 +- server/test/web.test.js | 2 +- telegram.getUpdate | 27 +++ 14 files changed, 288 insertions(+), 41 deletions(-) create mode 100644 server/test/seed/botgramSeed.js create mode 100644 telegram.getUpdate diff --git a/.sass-cache/9396ae2e0c0f2d234b4aea05b65689732de12f24/chatRoom.sassc b/.sass-cache/9396ae2e0c0f2d234b4aea05b65689732de12f24/chatRoom.sassc index 83f6b606508238b0597fa2ca4665459329f9c5f0..36bfa352a5a22daaae34081d94b05da6d717a050 100644 GIT binary patch delta 174 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 diff --git a/public/scripts/bundle.js b/public/scripts/bundle.js index 7753c94..fe1bee4 100644 --- a/public/scripts/bundle.js +++ b/public/scripts/bundle.js @@ -160,7 +160,7 @@ value: function newMessage(message) { var activeChat = this.state.activeId; var author = 'Telebot'; - var type = 'user'; + var type = 'client'; var text = message.message; var sentAt = message.sentAt; @@ -217,7 +217,6 @@ }); } else { - console.log('data', data.chats); // Populate chats panel and messages data.chats.forEach(function (chat, key) { chats[chat.chatId] = chat; @@ -30671,12 +30670,12 @@ sentAt = days + ', ' + time; } - var isClient = this.props.type === 'client'; + var isUser = this.props.type === 'user'; - var isOrange = isClient ? 'is-orange' : ''; - var nameStyle = isOrange + ' level-item client-name'; + var isOrange = isUser ? 'is-orange' : ''; + var nameStyle = isOrange + ' level-item user-name'; - var avatar = isClient ? '/img/avatars/' + this.props.id + '.jpg' : '/img/telebot.jpg'; + var avatar = isUser ? '/img/avatars/' + this.props.id + '.jpg' : '/img/telebot.jpg'; return React.createElement( 'div', diff --git a/public/styles/css/chatRoom.css b/public/styles/css/chatRoom.css index cd5ddab..e6a37cd 100755 --- a/public/styles/css/chatRoom.css +++ b/public/styles/css/chatRoom.css @@ -185,7 +185,7 @@ body { .message-info { line-height: 2.4rem; } -.client-name { +.user-name { color: #56a9c0; font-size: 1.18rem; font-weight: 400; } diff --git a/public/styles/css/chatRoom.css.map b/public/styles/css/chatRoom.css.map index 9307855..3554e11 100755 --- a/public/styles/css/chatRoom.css.map +++ b/public/styles/css/chatRoom.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "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", "sources": ["../sass/utils.sass","../sass/chatRoom.sass","../sass/media_query.sass"], "names": [], "file": "chatRoom.css" diff --git a/public/styles/sass/chatRoom.sass b/public/styles/sass/chatRoom.sass index 2bfdb2f..4a93b1d 100755 --- a/public/styles/sass/chatRoom.sass +++ b/public/styles/sass/chatRoom.sass @@ -135,7 +135,7 @@ body width: 26px line-height: 0px -// Header with the client name +// Header with the user name .header-container border-bottom: 1px solid #dbdbdb @@ -167,7 +167,7 @@ body .message-info line-height: 2.4rem -.client-name +.user-name color: #56a9c0 font-size: 1.18rem font-weight: 400 diff --git a/public/views/chatRoom/components/chatRoom.react.js b/public/views/chatRoom/components/chatRoom.react.js index b36ef52..57b60f3 100644 --- a/public/views/chatRoom/components/chatRoom.react.js +++ b/public/views/chatRoom/components/chatRoom.react.js @@ -90,7 +90,7 @@ class ChatRoom extends React.Component { newMessage(message) { const activeChat = this.state.activeId; const author = 'Telebot'; - const type = 'user'; + const type = 'client'; const text = message.message; const sentAt = message.sentAt; diff --git a/public/views/chatRoom/components/messagesPanel/MessageBox.react.js b/public/views/chatRoom/components/messagesPanel/MessageBox.react.js index 260c818..8f08938 100644 --- a/public/views/chatRoom/components/messagesPanel/MessageBox.react.js +++ b/public/views/chatRoom/components/messagesPanel/MessageBox.react.js @@ -41,12 +41,12 @@ class MessagesSpace extends React.Component { sentAt = days + ', ' + time } - const isClient = this.props.type === 'client'; + const isUser = this.props.type === 'user'; - const isOrange = isClient ? 'is-orange' : ''; - const nameStyle = `${isOrange} level-item client-name`; + const isOrange = isUser ? 'is-orange' : ''; + const nameStyle = `${isOrange} level-item user-name`; - const avatar = isClient ? `/img/avatars/${this.props.id}.jpg` : `/img/telebot.jpg`; + const avatar = isUser ? `/img/avatars/${this.props.id}.jpg` : `/img/telebot.jpg`; return ( diff --git a/server/bot/bot.js b/server/bot/bot.js index 3151d46..3d980c8 100644 --- a/server/bot/bot.js +++ b/server/bot/bot.js @@ -30,9 +30,9 @@ bot.text((msg, reply) => { const chatType = chat.type; const firstname = chat.firstname; const lastname = chat.lastname; - const type = 'client'; + const type = 'user'; const message = msg.text; - const sentAt = new Date().getTime(); + const sentAt = msg.date; function saveMessage() { Chat.insertMessage(chatId, type, firstname, message, sentAt) @@ -55,5 +55,6 @@ bot.text((msg, reply) => { } saveMessage(); - }); + +module.exports = { bot }; diff --git a/server/test/bot.test.js b/server/test/bot.test.js index eb08ee5..50e4aac 100644 --- a/server/test/bot.test.js +++ b/server/test/bot.test.js @@ -1,29 +1,183 @@ +/* eslint no-undef:off */ + +require('../config/config'); const expect = require('expect'); +const { bot } = require('../bot/bot'); +const chatSeed = require('./seed/chatSeed'); +const utils = require('../bot/utils'); +const botgramSeed = require('./seed/botgramSeed'); +const botReply = require('../bot/botReply'); +const web = require('../web/web'); +const { Chat } = require('../db/model/chat'); -describe('bot /start', () => { - it('should create chat in DB'); - it('should send new chat to web'); - it('should reply to user'); -}); -describe('bot /text', () => { - it('should save message in DB'); - it('should send message to web'); - it('should reply to user'); +describe('bot', () => { + before(() => { + // Set spys + replySpy = expect.spyOn(botReply, 'send'); + avatarSpy = expect.spyOn(utils, 'getUserAvatar'); + sendSpy = expect.spyOn(web, 'sendMessage'); - it('should create chat if inexitant'); - it('should sae message after create inexistant chat'); -}); + // Get data + messageObj = botgramSeed.getData(); + // Set data + const start = messageObj.start.chat; + startId = start.id; + startName = start.first_name; + startType = 'user'; // Set by botgram + startLast = start.last_name; + + const text = messageObj.text; + textId = text.chat.id; + textType = 'user'; + textName = text.chat.first_name; + textMessage = text.text; + textSentAt = new Date(text.date * 1000).toISOString(); // Response in Unix format (sec) + + const noChat = messageObj.noChat; + noChatId = noChat.chat.id; + noChatType = 'user'; + noChatName = noChat.chat.first_name; + noChatMessage = noChat.text; + noChatSentAt = new Date(noChat.date * 1000).toISOString(); // Response in Unix format (sec) + }); + + beforeEach((done) => { + // Refresh data + messageObj = botgramSeed.getData(); + // Populate chats collection + chatSeed.populateChats().then(() => done()); + }); + + + describe('/start', () => { + beforeEach(() => { + bot.processMessage(messageObj.start); + }); + + it('should create chat in DB', (done) => { + setTimeout(() => { + Chat.findOne({ chatId: startId }).then((chat) => { + expect(chat.firstname).toBe(startName); + done(); + }); + }, 100); + }); + + it('should send new chat to web', (done) => { + const newChatSpy = expect.spyOn(web, 'newChat'); + setTimeout(() => { + expect(newChatSpy).toHaveBeenCalled(); + expect(newChatSpy).toHaveBeenCalledWith(startId, startType, startName, startLast); + done(); + }, 100); + }); + + it('should reply to user', () => { + setTimeout(() => { + expect(replySpy).toHaveBeenCalled(); + }, 100); + }); + + it('should request user avatar', () => { + expect(avatarSpy).toHaveBeenCalledWith(startId); + }); + }); + + describe('/text', () => { + describe('with existant Chat', () => { + before(() => { + // Expect newChat isn't called + newChatSpy = expect.spyOn(Chat, 'insertChat'); + }); + + + beforeEach(() => { + // Process TEXT message + bot.processMessage(messageObj.text); + }); + + after(() => { + // Reset newChat behavior + newChatSpy.restore(); + }); + + it('should save message in DB', (done) => { + setTimeout(() => { + Chat.findOne({ chatId: chatSeed.chat1.chatId }).then((chat) => { + expect(chat.messages.length).toBe(3); + expect(chat.messages[2].message).toBe(textMessage); + expect(newChatSpy).toNotHaveBeenCalled(); + done(); + }); + }, 100); + }); + + it('should send message to web', (done) => { + + setTimeout(() => { + expect(sendSpy).toHaveBeenCalled(); + expect(sendSpy).toHaveBeenCalledWith( + textId, textType, textName, textMessage, new Date(textSentAt) + ); + expect(newChatSpy).toNotHaveBeenCalled(); + done(); + }, 100); + }); + + it('should reply to user', (done) => { + setTimeout(() => { + expect(replySpy).toHaveBeenCalled(); + expect(newChatSpy).toNotHaveBeenCalled(); + done(); + }, 100); + }); + }); + + describe('NO previous chat', () => { + beforeEach(() => { + // Process NO CHAT message + bot.processMessage(messageObj.noChat); + }); + + it('should create chat if inexistant and save message', (done) => { + setTimeout(() => { + Chat.findOne({ chatId: noChatId }).then((chat) => { + expect(chat).toExist(); + expect(chat.messages.length).toBe(1); + expect(chat.messages[0].message).toBe(noChatMessage); + done(); + }); + }, 100); + }); + + it('should send message after create inexistant chat', (done) => { + setTimeout(() => { + expect(sendSpy).toHaveBeenCalled(); + expect(sendSpy).toHaveBeenCalledWith( + noChatId, noChatType, noChatName, noChatMessage, new Date(noChatSentAt) + ); + done(); + }, 100); + }); + + }); + }); // describe(text) +}); // describe(bot) -describe('botReply send()', () => { - it('should reply client with msg param'); - it('should send message to web'); - it('should save message in db'); +describe('botReply', () => { + describe('send()', () => { + it('should reply client with msg param'); + it('should send message to web'); + it('should save message in db'); + }); }); -describe('utils getUserAvatar()', () => { - it('should post /getUserProfilePhotos and return UserProfilePhotos obj (file_id, *_size, *_path)'); - it('should post /getFile and return file_path'); - it('should create write stream to /public/img/avatars'); - it('should request /file/*/file_path and pipe response'); +describe('utils', () => { + describe('getUserAvatar()', () => { + it('should post /getUserProfilePhotos and return UserProfilePhotos obj (file_id, *_size, *_path)'); + it('should post /getFile and return file_path'); + it('should create write stream to /public/img/avatars'); + it('should request /file/*/file_path and pipe response'); + }); }); diff --git a/server/test/seed/botgramSeed.js b/server/test/seed/botgramSeed.js new file mode 100644 index 0000000..b64f009 --- /dev/null +++ b/server/test/seed/botgramSeed.js @@ -0,0 +1,66 @@ +function getData() { + const messageObj = {}; + + messageObj.start = { + message_id: 1345, + from: { + id: 3, + first_name: 'Juliano', + last_name: 'Penna' + }, + chat: { + id: 3, + first_name: 'Juliano', + last_name: 'Penna', + type: 'private' + }, + date: 1485103554, + text: '/start', + entities: [{ + type: 'bot_command', + offset: 0, + length: 6 + }] + }; + + messageObj.text = { + message_id: 1349, + from: { + id: 1, + first_name: 'Juliano', + last_name: 'Penna' + }, + chat: { + id: 1, + first_name: 'Juliano', + last_name: 'Penna', + type: 'private' + }, + date: 1485104036, + text: 'Zarathustra' + }; + + messageObj.noChat = { + message_id: 1349, + from: { + id: 99, + first_name: 'Gramps', + last_name: 'Yoho' + }, + chat: { + id: 99, + first_name: 'Gramps', + last_name: 'Yoho', + type: 'private' + }, + date: 1480104036, + text: 'Eat this hamburger!' + }; + + return messageObj; +} + + +module.exports = { + getData +}; diff --git a/server/test/seed/chatSeed.js b/server/test/seed/chatSeed.js index 6bdcfd3..53bd405 100644 --- a/server/test/seed/chatSeed.js +++ b/server/test/seed/chatSeed.js @@ -55,7 +55,7 @@ const chat2 = { }; function populateChats() { - Chat.remove({}, () => { + return Chat.remove({}, () => { new Chat(chat1).save(); new Chat(chat2).save(); }); diff --git a/server/test/web.test.js b/server/test/web.test.js index ae26b57..50624c5 100644 --- a/server/test/web.test.js +++ b/server/test/web.test.js @@ -8,7 +8,7 @@ const socket = require('socket.io-client'); const { Chat } = require('../db/model/chat'); const axios = require('axios'); -describe.only('web', () => { +describe('web', () => { before(() => { // Chat data author = 'Juliano'; diff --git a/telegram.getUpdate b/telegram.getUpdate new file mode 100644 index 0000000..88181d1 --- /dev/null +++ b/telegram.getUpdate @@ -0,0 +1,27 @@ +BOTGRAM processMessage(thisObj) + +/START +{ message_id: 1351, + from: { id: 231095546, first_name: 'Juliano', last_name: 'Penna' }, + chat: + { id: 231095546, + first_name: 'Juliano', + last_name: 'Penna', + type: 'private' }, + date: 1485104064, + text: '/start', + entities: [ { type: 'bot_command', offset: 0, length: 6 } ] } + + + + +TEXT +{ message_id: 1349, + from: { id: 231095546, first_name: 'Juliano', last_name: 'Penna' }, + chat: + { id: 231095546, + first_name: 'Juliano', + last_name: 'Penna', + type: 'private' }, + date: 1485104036, + text: 'oi' }