Skip to content

Commit 0b980c4

Browse files
committed
Fixing instance delete bug
1 parent 14874e7 commit 0b980c4

3 files changed

Lines changed: 49 additions & 4 deletions

File tree

lib/orm/apollo_error.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ var AERROR_TYPES = {
7676
},
7777
'model.value.invalidvalue' : {
7878
msg : 'Invalid Value: "%s" for Field: %s (Type: %s)'
79+
},
80+
'model.delete.invalidvalue' : {
81+
msg : 'Invalid Value: "%s" for Field: %s (Type: %s)'
7982
}
8083
};
8184

lib/orm/base_model.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ var BaseModel = function(instance_values){
5757
};
5858

5959
Object.defineProperty(this, property_name, descriptor);
60-
if(!field['virtual']){
60+
if(!field['virtual']){
6161
this[property_name] = instance_values[property_name];
6262
}
6363
}
@@ -1087,7 +1087,16 @@ BaseModel.prototype.delete = function(options, callback){
10871087
var delete_query = {};
10881088

10891089
for(var i in schema.key){
1090-
delete_query[schema.key[i]] = this[schema.key[i]];
1090+
var field_key = schema.key[i];
1091+
var field_value = this[field_key];
1092+
var field_type = schemer.get_field_type(schema,field_key);
1093+
1094+
try{
1095+
delete_query[field_key] = this.constructor._get_db_value_expression(field_key,field_value);
1096+
}
1097+
catch(e){
1098+
return callback(build_error('model.delete.invalidvalue',field_value,field_key,field_type));
1099+
}
10911100
}
10921101
this.constructor.delete(delete_query, options, callback);
10931102
};

test/test.js

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,41 @@ describe('Unit Tests', function(){
188188
});
189189
});
190190

191+
describe('#instance update after find',function(){
192+
it('should find and update single data object without errors', function(done) {
193+
models.instance.Person.findOne({userID:1234, age:32}, function(err, user){
194+
if(err) throw err;
195+
user.Name = "Updated Stupid";
196+
user.save(function(err){
197+
if(err) throw err;
198+
models.instance.Person.findOne({userID:1234, age:32}, function(err, user_new){
199+
if(err) throw err;
200+
user_new.Name.should.equal('Updated Stupid');
201+
done();
202+
});
203+
});
204+
});
205+
});
206+
});
207+
208+
describe('#instance delete after find',function(){
209+
it('should find and delete single data object without errors', function(done) {
210+
models.instance.Person.findOne({userID:1234, age:32}, function(err, user){
211+
if(err) throw err;
212+
user.delete(function(err){
213+
if(err) throw err;
214+
models.instance.Person.findOne({userID:1234, age:32}, function(err, user_new){
215+
if(err) throw err;
216+
expect(user_new).to.not.exist;
217+
done();
218+
});
219+
});
220+
});
221+
});
222+
});
223+
191224
describe('#delete',function(){
192-
it('should delete data from db without errors', function(done) {
225+
it('should cleanup the db without errors', function(done) {
193226
models.instance.Person.delete({userID:1234, age:32}, function(err){
194227
if(err) throw err;
195228
done();
@@ -198,7 +231,7 @@ describe('Unit Tests', function(){
198231
});
199232

200233
describe('#find after delete',function(){
201-
it('should find data as deleted', function(done) {
234+
it('should find all data as deleted', function(done) {
202235
models.instance.Person.find({userID: 1234}, function(err, people){
203236
if(err) throw err;
204237
people.length.should.equal(0);

0 commit comments

Comments
 (0)