@schoolofmotion/rocket-booster
Version:
Serverless reverse proxy and load balancing library built for Cloudflare Workers.
68 lines (62 loc) • 1.79 kB
text/typescript
import {
isSameOrigin,
isMobile,
createResponse,
getHostname,
} from '../src/utils';
import { UpstreamOptions } from '../types/upstream';
test('utils.ts -> isSameOrigin()', () => {
const upstream: UpstreamOptions = {
domain: 'httpbin.org',
protocol: 'https',
};
const truthyUrl = new URL('https://httpbin.org/test');
const falsyUrl = new URL('https://github.com/test');
expect(isSameOrigin(truthyUrl, upstream)).toEqual(true);
expect(isSameOrigin(falsyUrl, upstream)).toEqual(false);
});
test('utils.ts -> createResponse()', async () => {
const response = createResponse(
'Test response body',
403,
);
expect(response.status).toEqual(403);
expect(response.ok).toEqual(false);
await expect(response.text()).resolves.toEqual('Test response body');
});
test('utils.ts -> isMobile()', () => {
const userAgents: [string, boolean][] = [
[
// Pixel 3, Chrome 90
`
Mozilla/5.0 (Linux; Android 11; Pixel 3)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.210 Mobile Safari/537.36
`,
true,
],
[
// Macbook Pro, Chrome 90
`
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36
`,
false,
],
[
// Google Crawler
`
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
`,
false,
],
];
userAgents.forEach(([userAgent, result]) => {
expect(isMobile(userAgent)).toEqual(result);
});
});
test('utils.ts -> getHostname()', () => {
const url = 'https://developer.mozilla.org:443/en-US/docs/';
const request = new Request(url);
const hostname = getHostname(request);
expect(hostname).toEqual('developer.mozilla.org');
});