Skip to content

Commit

Permalink
test: setup GUID for all models tracking changes
Browse files Browse the repository at this point in the history
Fix all test models that are tracking changes so that they have
a generated unique string id.

Make model names unique where possible to prevent tests reusing
the same model which causes unintented side effects.
  • Loading branch information
Miroslav Bajtoš committed Mar 2, 2015
1 parent 00dd943 commit f2c5af4
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 25 deletions.
10 changes: 7 additions & 3 deletions test/change.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@ describe('Change', function() {
var memory = loopback.createDataSource({
connector: loopback.Memory
});
TestModel = loopback.PersistedModel.extend('chtest', {}, {
trackChanges: true
});
TestModel = loopback.PersistedModel.extend('ChangeTestModel',
{
id: { id: true, type: 'string', defaultFn: 'guid' }
},
{
trackChanges: true
});
this.modelName = TestModel.modelName;
TestModel.attachTo(memory);
Change = TestModel.getChangeModel();
Expand Down
15 changes: 10 additions & 5 deletions test/model.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ describe('Model / PersistedModel', function() {

describe('Model.validatesUniquenessOf(property, options)', function() {
it('Ensure the value for `property` is unique', function(done) {
var User = PersistedModel.extend('user', {
var User = PersistedModel.extend('ValidatedUser', {
'first': String,
'last': String,
'age': Number,
Expand Down Expand Up @@ -72,6 +72,7 @@ describe.onServer('Remote Methods', function() {

beforeEach(function() {
User = PersistedModel.extend('user', {
id: { id: true, type: String, defaultFn: 'guid' },
'first': String,
'last': String,
'age': Number,
Expand Down Expand Up @@ -489,18 +490,18 @@ describe.onServer('Remote Methods', function() {
});
});

describe('PersistelModel remote methods', function() {
describe('PersistedModel remote methods', function() {
it('includes all aliases', function() {
var app = loopback();
var model = PersistedModel.extend('persistedModel');
var model = PersistedModel.extend('PersistedModelForAliases');
app.dataSource('db', { connector: 'memory' });
app.model(model, { dataSource: 'db' });

// this code is used by loopback-sdk-angular codegen
var metadata = app.handler('rest')
.adapter
.getClasses()
.filter(function(c) { return c.name === 'persistedModel'; })[0];
.filter(function(c) { return c.name === model.modelName; })[0];

var methodNames = [];
metadata.methods.forEach(function(method) {
Expand All @@ -509,7 +510,11 @@ describe.onServer('Remote Methods', function() {
});

expect(methodNames).to.have.members([
'destroyAll', 'deleteAll', 'remove',
// NOTE(bajtos) These three methods are disabled by default
// Because all tests share the same global registry model
// and one of the tests was enabling remoting of "destroyAll",
// this test was seeing this method (with all aliases) as public
// 'destroyAll', 'deleteAll', 'remove',
'create',
'upsert', 'updateOrCreate',
'exists',
Expand Down
3 changes: 2 additions & 1 deletion test/remote-connector.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ describe('RemoteConnector', function() {
});
},
onDefine: function(Model) {
var RemoteModel = Model.extend(Model.modelName);
var RemoteModel = Model.extend('Remote' + Model.modelName, {},
{ plural: Model.pluralModelName });
RemoteModel.attachTo(loopback.createDataSource({
connector: loopback.Memory
}));
Expand Down
22 changes: 12 additions & 10 deletions test/replication.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,16 @@ describe('Replication / Change APIs', function() {
dataSource = this.dataSource = loopback.createDataSource({
connector: loopback.Memory
});
SourceModel = this.SourceModel = PersistedModel.extend('SourceModel', {}, {
trackChanges: true
});
SourceModel = this.SourceModel = PersistedModel.extend('SourceModel',
{ id: { id: true, type: String, defaultFn: 'guid' } },
{ trackChanges: true });

SourceModel.attachTo(dataSource);

TargetModel = this.TargetModel = PersistedModel.extend('TargetModel', {}, {
trackChanges: true
});
TargetModel = this.TargetModel = PersistedModel.extend('TargetModel',
{ id: { id: true, type: String, defaultFn: 'guid' } },
{ trackChanges: true });

TargetModel.attachTo(dataSource);

test.startingCheckpoint = -1;
Expand Down Expand Up @@ -169,11 +171,11 @@ describe('Replication / Change APIs', function() {
var test = this;
this.conflict.models(function(err, source, target) {
assert.deepEqual(source.toJSON(), {
id: 1,
id: test.model.id,
name: 'source update'
});
assert.deepEqual(target.toJSON(), {
id: 1,
id: test.model.id,
name: 'target update'
});
done();
Expand Down Expand Up @@ -242,7 +244,7 @@ describe('Replication / Change APIs', function() {
this.conflict.models(function(err, source, target) {
assert.equal(source, null);
assert.deepEqual(target.toJSON(), {
id: 1,
id: test.model.id,
name: 'target update'
});
done();
Expand Down Expand Up @@ -311,7 +313,7 @@ describe('Replication / Change APIs', function() {
this.conflict.models(function(err, source, target) {
assert.equal(target, null);
assert.deepEqual(source.toJSON(), {
id: 1,
id: test.model.id,
name: 'source update'
});
done();
Expand Down
14 changes: 8 additions & 6 deletions test/util/model-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ module.exports = function defineModelTestsWithDataSource(options) {
return extendedModel;
};

User = PersistedModel.extend('user', {
User = PersistedModel.extend('UtilUser', {
id: { id: true, type: String, defaultFn: 'guid' },
'first': String,
'last': String,
'age': Number,
Expand All @@ -48,8 +49,6 @@ module.exports = function defineModelTestsWithDataSource(options) {
trackChanges: true
});

// enable destroy all for testing
User.destroyAll.shared = true;
User.attachTo(dataSource);
});

Expand Down Expand Up @@ -187,10 +186,13 @@ module.exports = function defineModelTestsWithDataSource(options) {
it('Remove a model from the attached data source', function(done) {
User.create({first: 'joe', last: 'bob'}, function(err, user) {
User.findById(user.id, function(err, foundUser) {
if (err) return done(err);
assert.equal(user.id, foundUser.id);
foundUser.destroy(function() {
User.findById(user.id, function(err, notFound) {
assert.equal(notFound, null);
User.deleteById(foundUser.id, function(err) {
if (err) return done(err);
User.find({ where: { id: user.id } }, function(err, found) {
if (err) return done(err);
assert.equal(found.length, 0);
done();
});
});
Expand Down

0 comments on commit f2c5af4

Please sign in to comment.