getUniqueUsername.then(function( context ) {
                var userObj = {
                    firstName: 'John',
                    lastName: 'Doe',
                    username: context.username,
                    email: context.username,
                    password: passwordHash.generate('12345678'),
                    isStaff: false
                };

                var createNewUser = require('controllers/authentication/helpers/_createNewUser.js');
                var getNewUser = createNewUser(userObj);

                getNewUser.then(function( user ) {
                    try {
                        var fields = 'username, firstName, lastName';
                        var result = helpers.cleanModel(user, fields);

                        assert.deepEqual(result, {
                            firstName: 'John',
                            lastName: 'Doe',
                            username: '******' + context.token + '@example.com'
                        });

                        return done();
                    }
                    catch( error ) {
                        return done(error);
                    }
                });

                getNewUser.fail(function( errorObj ) {
                    var error = new Error('New user failed');
                    return done(error);
                });
            });
            getUniqueUsername.then(function( context ) {
                try {
                    var userObj = {
                        firstName: 'John',
                        lastName: 'Doe',
                        username: context.username,
                        email: context.username,
                        password: passwordHash.generate('12345678'),
                        isStaff: false
                    };

                    var createNewUser = require('controllers/authentication/helpers/_createNewUser.js');
                    var getNewUser = createNewUser(userObj);

                    getNewUser.then(function( user ) {
                        // TODO: Get a auto renewed token with graph.facebook.com/oauth/access_token
                        // https://developers.facebook.com/docs/graph-api/reference/v2.5/app/accounts/test-users

                        var getAccessToken = helpers.getFacebookTestUserAccessToken();

                        getAccessToken.then(function( accessToken ) {
                            var userId = nconf.get('facebook:user:id');

                            var request = httpMocks.createRequest();
                            var response = httpMocks.createResponse({
                                eventEmitter: require('events').EventEmitter
                            });

                            response.on('end', function() {
                                if( this.statusCode == 200 ) {
                                    done();
                                }
                                else {
                                    var error = new Error('Something went wrong (' + this.statusCode + ')');
                                    done(error);
                                }
                            });

                            request.body.authToken = '';
                            request.body.accessToken = accessToken;
                            request.body.userId = userId;
                            request.body.username = user.username;

                            var addFacebook = require('../../partials/_add_facebook.js').add;
                            addFacebook( request, response );
                        });

                        getAccessToken.fail(function( errorObj ) {
                            var error = new Error('Token fetch failed');
                            return done(error);
                        });
                    });

                    getNewUser.fail(function( errorObj ) {
                        var error = new Error('New user failed');
                        return done(error);
                    });
                }
                catch( error ) {
                    return done(error);
                }
            });