Mailspring/app/spec_disabled/tasks/destroy-model-task-spec.es6
2017-09-26 11:33:08 -07:00

77 lines
2.3 KiB
JavaScript

import { Model, DatabaseStore, DestroyModelTask, DatabaseWriter } from 'nylas-exports';
xdescribe('DestroyModelTask', function destroyModelTask() {
beforeEach(() => {
this.existingModel = new Model();
this.existingModel.id = 'local-123';
spyOn(DatabaseWriter.prototype, 'unpersistModel');
spyOn(DatabaseStore, 'findBy').andCallFake(() => {
return Promise.resolve(this.existingModel);
});
this.defaultArgs = {
id: 'local-123',
accountId: 'a123',
modelName: 'Model',
endpoint: '/endpoint',
};
});
it('constructs without error', () => {
const t = new DestroyModelTask();
expect(t._rememberedToCallSuper).toBe(true);
});
describe('performLocal', () => {
it('throws if basic fields are missing', () => {
const t = new DestroyModelTask();
try {
t.performLocal();
throw new Error("Shouldn't succeed");
} catch (e) {
expect(e.message).toMatch(/^Must pass.*/);
}
});
it("throws if the model name can't be found", () => {
this.defaultArgs.modelName = 'dne';
const t = new DestroyModelTask(this.defaultArgs);
try {
t.performLocal();
throw new Error("Shouldn't succeed");
} catch (e) {
expect(e.message).toMatch(/^Couldn't find the class for.*/);
}
});
it("throws if it can't find the object", () => {
jasmine.unspy(DatabaseStore, 'findBy');
spyOn(DatabaseStore, 'findBy').andCallFake(() => {
return Promise.resolve(null);
});
const t = new DestroyModelTask(this.defaultArgs);
window.waitsForPromise(() => {
return t
.performLocal()
.then(() => {
throw new Error("Shouldn't succeed");
})
.catch(err => {
expect(err.message).toMatch(/^Couldn't find the model with id.*/);
});
});
});
it('unpersists the new existing model properly', () => {
const unpersistFn = DatabaseWriter.prototype.unpersistModel;
const t = new DestroyModelTask(this.defaultArgs);
window.waitsForPromise(() => {
return t.performLocal().then(() => {
expect(unpersistFn).toHaveBeenCalled();
const model = unpersistFn.calls[0].args[0];
expect(model).toBe(this.existingModel);
});
});
});
});
});