11
22import { expect } from 'chai' ;
33import * as sinon from 'sinon' ;
4- import { FacebookBot } from '../src/facebook' ;
4+ import { FacebookBot , IFbMessaging } from '../src/facebook' ;
55import { IBotSettings , INewUserMessage , IBotUser , IBotController } from '../src/interfaces' ;
66
77class DummyController implements IBotController {
8- newUser ( msg : INewUserMessage ) { console . log ( 'got new user' ) ; }
9- textMessage ( textMessage : any ) { console . log ( 'got new textMessage' ) ; }
10- imageMessage ( image : any ) { console . log ( 'got new imageMessage' ) ; }
11- linkMessage ( link : any ) { console . log ( 'got linkMessage' ) ; }
12- locationMessage ( link : any ) { console . log ( 'got locationMessage' ) ; }
13- catchAll ( anything : any ) { console . log ( 'got catchAll' ) ; }
8+ cc = {
9+ newUser : 0 ,
10+ textMessage : 0 ,
11+ imageMessage : 0 ,
12+ linkMessage : 0 ,
13+ locationMessage : 0 ,
14+ delivered : 0 ,
15+ catchAll : 0 ,
16+ }
17+ newUser ( msg : INewUserMessage ) { console . log ( 'got new user' ) ; this . cc . newUser ++ ; }
18+ textMessage ( textMessage : any ) { console . log ( 'got new textMessage' ) ; this . cc . textMessage ++ ; }
19+ imageMessage ( image : any ) { console . log ( 'got new imageMessage' ) ; this . cc . imageMessage ++ ; }
20+ linkMessage ( link : any ) { console . log ( 'got linkMessage' ) ; this . cc . linkMessage ++ ; }
21+ locationMessage ( link : any ) { console . log ( 'got locationMessage' ) ; this . cc . locationMessage ++ ; }
22+ delivered ( link : any ) { console . log ( 'got delivered' ) ; this . cc . delivered ++ ; }
23+ catchAll ( anything : any ) { console . log ( 'got catchAll' ) ; this . cc . catchAll ++ ; }
1424}
1525
1626
@@ -22,29 +32,57 @@ describe('FacebookBot', () => {
2232 beforeEach ( function ( ) {
2333 ctrl = new DummyController ( ) ;
2434 bot = new FacebookBot ( fbSettings ( ) , ctrl ) ;
35+ bot . profiles [ 123 ] = {
36+ id : 123 ,
37+ firstname : 'Foo' ,
38+ lastname : 'Bar'
39+ } ;
2540 } ) ;
2641
2742 describe ( 'receiveMessage' , ( ) => {
28- it ( 'return false if message type != page' , ( ) => {
29- expect ( bot . receiveMessage ( { object : 'foo' , entry : [ ] } ) ) . to . eql ( false ) ;
43+ it ( 'return false if message type != page' , ( done ) => {
44+ let expected = 'invalid message type' ;
45+ bot . receiveMessage ( { object : 'foo' , entry : [ ] } )
46+ . catch ( err => {
47+ expect ( err ) . to . eql ( expected ) ;
48+ done ( ) ;
49+ } )
3050 } ) ;
31- it ( 'return true if message has been processed' , ( ) => {
32- expect ( bot . receiveMessage ( { object : 'page' , entry : [ ] } ) ) . to . eql ( true ) ;
33- } ) ;
34- it ( 'should dispatch each message' , ( ) => {
35- bot . receiveMessage ( fakeMessageMixed ( ) ) ;
51+ // it('return true if message has been processed', () => {
52+ // expect(bot.receiveMessage({object: 'page', entry: []})).to.eql(true);
53+ // });
54+ it ( 'should dispatch each message' , ( done ) => {
55+ bot . receiveMessage ( fakeMessageMixed ( ) )
56+ . then ( dispatchResults => {
57+ expect ( dispatchResults . length ) . to . eql ( 4 ) ;
58+ expect ( ctrl . cc . delivered ) . to . eql ( 1 ) ;
59+ expect ( ctrl . cc . textMessage ) . to . eql ( 1 ) ;
60+ expect ( ctrl . cc . imageMessage ) . to . eql ( 1 ) ;
61+ expect ( ctrl . cc . locationMessage ) . to . eql ( 1 ) ;
62+ done ( ) ;
63+ } )
3664 // just console.log testing for now :(
3765 // if anyone knows a good mocking library for typescript youre welcome :)
38- expect ( true ) . to . eql ( true ) ;
66+
3967 } ) ;
68+
69+ } ) ;
70+ describe ( 'dispatchSingleMessage' , ( ) => {
71+ it ( 'should not dispatch delivery messages to catchAll' , ( ) => {
72+ let fakeMsgs = fakeMessageMixed ( ) ,
73+ message : IFbMessaging = fakeMsgs . entry [ 0 ] . messaging [ 0 ] ;
74+ let result = bot . dispatchSingleMessage ( message , { id : '1' , firstname : 'foo' , lastname : 'bar' } ) ;
75+ expect ( ctrl . cc . delivered ) . to . eql ( 1 ) ;
76+ expect ( ctrl . cc . catchAll ) . to . eql ( 0 ) ;
4077 } ) ;
78+ } )
4179} ) ;
4280
4381
4482function fbSettings ( ) : IBotSettings {
4583 return {
4684 fb : {
47- page_id : '1442484699367623 ' ,
85+ page_id : '234 ' ,
4886 access_token : 'at1' ,
4987 verify_token : 'vt1' ,
5088 callback_path : '/facebook/receive' ,
@@ -58,15 +96,31 @@ function fakeMessageMixed() {
5896 "object" : "page" ,
5997 "entry" : [
6098 {
61- "id" : 1442484699367623 ,
99+ "id" : 234 ,
62100 "time" : 1462967781419 ,
63101 "messaging" : [
102+ {
103+ "sender" :{
104+ "id" :123
105+ } ,
106+ "recipient" :{
107+ "id" :234
108+ } ,
109+ "timestamp" :1460245672080 ,
110+ "delivery" :{
111+ "mids" :[
112+ "mid.1458668856218:ed81099e15d3f4f233"
113+ ] ,
114+ "watermark" :1458668856253 ,
115+ "seq" :37
116+ }
117+ } ,
64118 {
65119 "sender" :{
66- "id" :10208007577165870
120+ "id" :123
67121 } ,
68122 "recipient" :{
69- "id" : 1442484699367623
123+ "id" : 234
70124 } ,
71125 "timestamp" :1460245672080 ,
72126 "message" :{
@@ -77,10 +131,10 @@ function fakeMessageMixed() {
77131 } ,
78132 {
79133 "sender" :{
80- "id" :10208007577165870
134+ "id" :123
81135 } ,
82136 "recipient" :{
83- "id" : 1442484699367623
137+ "id" : 234
84138 } ,
85139 "timestamp" :1458696618268 ,
86140 "message" :{
@@ -98,10 +152,10 @@ function fakeMessageMixed() {
98152 } ,
99153 {
100154 "sender" : {
101- "id" : 10208007577165870
155+ "id" : 123
102156 } ,
103157 "recipient" : {
104- "id" : 1442484699367623
158+ "id" : 234
105159 } ,
106160 "timestamp" : 1462967781299 ,
107161 "message" : {
0 commit comments