123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- var assert = require('assert');
- var _ = require('@sailshq/lodash');
- var Waterline = require('../../lib/waterline');
- var MigrateHelper = require('../support/migrate.helper');
- describe.skip('Alter Mode Recovery with schemaless data', function () {
- var record;
- // Create an adapter and set some existing data
- before(function (done) {
- // Hold data to be used in tests
- var persistentData = [{
- id: 1,
- name: 'batman',
- car: 'batmobile',
- age: 50
- }];
- var adapter = {
- registerDatastore: function (connection, collections, cb) {
- cb(null, null);
- },
- define: function (connectionName, collectionName, definition, cb) {
- this.describe(connectionName, collectionName, function (err, schema) {
- cb(null, schema);
- });
- },
- describe: function (connectionName, collectionName, cb, connection) {
- var schema = {
- name: { type: 'string' },
- age: { type: 'number' }
- };
- cb(null, (persistentData.length === 1) ? schema : undefined);
- },
- find: function (connectionName, collectionName, options, cb, connection) {
- if(!options.select && !options.where) {
- return cb(null, persistentData);
- }
- var results;
- if(!options.where) {
- results = persistentData;
- }
- else {
- results = _.filter(persistentData, options.where);
- }
- // Psuedo support for select (needed to act like a real adapter)
- if(options.select) {
- // Force ID in query
- options.select.push('id');
- results = _.map(results, function(result) {
- return _.pick(result, options.select);
- });
- }
- cb(null, results);
- },
- create: function (connectionName, collectionName, data, cb, connection) {
- persistentData.push(data);
- cb(null, data);
- },
- drop: function (connectionName, collectionName, relations, cb, connection) {
- persistentData = [];
- cb(null);
- }
- };
- var waterline = new Waterline();
- // Build up a model to test
- var PersonModel = {
- identity: 'Person',
- tableName: 'person_table',
- datastore: 'test_alter',
- migrate: 'alter',
- adapter: 'fake',
- schema: false,
- attributes: {
- name: 'string',
- age: 'integer',
- id: 'integer'
- }
- };
- // Create a connection using the stub adapter we created above
- var connections = {
- 'test_alter': {
- adapter: 'fake'
- }
- };
- // Build up the named adapters object
- var adapters = {fake: adapter};
- // Build the collections and find the record
- var PersonCollection = Waterline.Model.extend(PersonModel);
- waterline.registerModel(PersonCollection);
- waterline.initialize({adapters: adapters, datastores: connections}, function (err, data) {
- if (err) return done(err);
- MigrateHelper(data, function(err) {
- data.collections.person.findOne({id: 1}, function (err, found) {
- if (err) return done(err);
- record = found;
- done();
- });
- });
- });
- });
- it('should keep data already in the data store', function() {
- assert(record);
- });
- it('should include the attributes in the schema', function() {
- assert.equal(record.id, 1);
- assert.equal(record.name, 'batman');
- assert.equal(record.age, 50);
- });
- it.skip('should include the attributes NOT in the schema', function() {
- assert.equal(record.car, 'batmobile');
- });
- });
|