text: 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);
        });
      });
    });
  });
  