help-fem
Version:
A Browserify/Node.js client module for the Help.com team's FEM.
132 lines (120 loc) • 2.89 kB
JavaScript
;
var test = require('tap').test;
var server = require('../fixtures/server');
var HelpFem = require('../../');
var uuid = require('uuid');
var seventNames = require('../fixtures/server-session-events');
var ceventNames = require('../fixtures/server-chat-events');
var ssevents = [
'login',
'dumpState',
'chat status',
'customer sonar pong',
'user sonar pong',
'transfer request',
'transfer response',
'notification',
'mission control get version result',
'update organization settings result'
];
var scevents = [
'join',
'leave',
'message'
];
var events = {
open: 'open',
close: 'close',
'server session event': {
start: 'start',
logout: 'logout',
end: 'end',
login: 'login'
},
'server chat event': {
start: 'chatStart'
}
};
function getEvents(evs) {
return evs.reduce(function(set, e) {
set[e] = e.replace(/ /g, '');
return set;
}, {});
}
test('help-fem', function(t) {
t.plan(7 + seventNames.length + ceventNames.length);
var client;
if (server.isListening) {
createClient();
} else {
server.once('listening', createClient);
}
function createClient() {
var Client = HelpFem.Client.extend({
events: events,
open: function() {
t.ok('got open event', 'got open event');
testSession(function() {
testChat(function() {
client.socket.close();
});
});
},
close: function() {
t.ok('got close event', 'got close event');
server.close();
},
start: function() {
t.ok('got start event', 'got start event');
},
logout: function() {
t.ok('got logout event', 'got logout event');
},
end: function() {
t.ok('got end event', 'got end event');
},
login: function() {
t.ok('got login event', 'got login event');
},
chatStart: function() {
t.ok('got chat start event', 'got chat start event');
}
});
client = new Client({
uri: 'http://127.0.0.1:8000',
organizationId: 'start',
context: {}
});
}
function testSession(cb) {
;(function run() {
var name = seventNames.shift();
if (!name) {
return cb();
}
send('session', name, run);
})();
}
function testChat(cb) {
;(function run() {
var name = ceventNames.shift();
if (!name) {
return cb();
}
send('chat', name, run);
})();
}
function send(type, name, cb) {
if (name === 'dumpState' || name === 'chatAndAvailabilityDetails') {
client[type][name](function(err, res) {
t.ok(true, 'got ' + type + ':' + name + 'response');
cb();
});
} else {
client[type][name]({}, function(err, res) {
t.ok(true, 'got ' + type + ':' + name + 'response');
cb();
});
}
}
});