diff --git a/jquery-mockjax/jquery-mockjax-tests.ts b/jquery-mockjax/jquery-mockjax-tests.ts new file mode 100644 index 0000000000..6fae52eb07 --- /dev/null +++ b/jquery-mockjax/jquery-mockjax-tests.ts @@ -0,0 +1,172 @@ +/// +/// +/// + +class Tests { + private _noErrorCallbackExpected: (jqXHR: JQueryXHR, textStatus: string, errorThrown: string) => any; + private _defaultMockjaxSettings: MockJaxSettings; + + run(): void { + const self = this; + + var t = QUnit.test; + + QUnit.begin(() => { + + self._noErrorCallbackExpected = (jqXHR: JQueryXHR, textStatus: string, errorThrown: string): any => { + QUnit.assert.ok(false, 'Error callback executed'); + }; + + // Speed up our tests + $.mockjaxSettings.responseTime = 0; + $.mockjaxSettings.logging = false; + self._defaultMockjaxSettings = $.mockjaxSettings; + }); + + QUnit.testDone(() => { + $.mockjax.clear(); + $.mockjaxSettings = self._defaultMockjaxSettings; + }); + + QUnit.module('Core'); + + t('Return XMLHttpRequest object from $.ajax', (assert) => { + $.mockjax({ + url: '/xmlhttprequest', + responseText: 'Hello Word' + }); + + var xhr = $.ajax({ + url: '/xmlhttprequest', + complete: () => { } + }); + + if (xhr && xhr.abort) { + xhr.abort(); + } + + assert.ok(xhr, 'XHR object is not null or undefined'); + assert.ok(xhr.done && xhr.fail, 'Got Promise methods'); + }); + + t('Intercept synchronized proxy calls and return synchronously', (assert) => { + $.mockjax({ + url: '/proxy', + proxy: 'test_proxy.json' + }); + + $.ajax({ + url: '/proxy', + dataType: 'json', + async: false, + success: (json) => { + assert.ok(json && json.proxy, 'Proxy callback request succeeded'); + }, + error: self._noErrorCallbackExpected + }); + }); + + t('Intercept asynchronized proxy calls', (assert) => { + var done = assert.async(); + $.mockjax({ + url: '/proxy', + proxy: 'test_proxy.json' + }); + + $.ajax({ + url: '/proxy', + dataType: 'json', + success: (json) => { + assert.ok(json && json.proxy, 'Proxy callback request succeeded'); + done(); + }, + error: self._noErrorCallbackExpected + }); + }); + + t('Intercept and proxy (sub-ajax request)', (assert) => { + var done = assert.async(); + + $.mockjax({ + url: '/proxy', + proxy: 'test_proxy.json' + }); + + $.ajax({ + url: '/proxy', + dataType: 'json', + success: (json) => { + assert.ok(json && json.proxy, 'Proxy request succeeded'); + }, + error: self._noErrorCallbackExpected, + complete: done + }); + }); + + t('Proxy type specification', (assert) => { + var done = assert.async(); + + $.mockjax({ + url: '/proxy', + proxy: 'test_proxy.json', + proxyType: 'GET' + }); + + $.ajax({ + url: '/proxy', + error: self._noErrorCallbackExpected, + dataType: 'json', + success: (json) => { + assert.ok(json && json.proxy, 'Proxy request succeeded'); + }, + complete: done + }); + }); + + t('Support 1.5 $.ajax(url, settings) signature.', (assert) => { + var done = assert.async(); + + $.mockjax({ + url: '/resource', + responseText: 'Hello World' + }); + + $.ajax('/resource', { + success: (response) => { + assert.equal(response, 'Hello World'); + }, + error: self._noErrorCallbackExpected, + complete: done + }); + }); + + t('Dynamic response callback', (assert) => { + var done = assert.async(); + + var settings: MockJaxSettings = { + url: '/response-callback', + response: (settings) => { + settings.responseText = settings.data.response + ' 2'; + } + }; + + $.mockjax(settings); + + $.ajax({ + url: '/response-callback', + dataType: 'text', + data: { + response: 'Hello world' + }, + error: self._noErrorCallbackExpected, + complete: (xhr) => { + assert.equal(xhr.responseText, 'Hello world 2', 'Response Text matches'); + done(); + } + }); + }); + } +} + +var tests = new Tests(); +tests.run(); diff --git a/jquery-mockjax/jquery-mockjax.d.ts b/jquery-mockjax/jquery-mockjax.d.ts new file mode 100644 index 0000000000..a86bd856c6 --- /dev/null +++ b/jquery-mockjax/jquery-mockjax.d.ts @@ -0,0 +1,47 @@ +// Type definitions for jQuery Mockjax 2.0.1 +// Project: https://github.com/jakerella/jquery-mockjax +// Definitions by: Laszlo Jakab , Vladimir Đokić +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +interface MockJaxSettingsHeaders { + [key: string]: string; +} + +interface MockJaxSettings { + url?: string | RegExp; + data?: any; + type?: string; + headers?: MockJaxSettingsHeaders; + logging?: boolean; + status?: number; + statusText?: string; + responseTime?: number; + isTimeout?: boolean; + contentType?: string; + response?: (settings: any) => void; + responseText?: string | Object; + responseXml?: string; + proxy?: string; + proxyType?: string; + lastModified?: string; + etag?: string; + onAfterSuccess?: Function; + onAfterError?: Function; + onAfterComplete?: Function; +} + +interface MockJaxStatic { + (options: MockJaxSettings): number; + handler(id?: number): any; + clear(id?: number): void; + mockedAjaxCalls(): any[]; + unfiredHandlers(): any[]; + unmockedAjaxCalls(): any[]; +} + +interface JQueryStatic { + mockjax: MockJaxStatic; + mockjaxSettings: MockJaxSettings; +}