waterline-schema
Version:
The core schema builder used in the Waterline ORM.
117 lines (103 loc) • 2.67 kB
JavaScript
var assert = require('assert');
var _ = require('@sailshq/lodash');
var SchemaBuilder = require('../lib/waterline-schema');
describe('Meta Extended Data :: ', function() {
describe('On Models', function() {
var schema;
before(function() {
var fixtures = [
{
identity: 'user',
primaryKey: 'id',
meta: {
schemaName: 'foo'
},
attributes: {
id: {
type: 'number'
},
name: {
type: 'string'
}
}
},
{
identity: 'car',
primaryKey: 'id',
attributes: {
id: {
type: 'number'
},
age: {
type: 'number'
}
}
}
];
var collections = _.map(fixtures, function(obj) {
var collection = function() {};
collection.prototype = obj;
return collection;
});
// Build the schema
schema = SchemaBuilder(collections);
});
it('should keep the meta key on the user collection', function() {
assert(schema.user.meta);
assert.equal(schema.user.meta.schemaName, 'foo');
});
it('should add an empty meta object to the car collection', function() {
assert(schema.car.meta);
assert.equal(_.keys(schema.car.meta).length, 0);
});
});
describe('On generated join tables', function() {
var schema;
before(function() {
var fixtures = [
{
identity: 'user',
primaryKey: 'id',
attributes: {
id: {
type: 'number'
},
cars: {
collection: 'car',
via: 'drivers'
}
}
},
{
identity: 'car',
primaryKey: 'id',
meta: {
schemaName: 'foo'
},
attributes: {
id: {
type: 'number'
},
drivers: {
collection: 'user',
via: 'cars',
dominant: true
}
}
}
];
var collections = _.map(fixtures, function(obj) {
var collection = function() {};
collection.prototype = obj;
return collection;
});
// Build the schema
schema = SchemaBuilder(collections);
});
it('should add the meta data to the join table', function() {
assert(schema.car_drivers__user_cars);
assert(schema.car_drivers__user_cars.meta);
assert.equal(schema.car_drivers__user_cars.meta.schemaName, 'foo');
});
});
});