waterline
Version:
An ORM for Node.js and the Sails framework
105 lines (89 loc) • 2.91 kB
JavaScript
var assert = require('assert');
var _ = require('@sailshq/lodash');
var Schema = require('waterline-schema');
var Waterline = require('../../../../lib/waterline');
var Transformer = require('../../../../lib/waterline/utils/system/transformer-builder');
describe('Collection Transformations ::', function() {
describe('Serialize ::', function() {
describe('with normal key/value pairs', function() {
var transformer;
before(function() {
var attributes = {
name: 'string',
username: {
columnName: 'login'
}
};
transformer = new Transformer(attributes, {});
});
it('should change username key to login', function() {
var values = { username: 'foo' };
transformer.serializeValues(values);
assert(values.login);
assert.equal(values.login, 'foo');
});
it('should work recursively', function() {
var values = transformer.serializeCriteria({ where: { user: { username: 'foo' }}});
assert(values.where.user.login);
assert.equal(values.where.user.login, 'foo');
});
it('should work on SELECT queries', function() {
var values = transformer.serializeCriteria(
{
where: {
username: 'foo'
},
select: ['username']
}
);
assert(values.where.login);
assert.equal(_.indexOf(values.select, 'login'), 0);
});
});
describe('with associations', function() {
var transformer;
/**
* Build up real waterline schema for accurate testing
*/
before(function() {
var collections = [];
collections.push(Waterline.Model.extend({
identity: 'customer',
tableName: 'customer',
primaryKey: 'uuid',
attributes: {
uuid: {
type: 'string'
}
}
}));
collections.push(Waterline.Model.extend({
identity: 'foo',
tableName: 'foo',
primaryKey: 'id',
attributes: {
id: {
type: 'number'
},
customer: {
model: 'customer'
}
}
}));
var schema = new Schema(collections);
transformer = new Transformer(schema.foo.attributes, schema.schema);
});
it('should change customer key to customer_uuid', function() {
var values = { customer: 1 };
transformer.serializeValues(values);
assert(values.customer);
assert.equal(values.customer, 1);
});
it('should work recursively', function() {
var values = transformer.serializeCriteria({ where: { user: { customer: 1 }}});
assert(values.where.user.customer);
assert.equal(values.where.user.customer, 1);
});
});
});
});