Skip to content

Instantly share code, notes, and snippets.

@DracoBlue
Created June 19, 2011 18:33
Show Gist options
  • Save DracoBlue/1034569 to your computer and use it in GitHub Desktop.
Save DracoBlue/1034569 to your computer and use it in GitHub Desktop.
new TestSuite("services.UserService", {
createUpdateDelete: function() {
var that = this;
var user_service = service_manager.get('User');
var test_data_key = 'name';
var test_data_key_getter = 'getName';
var test_data_initial_value = 'MyName';
var test_data_updated_value = 'MyUpdatedName';
return function(cb) {
var user_id = null;
var user = null;
chain(function(chain_cb) {
/*
* Let's create a new user
*/
var creation_parameters = {};
creation_parameters[test_data_key] = test_data_initial_value;
user_service.createUser(function(error, new_user_id) {
equal(error, false);
user_id = new_user_id;
that.debug('last_insert_id', user_id);
chain_cb();
}, creation_parameters);
}, function(chain_cb) {
/*
* Now let's try to find the created one again
*/
user_service.getUserById(function(found_user) {
equal(typeof user !== 'undefined', true);
user = found_user;
equal(user[test_data_key_getter](), test_data_initial_value);
chain_cb();
}, user_id);
}, function(chain_cb) {
/*
* Now let's update it
*/
var update_parameters = {};
update_parameters[test_data_key] = test_data_updated_value;
user_service.updateUser(function(error, affected_rows) {
equal(error, false);
equal(affected_rows, 1);
chain_cb();
}, user, update_parameters);
}, function(chain_cb) {
/*
* Now let's see if we find that row again, with new
* values
*/
user_service.getUserById(function(found_user) {
equal(typeof found_user !== 'undefined', true);
equal(found_user[test_data_key_getter](), test_data_updated_value);
chain_cb();
}, user_id);
}, function(chain_cb) {
/*
* Let's remove the created one now!
*/
user_service.deleteUser(function(error, affected_rows) {
equal(error, false);
equal(affected_rows, 1);
chain_cb();
}, user);
}, function(chain_cb) {
/*
* Now let's see if it's removed!
*/
user_service.getUserById(function(found_user) {
equal(typeof found_user, 'undefined');
chain_cb();
}, user_id);
}, function(chain_cb) {
/*
* Now let's see if an update doesn't update anything
*/
var update_parameters = {};
update_parameters[test_data_key] = test_data_initial_value;
user_service.updateUser(function(error, affected_rows) {
equal(error, false);
equal(affected_rows, 0);
chain_cb();
}, user, update_parameters);
}, function() {
cb();
})
};
}
});
/**
* @module UserService
*
* @extends Logging
*/
extend(true, exports, Logging.prototype);
exports.logging_prefix = 'UserService';
var assert = require('assert');
var initialized = false;
var User = function(initial_values) {
this.values = initial_values || {};
};
User.prototype.getId = function() {
return this.values['id'];
};
User.prototype.getName = function() {
return this.values['name'];
};
User.prototype.getFirstName = function() {
return this.values['first_name'];
};
exports.initialize = function() {
this.trace('initialize', arguments);
if (initialized)
{
throw new Error('Already initialized!');
}
initialized = true;
this.addTracing();
var database_connection_name = config.get('user', {}).database_connection;
this.database_connection = database_manager.getDatabase(database_connection_name);
};
exports.getUserById = function(cb, id) {
assert.equal(typeof cb, 'function', 'First parameter must be a callback!');
this.database_connection.selectTableRows('users', 'id = ?', [id])(function(error, results) {
if (results.length === 0) {
cb();
} else {
cb(new User(results[0]));
}
});
};
exports.updateUser = function(cb, user, values) {
assert.equal(typeof cb, 'function', 'First parameter must be a callback!');
this.database_connection.updateTableRows('users', values, 'id = ?', [user.getId()])(function(error, affected_rows) {
cb(error, affected_rows);
});
};
exports.deleteUser = function(cb, user) {
assert.equal(typeof cb, 'function', 'First parameter must be a callback!');
this.database_connection.deleteTableRows('users', 'id = ?', [user.getId()])(function(error, affected_rows) {
cb(error, affected_rows);
});
};
exports.createUser = function(cb, values) {
assert.equal(typeof cb, 'function', 'First parameter must be a callback!');
this.database_connection.createTableRow('users', values)(function(error, last_insert_id) {
cb(error, last_insert_id);
});
};
/*
* Initialize the Module
*/
exports.initialize();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment