cordova-plugin-facebook-connect
Version:
454 lines (356 loc) • 16 kB
JavaScript
/**
* Jasmine Based test suites
*
* Several of facebookConnectPlugin APIs cannot be automatically tested, because
* they depend on user interaction in order to call success or fail
* handlers. For most of them, there is a basic test that assert the presence of
* the API.
*
* There are some cases that test automation can be applied, i.e in "getLoginStatus",
* "logEvent" and "logPurchase" methods. For those cases, there is some level
* of automatic test coverage.
*/
exports.defineAutoTests = function () {
'use strict';
describe('facebookConnectPlugin', function () {
it('should be defined', function () {
expect(facebookConnectPlugin).toBeDefined();
});
describe('getLoginStatus', function () {
it('should be defined', function () {
expect(facebookConnectPlugin.getLoginStatus).toBeDefined();
});
it('should be a function', function () {
expect(typeof facebookConnectPlugin.getLoginStatus).toEqual('function');
});
it('should call success callback with status argument defined',function(done){
function onSuccess(data){
expect(data.status).toBeDefined();
done();
}
function onError(error){
expect(true).toEqual(false); // to make it fail
done();
}
facebookConnectPlugin.getLoginStatus(onSuccess,onError);
});
});
describe('showDialog', function () {
it('should be defined', function () {
expect(facebookConnectPlugin.showDialog).toBeDefined();
});
it('should be a function', function () {
expect(typeof facebookConnectPlugin.showDialog).toEqual('function');
});
});
describe('login', function () {
it('should be defined', function () {
expect(facebookConnectPlugin.login).toBeDefined();
});
it('should be a function', function () {
expect(typeof facebookConnectPlugin.login).toEqual('function');
});
});
describe('logEvent', function () {
it('should be defined', function () {
expect(facebookConnectPlugin.logEvent).toBeDefined();
});
it('should be a function', function () {
expect(typeof facebookConnectPlugin.logEvent).toEqual('function');
});
it('should succeed when called with valid arguments', function (done) {
function onSuccess(data){
expect(data).toBeDefined();
done();
}
function onError(error){
expect(true).toEqual(false); // to make it fail
done();
}
facebookConnectPlugin.logEvent('test-event',{},0,onSuccess,onError);
});
});
describe('logPurchase', function () {
it('should be defined', function () {
expect(facebookConnectPlugin.logPurchase).toBeDefined();
});
it('should be a function', function () {
expect(typeof facebookConnectPlugin.logPurchase).toEqual('function');
});
it('should succeed when called with valid currency code', function (done) {
function onSuccess(data){
expect(data).toBeDefined();
done();
}
function onError(error){
expect(true).toEqual(false); // to make it fail
done();
}
facebookConnectPlugin.logPurchase(1,'ARS',onSuccess,onError);
});
it('should fail when called with invalid currency code', function (done) {
function onSuccess(data){
expect(true).toEqual(false); // to make it fail
done();
}
function onError(error){
expect(error).toBeDefined();
done();
}
facebookConnectPlugin.logPurchase(1,'BITCOINS',onSuccess,onError);
});
});
describe('getAccessToken', function () {
it('should be defined', function () {
expect(facebookConnectPlugin.getAccessToken).toBeDefined();
});
it('should be a function', function () {
expect(typeof facebookConnectPlugin.getAccessToken).toEqual('function');
});
it('should always call success or error callback',function(done){
function onSuccess(data){
expect(data).toBeDefined();
done();
}
function onError(error){
expect(error).toBeDefined();
done(error);
}
facebookConnectPlugin.getAccessToken(onSuccess,onError);
});
});
describe('logout', function () {
it('should be defined', function () {
expect(facebookConnectPlugin.logout).toBeDefined();
});
it('should be a function', function () {
expect(typeof facebookConnectPlugin.logout).toEqual('function');
});
it('should always call success or error callback', function (done) {
function onSuccess(data){
expect(data).toBeDefined();
done();
}
function onError(error){
expect(error).toBeDefined();
done();
}
facebookConnectPlugin.logout(onSuccess,onError);
});
});
describe('api', function () {
it('should be defined', function () {
expect(facebookConnectPlugin.api).toBeDefined();
});
it('should be a function', function () {
expect(typeof facebookConnectPlugin.api).toEqual('function');
});
});
});
};
/**
* Manual tests suites
*
* Some actions buttons to execute facebookConnectPlugin methods
*/
exports.defineManualTests = function (contentEl, createActionButton) {
'use strict';
/** helper function to log a messages in the log widget */
function logMessage(message, color) {
var log = document.getElementById('info'),
logLine = document.createElement('div');
if (color) {
logLine.style.color = color;
}
logLine.innerHTML = message;
log.appendChild(logLine);
}
/** helper function to clear the log widget */
function clearLog() {
var log = document.getElementById('info');
log.innerHTML = '';
}
/** helper class to log a non implemented event */
function testNotImplemented(testName) {
return function () {
console.error(testName, 'test not implemented');
};
}
/** function called on deviceready event */
function init() {}
/** object to hold properties and configs */
var TestSuite = {};
TestSuite.$markup = '' +
'<fieldset>' +
'<legend>Authentication</legend>' +
'<h3>Login</h3>' +
'<div id="buttonLogin"></div>' +
'Expected result: should display Facebook Login widget' +
'<h3>Get Access Token</h3>' +
'<div id="buttonGetAccessToken"></div>' +
'Expected result: should display access token if the user is already logged in, otherwise should log the error' +
'<h3>Get Login Status</h3>' +
'<div id="buttonGetLoginStatus"></div>' +
'Expected result: should display login status' +
'<h3>Logout</h3>' +
'<div id="buttonLogout"></div>' +
'Expected result: should logout from test app if the user is already logged in, otherwise should log the error' +
'</fieldset>' +
'<fieldset>' +
'<legend>Publish</legend>' +
'<h3>Post To Wall</h3>' +
'<div id="buttonPostToWall"></div>' +
'Expected result: should post to the user\'s feed if the user is already logged in, otherwise should log the error' +
'<h3>Publish a Photo</h3>' +
'<div id="buttonPublishPhoto"></div>' +
'Expected result: should send photo to user\'s feed if the user is already logged in, otherwise should log the error' +
'</fieldset>' +
'<fieldset>' +
'<legend>Event</legend>' +
'Event Name: <input type="text" id="eventNameInput"><br>' +
'<h3>Log Event</h3>' +
'<div id="buttonLogEvent"></div>' +
'Expected result: should log an event with the given Event Name' +
'</fieldset>' +
'<fieldset>' +
'<legend>Purchase</legend>' +
'Amount: <input type="number" id="amountInput"><br>' +
'Currency Code: <input type="text" id="currencyCodeInput"><br>' +
'<h3>Log Purchase</h3>' +
'<div id="buttonLogPurchase"></div>' +
'Expected result: should log a purchase with the given Amount and the given Currency Code' +
'</fieldset>' +
'';
contentEl.innerHTML = '<div id="info"></div>' + TestSuite.$markup;
TestSuite.getEventName = function () {
return document.getElementById('eventNameInput').value;
};
TestSuite.getAmount = function () {
return parseInt(document.getElementById('amountInput').value);
};
TestSuite.getCurrencyCode = function () {
return document.getElementById('currencyCodeInput').value;
};
createActionButton('login', function () {
clearLog();
function onSuccess (userData) {
console.log('login succeed, userData written in log');
var message = 'User Info: ' + JSON.stringify(userData);
logMessage(message,'green');
}
function onError (error) {
console.error('login fail, error written in log');
var message = 'login error: ' + JSON.stringify(error);
logMessage(message,'red');
}
facebookConnectPlugin.login(['public_profile'],onSuccess,onError);
}, 'buttonLogin');
createActionButton('getAccessToken', function () {
clearLog();
function onSuccess(token){
console.log('getAccessToken succeed, token written in log');
var message = 'Access Token: ' + JSON.stringify(token);
logMessage(message,'green');
}
function onError(error){
console.error('getAccessToken fail, error written in log');
var message = 'getAccessToken error: ' + JSON.stringify(error);
logMessage(message,'red');
}
facebookConnectPlugin.getAccessToken(onSuccess,onError);
}, 'buttonGetAccessToken');
createActionButton('getLoginStatus', function () {
clearLog();
function onSuccess(status){
console.log('getLoginStatus succeed, statua written in log');
var message = "Login Status: " + JSON.stringify(status);
logMessage(message,'green');
}
function onError(error){
console.error('getLoginStatus fail, error written in log');
var message = 'getLoginStatus error: ' + JSON.stringify(error);
logMessage(message,'red');
}
facebookConnectPlugin.getLoginStatus(onSuccess,onError);
}, 'buttonGetLoginStatus');
createActionButton('logout', function () {
clearLog();
function onSuccess(data){
console.log('logout succeed, data written in log');
var message = "Logout data: " + JSON.stringify(data);
logMessage(message,'green');
}
function onError(error){
console.error('logout fail, error written in log');
var message = 'logout error: ' + JSON.stringify(error);
logMessage(message,'red');
}
facebookConnectPlugin.logout(onSuccess,onError);
}, 'buttonLogout');
createActionButton('showDialog', function () {
clearLog();
var options = { method:"feed" };
function onSuccess (result) {
console.log('showDialog success, data written in log');
var message = "Posted: " + JSON.stringify(result);
logMessage(message,'green');
}
function onError (error) {
console.error('showDialog fail, error written in log');
var message = 'showDialog error: ' + JSON.stringify(error);
logMessage(message,'red');
}
facebookConnectPlugin.showDialog(options,onSuccess,onError);
}, 'buttonPostToWall');
createActionButton('publishPhoto', function () {
clearLog();
var options = {
method: "feed",
name:'Test Post',
message:'First photo post'
};
function onSuccess (result) {
console.log('showDialog success, data written in log');
var message = 'Publish Photo: ' + JSON.stringify(result);
logMessage(message,'green');
}
function onError (error) {
console.error('showDialog fail, error written in log');
var message = 'showDialog error: ' + JSON.stringify(error);
logMessage(message,'red');
}
facebookConnectPlugin.showDialog(options,onSuccess,onError);
}, 'buttonPublishPhoto');
createActionButton('logEvent', function () {
clearLog();
var eventName = TestSuite.getEventName();
function onSuccess(data) {
console.log('logEvent success, data written in console');
var message = 'logEvent data: ' + JSON.stringify(data);
logMessage(message,'green');
}
function onError (error) {
console.error('logEvent fail, error written in console');
var message = 'logEvent error: ' + JSON.stringify(error);
logMessage(message,'red');
}
facebookConnectPlugin.logEvent(eventName,{},0,onSuccess,onError);
}, 'buttonLogEvent');
createActionButton('logPurchase', function () {
clearLog();
var purchaseAmount = TestSuite.getAmount();
var currencyCode = TestSuite.getCurrencyCode();
function onSuccess(data) {
console.log('logPurchase success, data written in console');
var message = 'logPurchase data: ' + JSON.stringify(data);
logMessage(message,'green');
}
function onError (error) {
console.error('logPurchase fail, error written in console');
var message = 'logPurchase error: ' + JSON.stringify(error);
logMessage(message,'red');
}
facebookConnectPlugin.logPurchase(purchaseAmount,currencyCode,onSuccess,onError);
}, 'buttonLogPurchase');
document.addEventListener('deviceready', init, false);
};