ms-rest-js/test/msRestUserAgentPolicyTests.ts

170 строки
6.6 KiB
TypeScript
Исходник Постоянная ссылка Обычный вид История

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
import "chai/register-should";
import { HttpOperationResponse } from "../lib/httpOperationResponse";
import { RequestPolicy, RequestPolicyOptions } from "../lib/policies/requestPolicy";
import { Constants } from "../lib/util/constants";
import { WebResource } from "../lib/webResource";
import { userAgentPolicy } from "../lib/policies/userAgentPolicy";
import { nodeDescribe, browserDescribe } from "./msAssert";
const userAgentHeaderKey = Constants.HeaderConstants.USER_AGENT;
const emptyRequestPolicy: RequestPolicy = {
sendRequest(request: WebResource): Promise<HttpOperationResponse> {
request.should.exist;
return Promise.resolve({ request: request, status: 200, headers: request.headers });
},
};
const getPlainUserAgentPolicy = (headerValue?: string): RequestPolicy => {
const factory = userAgentPolicy({ value: headerValue });
return factory.create(emptyRequestPolicy, new RequestPolicyOptions());
};
const getUserAgent = async (headerValue?: string): Promise<string> => {
const policy = getPlainUserAgentPolicy(headerValue);
const resource = new WebResource();
await policy.sendRequest(resource);
const userAgent = resource.headers.get(userAgentHeaderKey);
return userAgent!;
};
describe("MsRestUserAgentPolicy", () => {
nodeDescribe("for Node.js", () => {
it("should not modify user agent header if already present", async () => {
const userAgentPolicy = getPlainUserAgentPolicy();
const customUserAgent = "my custom user agent";
const resource = new WebResource();
resource.headers.set(userAgentHeaderKey, customUserAgent);
await userAgentPolicy.sendRequest(resource);
const userAgentHeader: string = resource.headers.get(userAgentHeaderKey)!;
userAgentHeader.should.be.equal(customUserAgent);
});
it("should not set the user agent header if custom user agent is empty", async () => {
const customUserAgent = "";
const factory = userAgentPolicy({ value: customUserAgent });
const nodeUserAgentPolicy = factory.create(emptyRequestPolicy, new RequestPolicyOptions());
const resource = new WebResource();
await nodeUserAgentPolicy.sendRequest(resource);
const userAgentHeader: string = resource.headers.get(userAgentHeaderKey)!;
(userAgentHeader === undefined).should.be.true;
});
it("should use injected user agent string if provided", async () => {
const customUserAgent = "my custom user agent";
const factory = userAgentPolicy({ value: customUserAgent });
const nodeUserAgentPolicy = factory.create(emptyRequestPolicy, new RequestPolicyOptions());
const resource = new WebResource();
await nodeUserAgentPolicy.sendRequest(resource);
const userAgentHeader: string = resource.headers.get(userAgentHeaderKey)!;
userAgentHeader.should.be.equal(customUserAgent);
});
it("should be space delimited and contain three fields", async () => {
const userAgent = await getUserAgent();
const userAgentParts = userAgent.split(" ");
userAgentParts.length.should.be.equal(3);
});
it("should contain runtime information", async () => {
const userAgent = await getUserAgent();
Add support for Fetch in Node.js environment (#351) * Update version * Add Fetch HTTP client (#342) * Add Fetch HTTP client * Reset version * Update version * Fix isNode method to return true in Electron apps * Update Constants * Fix incorrect undefined check in Axios client * Add TSLint check. Fix TSLint errors (#344) * Add TSLint check. Fix TSLint errors * Add type to delay callback * Update TypeScript * Remove unnecessary types/xhr-mock package * Fix missing delay import * Reformat Fetch client * Fix wrong union type * Fix tests * Normalize the safe-check * Add script to run tests on dependent projects (#345) * Add script to run tests on dependent projects * Bump the version * Fix logging statements * Update constants * Update Azure Pipelines configuration * Fix Azure Pipeline job name * Add gulp build command * Add npm run local * Flip order * Add build step * Add more logging * Fix undefined result print * Remove inheriting stdio * Change to spawnSync * Add more logging * Remove build step * Change exec to run from JS dev tools * Add logger-js package * Add build step back * Add process.exit * Add logging * Change error logging * Add command printing * Extract options object * Add fullOptions parameter * Change NPM command name * Remove logging * Remove npm run test * Await additional commands * Add test command to package.json * Add timeout * Add test as separate task * Change foreach to for * Remove test from package.json command * Uncomment npm install commands * Add latest ms-rest-js to npm install * Add autorest.typescript DevOps task * Add npm link * Change link to install * Remove prepack script * Change package name to ../.. * Remove rm -rf * Add build step * Add git checkout * Add dependent project directory * Remove git branch checkout * Bump the version to 1.8.6 * Add git checkout * Change branch name * Add execution directory * Remove git checkout * Add tsc --version command * Remove local ms-rest-js install * Move .tmp folder * Change .tmp path creation * Fix path in Azure DevOps config * Renable logging * Add run to build command * Move scripts back to TypeScript * Improve logging * Fixed #347 and #348 * nit fix * bump version in the constant file. * Address reiew feedback * upgrade ci to run node 8, 10, 12 versions. Remove 6.x. * Reformat mockHttp * Add Fetch to browser * Add Firefox Karma configuration * Switch from isomorphic-fetch to cross-fetch * Add cross-fetch to rollup configuration * Remove buffer and streams from webpack test configuration * Add Firefox karma launcher * Add FetchMock for browser scenarios * Extract platform specific code to child classes * Bump the version * Add proxy support to fetch client (#350) * Remove cross-fetch * Add proxy support * Fix stream upload tests * Extract ProxyAgent * Bring XHR as default client for browsers * Address feedback * Bring back browser mock * Add type * Fix pass through mock * Change import type * Fix fetch import * Change fetch reference * Remove cross fetch from rollup config * Remote unit.ts * Add fallback fetch reference * Fix constants * Fix fetch bugs * Upgrade TypeScript * Remove unnecessary code from mock class * Remove type * Change vresion to preview * Remove Method import * Fix user agent tests * Remove Method casting * Remove Method type * Disable ms-rest-azure-js installation in CI * Fix pack order * Add keep-alive support (#362) * Remove remaining axios references * Update documentation * Add missing external packages in rollup config * Add Keep-Alive changelog * Bump the version
2019-06-24 19:01:20 +03:00
userAgent.should.match(/ms-rest-js\/[\d\w\.-]+ .+/);
});
it("should have operating system information at the third place", async () => {
const userAgent = await getUserAgent();
const userAgentParts = userAgent.split(" ");
const osInfo = userAgentParts[2];
osInfo.should.match(/OS\/\([\w\d\.\-]+\)/);
});
it("should have Node information at the second place", async () => {
const userAgent = await getUserAgent();
const userAgentParts = userAgent.split(" ");
const osInfo = userAgentParts[1];
osInfo.should.match(/Node\/v[\d.]+/);
});
});
browserDescribe("for browser", function () {
const userAgentHeaderKey = "x-ms-command-name";
const emptyRequestPolicy: RequestPolicy = {
sendRequest(request: WebResource): Promise<HttpOperationResponse> {
request.should.exist;
return Promise.resolve({ request: request, status: 200, headers: request.headers });
},
};
const getUserAgent = async (headerValue?: string): Promise<string> => {
const factory = userAgentPolicy({ value: headerValue });
const policy = factory.create(emptyRequestPolicy, new RequestPolicyOptions());
const resource = new WebResource();
await policy.sendRequest(resource);
const userAgent = resource.headers.get(userAgentHeaderKey);
return userAgent!;
};
describe("MsRestUserAgentPolicy (Browser)", () => {
it("should not modify user agent header if already present", async () => {
const factory = userAgentPolicy();
const browserUserAgentPolicy = factory.create(
emptyRequestPolicy,
new RequestPolicyOptions()
);
const customUserAgent = "my custom user agent";
const resource = new WebResource();
resource.headers.set(userAgentHeaderKey, customUserAgent);
await browserUserAgentPolicy.sendRequest(resource);
const userAgentHeader: string = resource.headers.get(userAgentHeaderKey)!;
userAgentHeader.should.be.equal(customUserAgent);
});
it("should use injected user agent string if provided", async () => {
const customUserAgent = "my custom user agent";
const factory = userAgentPolicy({ value: customUserAgent });
const browserUserAgentPolicy = factory.create(
emptyRequestPolicy,
new RequestPolicyOptions()
);
const resource = new WebResource();
await browserUserAgentPolicy.sendRequest(resource);
const userAgentHeader: string = resource.headers.get(userAgentHeaderKey)!;
userAgentHeader.should.be.equal(customUserAgent);
});
it("should be space delimited and contain two fields", async () => {
const userAgent = await getUserAgent();
const userAgentParts = userAgent.split(" ");
userAgentParts.length.should.be.equal(2);
});
it("should contain runtime information", async () => {
const userAgent = await getUserAgent();
Add support for Fetch in Node.js environment (#351) * Update version * Add Fetch HTTP client (#342) * Add Fetch HTTP client * Reset version * Update version * Fix isNode method to return true in Electron apps * Update Constants * Fix incorrect undefined check in Axios client * Add TSLint check. Fix TSLint errors (#344) * Add TSLint check. Fix TSLint errors * Add type to delay callback * Update TypeScript * Remove unnecessary types/xhr-mock package * Fix missing delay import * Reformat Fetch client * Fix wrong union type * Fix tests * Normalize the safe-check * Add script to run tests on dependent projects (#345) * Add script to run tests on dependent projects * Bump the version * Fix logging statements * Update constants * Update Azure Pipelines configuration * Fix Azure Pipeline job name * Add gulp build command * Add npm run local * Flip order * Add build step * Add more logging * Fix undefined result print * Remove inheriting stdio * Change to spawnSync * Add more logging * Remove build step * Change exec to run from JS dev tools * Add logger-js package * Add build step back * Add process.exit * Add logging * Change error logging * Add command printing * Extract options object * Add fullOptions parameter * Change NPM command name * Remove logging * Remove npm run test * Await additional commands * Add test command to package.json * Add timeout * Add test as separate task * Change foreach to for * Remove test from package.json command * Uncomment npm install commands * Add latest ms-rest-js to npm install * Add autorest.typescript DevOps task * Add npm link * Change link to install * Remove prepack script * Change package name to ../.. * Remove rm -rf * Add build step * Add git checkout * Add dependent project directory * Remove git branch checkout * Bump the version to 1.8.6 * Add git checkout * Change branch name * Add execution directory * Remove git checkout * Add tsc --version command * Remove local ms-rest-js install * Move .tmp folder * Change .tmp path creation * Fix path in Azure DevOps config * Renable logging * Add run to build command * Move scripts back to TypeScript * Improve logging * Fixed #347 and #348 * nit fix * bump version in the constant file. * Address reiew feedback * upgrade ci to run node 8, 10, 12 versions. Remove 6.x. * Reformat mockHttp * Add Fetch to browser * Add Firefox Karma configuration * Switch from isomorphic-fetch to cross-fetch * Add cross-fetch to rollup configuration * Remove buffer and streams from webpack test configuration * Add Firefox karma launcher * Add FetchMock for browser scenarios * Extract platform specific code to child classes * Bump the version * Add proxy support to fetch client (#350) * Remove cross-fetch * Add proxy support * Fix stream upload tests * Extract ProxyAgent * Bring XHR as default client for browsers * Address feedback * Bring back browser mock * Add type * Fix pass through mock * Change import type * Fix fetch import * Change fetch reference * Remove cross fetch from rollup config * Remote unit.ts * Add fallback fetch reference * Fix constants * Fix fetch bugs * Upgrade TypeScript * Remove unnecessary code from mock class * Remove type * Change vresion to preview * Remove Method import * Fix user agent tests * Remove Method casting * Remove Method type * Disable ms-rest-azure-js installation in CI * Fix pack order * Add keep-alive support (#362) * Remove remaining axios references * Update documentation * Add missing external packages in rollup config * Add Keep-Alive changelog * Bump the version
2019-06-24 19:01:20 +03:00
userAgent.should.match(/ms-rest-js\/[\d\w\.-]+ .+/);
});
it("should have operating system information at the second place", async () => {
const userAgent = await getUserAgent();
const userAgentParts = userAgent.split(" ");
const osInfo = userAgentParts[1];
osInfo.should.match(/OS\/[\w\d\.\-]+/);
});
});
});
});