test: separate assertions from test flow control

This commit is contained in:
Ryan Graham 2016-08-05 10:49:09 -07:00
parent 9ad29ddbaa
commit 5a7cac6852
No known key found for this signature in database
GPG Key ID: F15A82CDEFD85858
1 changed files with 56 additions and 44 deletions

View File

@ -211,55 +211,67 @@ describe('Discover model foreign keys', function () {
}); });
describe('Discover LDL schema from a table', function () { describe('Discover LDL schema from a table', function () {
it('should return an LDL schema for INVENTORY', function (done) { var schema;
db.discoverSchema('INVENTORY', {owner: 'STRONGLOOP'}, function (err, schema) { before(function (done) {
var productId = 'productId' in schema.properties ? 'productId' : 'productid'; db.discoverSchema('INVENTORY', {owner: 'STRONGLOOP'}, function (err, schema_) {
var locationId = 'locationId' in schema.properties ? 'locationId' : 'locationid'; schema = schema_;
console.error('schema:', schema); done(err);
assert.strictEqual(schema.name, 'Inventory');
assert.ok(/STRONGLOOP/i.test(schema.options.mysql.schema));
assert.strictEqual(schema.options.mysql.table, 'INVENTORY');
assert(schema.properties[productId]);
// TODO: schema shows this field is default NULL, which means it isn't required
// assert(schema.properties[productId].required);
assert.strictEqual(schema.properties[productId].type, 'String');
assert.strictEqual(schema.properties[productId].mysql.columnName, 'productId');
assert(schema.properties[locationId]);
assert.strictEqual(schema.properties[locationId].type, 'String');
assert.strictEqual(schema.properties[locationId].mysql.columnName, 'locationId');
assert(schema.properties.available);
assert.strictEqual(schema.properties.available.required, false);
assert.strictEqual(schema.properties.available.type, 'Number');
assert(schema.properties.total);
assert.strictEqual(schema.properties.total.type, 'Number');
done(null, schema);
}); });
}); });
it('should return an LDL schema for INVENTORY', function () {
var productId = 'productId' in schema.properties ? 'productId' : 'productid';
var locationId = 'locationId' in schema.properties ? 'locationId' : 'locationid';
console.error('schema:', schema);
assert.strictEqual(schema.name, 'Inventory');
assert.ok(/STRONGLOOP/i.test(schema.options.mysql.schema));
assert.strictEqual(schema.options.mysql.table, 'INVENTORY');
assert(schema.properties[productId]);
// TODO: schema shows this field is default NULL, which means it isn't required
// assert(schema.properties[productId].required);
assert.strictEqual(schema.properties[productId].type, 'String');
assert.strictEqual(schema.properties[productId].mysql.columnName, 'productId');
assert(schema.properties[locationId]);
assert.strictEqual(schema.properties[locationId].type, 'String');
assert.strictEqual(schema.properties[locationId].mysql.columnName, 'locationId');
assert(schema.properties.available);
assert.strictEqual(schema.properties.available.required, false);
assert.strictEqual(schema.properties.available.type, 'Number');
assert(schema.properties.total);
assert.strictEqual(schema.properties.total.type, 'Number');
});
}); });
describe('Discover and build models', function () { describe('Discover and build models', function () {
it('should discover and build models', function (done) { var models;
db.discoverAndBuildModels('INVENTORY', {owner: 'STRONGLOOP', visited: {}, associations: true}, function (err, models) { before(function (done) {
assert(models.Inventory, 'Inventory model should be discovered and built'); db.discoverAndBuildModels('INVENTORY', {owner: 'STRONGLOOP', visited: {}, associations: true}, function (err, models_) {
var schema = models.Inventory.definition; models = models_;
var productId = 'productId' in schema.properties ? 'productId' : 'productid'; done(err);
var locationId = 'locationId' in schema.properties ? 'locationId' : 'locationid'; });
assert(/STRONGLOOP/i.test(schema.settings.mysql.schema)); });
assert.strictEqual(schema.settings.mysql.table, 'INVENTORY'); it('should discover and build models', function () {
assert(schema.properties[productId]); assert(models.Inventory, 'Inventory model should be discovered and built');
assert.strictEqual(schema.properties[productId].type, String); var schema = models.Inventory.definition;
assert.strictEqual(schema.properties[productId].mysql.columnName, 'productId'); var productId = 'productId' in schema.properties ? 'productId' : 'productid';
assert(schema.properties[locationId]); var locationId = 'locationId' in schema.properties ? 'locationId' : 'locationid';
assert.strictEqual(schema.properties[locationId].type, String); assert(/STRONGLOOP/i.test(schema.settings.mysql.schema));
assert.strictEqual(schema.properties[locationId].mysql.columnName, 'locationId'); assert.strictEqual(schema.settings.mysql.table, 'INVENTORY');
assert(schema.properties.available); assert(schema.properties[productId]);
assert.strictEqual(schema.properties.available.type, Number); assert.strictEqual(schema.properties[productId].type, String);
assert(schema.properties.total); assert.strictEqual(schema.properties[productId].mysql.columnName, 'productId');
assert.strictEqual(schema.properties.total.type, Number); assert(schema.properties[locationId]);
models.Inventory.findOne(function (err, inv) { assert.strictEqual(schema.properties[locationId].type, String);
assert(!err, 'error should not be reported'); assert.strictEqual(schema.properties[locationId].mysql.columnName, 'locationId');
done(); assert(schema.properties.available);
}); assert.strictEqual(schema.properties.available.type, Number);
assert(schema.properties.total);
assert.strictEqual(schema.properties.total.type, Number);
});
it('should be able to find an instance', function (done) {
assert(models.Inventory, 'Inventory model must exist');
models.Inventory.findOne(function (err, inv) {
assert(!err, 'error should not be reported');
done();
}); });
}); });
}); });