http-post-message/test/httpPostMessage.spec.ts

291 строка
8.4 KiB
TypeScript

import * as hpm from '../src/httpPostMessage';
describe("HttpPostMessage", function () {
let windowPostMessageProxy: hpm.IPostMessage;
let httpPostMessage: hpm.HttpPostMessage;
const postMessage = (message: any): Promise<any> => {
return Promise.resolve(message);
};
const postMessageSpy = jasmine.createSpy("postMessageSpy").and.callFake(postMessage);
beforeAll(function () {
windowPostMessageProxy = {
postMessage: postMessageSpy
};
httpPostMessage = new hpm.HttpPostMessage(windowPostMessageProxy, {}, window);
});
beforeEach(function () {
// emtpy
});
afterEach(function () {
postMessageSpy.calls.reset();
});
afterAll(function () {
// empty
});
it("get() calls windowPostMessageProxy.postMessage with GET request", function () {
// Arrange
const expectedRequest = {
method: "GET",
url: 'report/pages',
headers: {}
};
// Act
httpPostMessage.get(expectedRequest.url);
// Assert
expect(postMessageSpy).toHaveBeenCalledWith(window, expectedRequest);
});
it("post() calls windowPostMessageProxy.postMessage with POST request", function () {
// Arrange
const expectedRequest = {
method: "POST",
url: 'report/filters',
headers: {},
body: {
testBody: true
}
};
// Act
httpPostMessage.post(expectedRequest.url, expectedRequest.body);
// Assert
expect(postMessageSpy).toHaveBeenCalledWith(window, expectedRequest);
});
it("put() calls windowPostMessageProxy.postMessage with PUT request", function () {
// Arrange
const expectedRequest = {
method: "PUT",
url: 'report/pages/activepage',
headers: {},
body: {
testBody: true
}
};
// Act
httpPostMessage.put(expectedRequest.url, expectedRequest.body);
// Assert
expect(postMessageSpy).toHaveBeenCalledWith(window, expectedRequest);
});
it("patch() calls windowPostMessageProxy.postMessage with PATCH request", function () {
// Arrange
const expectedRequest = {
method: "PATCH",
url: 'report/pages/activepage',
headers: {},
body: {
testBody: true
}
};
// Act
httpPostMessage.patch(expectedRequest.url, expectedRequest.body);
// Assert
expect(postMessageSpy).toHaveBeenCalledWith(window, expectedRequest);
});
it("delete() calls windowPostMessageProxy.postMessage with DELETE request", function () {
// Arrange
const expectedRequest = {
method: "DELETE",
url: 'report/pages/activepage',
headers: {},
body: {
testBody: true
}
};
// Act
httpPostMessage.delete(expectedRequest.url, expectedRequest.body);
// Assert
expect(postMessageSpy).toHaveBeenCalledWith(window, expectedRequest);
});
describe("custom headers", function () {
let defaultHeaders: any;
let httpPostMessageProxyWithDefaultHeaders: hpm.HttpPostMessage;
beforeAll(function () {
defaultHeaders = {
'custom-header-1': 'customValue',
'request-id': 'abc123'
};
httpPostMessageProxyWithDefaultHeaders = new hpm.HttpPostMessage(windowPostMessageProxy, defaultHeaders, window);
});
it("default headers can be set, which will be included with each request", function () {
// Arrange
const expectedRequest = {
method: "GET",
url: 'report/pages',
headers: defaultHeaders
};
// Act
httpPostMessageProxyWithDefaultHeaders.get(expectedRequest.url);
// Assert
expect(postMessageSpy).toHaveBeenCalledWith(window, expectedRequest);
});
it("all the methods can have optional parameter to pass other custom headers for the single request", function () {
// Arrange
const singleRequestHeaders = {
'new-custom-header': 'newCustomValue'
};
const headers = $.extend({}, defaultHeaders, singleRequestHeaders);
headers['new-custom-header'] = 'newCustomValue';
const expectedRequest = {
method: "GET",
url: 'report/pages',
headers
};
// Act
httpPostMessageProxyWithDefaultHeaders.get(expectedRequest.url, singleRequestHeaders);
// Assert
expect(postMessageSpy).toHaveBeenCalledWith(window, expectedRequest);
});
it('if a default header has same name as request header, request header should take priority', function () {
// Arrange
const singleRequestHeaders = {
'custom-header-1': 'newCustomValue'
};
const headers = $.extend({}, defaultHeaders, singleRequestHeaders);
headers['custom-header-1'] = 'newCustomValue';
const expectedRequest = {
method: "GET",
url: 'report/pages',
headers
};
// Act
httpPostMessageProxyWithDefaultHeaders.get(expectedRequest.url, singleRequestHeaders);
// Assert
expect(postMessageSpy).toHaveBeenCalledWith(window, expectedRequest);
});
});
describe("message manipulation", function () {
it("addTrackingProperties should add a custom id header to each message", function () {
// Arrange
const testMessage = {
method: "GET",
url: "report/pages",
headers: {}
};
const trackingProperties = {
id: (Math.random() + 1).toString(36).substring(7)
};
// Act
const resultMessage = hpm.HttpPostMessage.addTrackingProperties(testMessage, trackingProperties);
// Assert
expect(resultMessage.headers.id).toEqual(trackingProperties.id);
});
it("addTrackingProperties will set header.id to undefined if trackingProperties or trackingProperties.id provided is falsy", function () {
// Arrange
const testMessage = {
method: "GET",
url: "report/pages",
headers: {}
};
// Act
const resultMessage = hpm.HttpPostMessage.addTrackingProperties(testMessage, { x: 'abc' });
// Assert
expect(resultMessage.headers.id).toBe(undefined);
});
it("getTrackingProperties should return id as undefined if message does not have headers object", function () {
// Arrange
const testMessage = {
method: "GET",
url: "report/pages"
};
const expectedTrackingProperties = {
id: <any>undefined
};
// Act
const actualTrackingProperties = hpm.HttpPostMessage.getTrackingProperties(testMessage);
// Assert
expect(actualTrackingProperties).toEqual(expectedTrackingProperties);
});
it("getTrackingProperties should return id as undefined if message headers does not have id value", function () {
// Arrange
const testMessage = {
method: "GET",
url: "report/pages",
headers: {}
};
const expectedTrackingProperties = {
id: <any>undefined
};
// Act
const actualTrackingProperties = hpm.HttpPostMessage.getTrackingProperties(testMessage);
// Assert
expect(actualTrackingProperties).toEqual(expectedTrackingProperties);
});
it("getTrackingProperties should return tracking properties object by fetching id from headers of message", function () {
// Arrange
const testMessage = {
method: "GET",
url: "report/pages",
headers: {
id: (Math.random() + 1).toString(36).substring(7)
}
};
const expectedTrackingProperties = {
id: testMessage.headers.id
};
// Act
const actualTrackingProperties = hpm.HttpPostMessage.getTrackingProperties(testMessage);
// Assert
expect(actualTrackingProperties).toEqual(expectedTrackingProperties);
});
it("isErrorMessage should return true for messages with statusCode outside of range [200-300)", function () {
expect(hpm.HttpPostMessage.isErrorMessage({ statusCode: 100 })).toEqual(true);
expect(hpm.HttpPostMessage.isErrorMessage({ statusCode: 200 })).toEqual(false);
expect(hpm.HttpPostMessage.isErrorMessage({ statusCode: 300 })).toEqual(true);
expect(hpm.HttpPostMessage.isErrorMessage({ statusCode: 400 })).toEqual(true);
expect(hpm.HttpPostMessage.isErrorMessage({ statusCode: 500 })).toEqual(true);
});
it("isErrorMessage should return false if message or message.statusCode is undefined", function () {
expect(hpm.HttpPostMessage.isErrorMessage(undefined)).toEqual(false);
expect(hpm.HttpPostMessage.isErrorMessage({ statusCode: null })).toEqual(false);
});
});
});