import sinon = require("sinon"); import jquery = require("jquery"); export interface JQueryMock extends sinon.SinonStub { get: sinon.SinonStub; post: sinon.SinonStub; ajax: sinon.SinonStub; notify: sinon.SinonStub; } export interface JQueryElementsMock { ready: sinon.SinonStub; show: sinon.SinonStub; hide: sinon.SinonStub; html: sinon.SinonStub; addClass: sinon.SinonStub; removeClass: sinon.SinonStub; fadeIn: sinon.SinonStub; fadeOut: sinon.SinonStub; on: sinon.SinonStub; } export interface JQueryDeferredMock { done: sinon.SinonStub; fail: sinon.SinonStub; } export function JQueryMock(): { jquery: JQueryMock, element: JQueryElementsMock } { const jquery = sinon.stub() as any; const jqueryInstance: JQueryElementsMock = { ready: sinon.stub(), show: sinon.stub(), hide: sinon.stub(), html: sinon.stub(), addClass: sinon.stub(), removeClass: sinon.stub(), fadeIn: sinon.stub(), fadeOut: sinon.stub(), on: sinon.stub() }; jquery.ajax = sinon.stub(); jquery.get = sinon.stub(); jquery.post = sinon.stub(); jquery.notify = sinon.stub(); jquery.returns(jqueryInstance); return { jquery: jquery, element: jqueryInstance }; } export function JQueryDeferredMock(): JQueryDeferredMock { return { done: sinon.stub(), fail: sinon.stub() }; }