Please don't be afraid of reading Sencha own code...

This is the override for the use case failing about reverting/reject/undoing/resurrecting a model deleted from a store.


From Store:



Code:



rejectChanges : function() {
var me = this,
recs = me.getRejectRecords(),
len = recs.length,
i = 0,
rec;


for (; i < len; i++) {
rec = recs[i];
rec.reject();
if (rec.phantom) {
me.remove(rec);
}
}


// Restore removed records back to their original positions
recs = me.removed;
if (recs) {
len = recs.length;
for (i = len-1; i >= 0; i--) {
rec = recs[i];
me.insert(rec.removedFrom || 0, rec);
rec.reject();
}


// Since removals are cached in a simple array we can simply reset it here.
// Adds and updates are managed in the data MixedCollection and should already be current.
recs.length = 0;
}
}



From Model:


Code:



reject: function (silent) {
var me = this,
modified = me.modified;


me.rejecting = true;
if (modified) {
me.set(modified, me._rejectOptions);
}
delete me.rejecting;


me.clearState();


if (!silent) {
me.callJoined('afterReject');
}
},


Code:



Ext.define('Ext.override.Model', {
override: 'Ext.data.Model',
clearState: function () {
var me = this;


me.dirty = me.editing = me.dropped = false; // Sencha bug, handling 'dropped' state
me.editMemento = me.modified = null;
}
});

It's very unlikely this use case would have been missed if using TDD.