// Copyright IBM Corp. 2014,2016. All Rights Reserved. // Node module: loopback-connector-mysql // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT 'use strict'; var assert = require('assert'); require('./init'); var ds; before(function() { ds = getDataSource(); }); describe('MySQL connector', function() { it('should auto migrate/update tables', function(done) { var schema_v1 = { 'name': 'CustomerTest', 'options': { 'idInjection': false, 'mysql': { 'schema': 'myapp_test', 'table': 'customer_test', }, }, 'properties': { 'id': { 'type': 'String', 'length': 20, 'id': 1, }, 'name': { 'type': 'String', 'required': false, 'length': 40, }, 'email': { 'type': 'String', 'required': true, 'length': 40, }, 'age': { 'type': 'Number', 'required': false, }, }, }; var schema_v2 = { 'name': 'CustomerTest', 'options': { 'idInjection': false, 'mysql': { 'schema': 'myapp_test', 'table': 'customer_test', }, }, 'properties': { 'id': { 'type': 'String', 'length': 20, 'id': 1, }, 'email': { 'type': 'String', 'required': false, 'length': 60, 'mysql': { 'columnName': 'email', 'dataType': 'varchar', 'dataLength': 60, 'nullable': 'YES', }, }, 'firstName': { 'type': 'String', 'required': false, 'length': 40, }, 'lastName': { 'type': 'String', 'required': false, 'length': 40, }, }, }; ds.createModel(schema_v1.name, schema_v1.properties, schema_v1.options); ds.automigrate(function() { ds.discoverModelProperties('customer_test', function(err, props) { assert.equal(props.length, 4); var names = props.map(function(p) { return p.columnName; }); assert.equal(props[0].nullable, 'N'); assert.equal(props[1].nullable, 'Y'); assert.equal(props[2].nullable, 'N'); assert.equal(props[3].nullable, 'Y'); assert.equal(names[0], 'id'); assert.equal(names[1], 'name'); assert.equal(names[2], 'email'); assert.equal(names[3], 'age'); ds.createModel(schema_v2.name, schema_v2.properties, schema_v2.options); ds.autoupdate(function(err, result) { ds.discoverModelProperties('customer_test', function(err, props) { assert.equal(props.length, 4); var names = props.map(function(p) { return p.columnName; }); assert.equal(names[0], 'id'); assert.equal(names[1], 'email'); assert.equal(names[2], 'firstName'); assert.equal(names[3], 'lastName'); done(err, result); }); }); }); }); }); it('should report errors for automigrate', function(done) { ds.automigrate('XYZ', function(err) { assert(err); done(); }); }); it('should report errors for autoupdate', function(done) { ds.autoupdate('XYZ', function(err) { assert(err); done(); }); }); });