70bf21e064
Deploy (to testing) and Test Playground Preview Worker / Deploy Playground Preview Worker (testing) (push) Has been skipped
Deploy Workers Shared Staging / Deploy Workers Shared Staging (push) Failing after 0s
Prerelease / build (push) Has been skipped
Handle Changesets / Handle Changesets (push) Has been cancelled
Semgrep OSS scan / semgrep-oss (push) Has been cancelled
322 lines
6.4 KiB
TypeScript
322 lines
6.4 KiB
TypeScript
import { test } from "vitest";
|
|
import { createMetadataObject } from "../..//metadata-generator/createMetadataObject";
|
|
import type {
|
|
HeadersRule,
|
|
RedirectRule,
|
|
} from "@cloudflare/workers-shared/utils/configuration/types";
|
|
|
|
const homeRedirectRule: RedirectRule = {
|
|
from: "/home",
|
|
to: "/",
|
|
status: 302,
|
|
lineNumber: 1,
|
|
};
|
|
|
|
const splatRedirectRule: RedirectRule = {
|
|
from: "/blog/*",
|
|
to: "/blog/:splat",
|
|
status: 302,
|
|
lineNumber: 2,
|
|
};
|
|
|
|
const placeholderRedirectRule: RedirectRule = {
|
|
from: "/blog/:year/:month/:date/:slug",
|
|
to: "/news/:year/:month/:date/:slug",
|
|
status: 302,
|
|
lineNumber: 3,
|
|
};
|
|
|
|
const fooBarRedirectRule: RedirectRule = {
|
|
from: "/foo",
|
|
to: "/bar",
|
|
status: 302,
|
|
lineNumber: 4,
|
|
};
|
|
|
|
const homeHeadersRule: HeadersRule = {
|
|
path: "/home",
|
|
headers: {
|
|
"Access-Control-Allow-Origin": "*",
|
|
},
|
|
unsetHeaders: [],
|
|
};
|
|
|
|
test("createMetadataObject should return no redirects or headers entry for no valid rules", ({
|
|
expect,
|
|
}) => {
|
|
{
|
|
const metadata = createMetadataObject({
|
|
redirects: {
|
|
rules: [],
|
|
invalid: [],
|
|
},
|
|
headers: {
|
|
rules: [],
|
|
invalid: [],
|
|
},
|
|
});
|
|
expect(metadata.redirects).toEqual(undefined);
|
|
expect(metadata.headers).toEqual(undefined);
|
|
}
|
|
{
|
|
const metadata = createMetadataObject({});
|
|
expect(metadata.redirects).toEqual(undefined);
|
|
expect(metadata.headers).toEqual(undefined);
|
|
}
|
|
});
|
|
|
|
test("createMetadataObject should add Version", ({ expect }) => {
|
|
const metadata = createMetadataObject({
|
|
redirects: {
|
|
rules: [homeRedirectRule],
|
|
invalid: [],
|
|
},
|
|
headers: {
|
|
rules: [homeHeadersRule],
|
|
invalid: [],
|
|
},
|
|
});
|
|
expect(metadata.redirects?.version).toEqual(1);
|
|
expect(metadata.headers?.version).toEqual(2);
|
|
});
|
|
|
|
test("createMetadataObject should construct mapping of from to to/status", ({
|
|
expect,
|
|
}) => {
|
|
const metadata = createMetadataObject({
|
|
redirects: {
|
|
rules: [
|
|
homeRedirectRule,
|
|
splatRedirectRule,
|
|
placeholderRedirectRule,
|
|
fooBarRedirectRule,
|
|
],
|
|
invalid: [],
|
|
},
|
|
});
|
|
expect(metadata.redirects).toEqual({
|
|
version: 1,
|
|
staticRules: {
|
|
"/home": { status: 302, to: "/", lineNumber: 1 },
|
|
},
|
|
rules: {
|
|
"/blog/*": {
|
|
to: "/blog/:splat",
|
|
status: 302,
|
|
},
|
|
"/blog/:year/:month/:date/:slug": {
|
|
status: 302,
|
|
to: "/news/:year/:month/:date/:slug",
|
|
},
|
|
"/foo": {
|
|
status: 302,
|
|
to: "/bar",
|
|
},
|
|
},
|
|
});
|
|
});
|
|
|
|
test("createMetadataObject should construct mapping of path to headers", ({
|
|
expect,
|
|
}) => {
|
|
const metadata = createMetadataObject({
|
|
headers: {
|
|
rules: [homeHeadersRule],
|
|
invalid: [],
|
|
},
|
|
});
|
|
expect(metadata.headers).toEqual({
|
|
version: 2,
|
|
rules: {
|
|
"/home": {
|
|
set: { "Access-Control-Allow-Origin": "*" },
|
|
},
|
|
},
|
|
});
|
|
});
|
|
|
|
test("createMetadataObject should return no analytics entry for null", ({
|
|
expect,
|
|
}) => {
|
|
{
|
|
const metadata = createMetadataObject({});
|
|
expect(metadata.analytics).toEqual(undefined);
|
|
}
|
|
});
|
|
|
|
test("createMetadataObject should pass through the token", ({ expect }) => {
|
|
const metadata = createMetadataObject({
|
|
webAnalyticsToken: "secret_token_1234",
|
|
});
|
|
expect(metadata.analytics).toEqual({
|
|
version: 1,
|
|
token: "secret_token_1234",
|
|
});
|
|
});
|
|
|
|
test("createMetadataObject should parse a realistic result", ({ expect }) => {
|
|
const metadata = createMetadataObject({
|
|
redirects: {
|
|
invalid: [
|
|
{
|
|
line: `/some page /somewhere else`,
|
|
message:
|
|
"Expected exactly 2 or 3 whitespace-separated tokens. Got 4.",
|
|
},
|
|
{
|
|
line: `https://yeah.com https://nah.com`,
|
|
message:
|
|
"Only relative URLs are allowed. Skipping absolute URL https://yeah.com.",
|
|
},
|
|
],
|
|
rules: [
|
|
{
|
|
from: "/some%20page",
|
|
status: 302,
|
|
to: "/somewhere%20else",
|
|
lineNumber: 1,
|
|
},
|
|
{
|
|
from: "/://so;%60me",
|
|
status: 302,
|
|
to: "/nons:/&@%+~%7B%7Dense",
|
|
lineNumber: 2,
|
|
},
|
|
{ from: "/nah", status: 302, to: "https://yeah.com/", lineNumber: 3 },
|
|
{
|
|
from: "/yeah.com",
|
|
status: 302,
|
|
to: "https://nah.com/",
|
|
lineNumber: 4,
|
|
},
|
|
],
|
|
},
|
|
headers: {
|
|
invalid: [
|
|
{
|
|
line: "HEADERSTODO",
|
|
message: "HEADERSTODO",
|
|
},
|
|
],
|
|
rules: [
|
|
{
|
|
path: "/static/*",
|
|
headers: { "Access-Control-Allow-Origin": "*" },
|
|
unsetHeaders: [],
|
|
},
|
|
{
|
|
path: "/logout",
|
|
headers: {
|
|
"Set-Cookie": "session=; Expires=Thu, 01 Jan 1970 00:00:00 GMT",
|
|
"x-content-type-options": "nosniff",
|
|
"x-frame-options": "DENY",
|
|
},
|
|
unsetHeaders: [],
|
|
},
|
|
{
|
|
path: "https://my.pages.dev/*",
|
|
headers: { "X-Robots-Tag": "none" },
|
|
unsetHeaders: [],
|
|
},
|
|
],
|
|
},
|
|
webAnalyticsToken: "secret_token_1234",
|
|
deploymentId: "some-deployment-123",
|
|
});
|
|
|
|
expect(metadata).toEqual({
|
|
redirects: {
|
|
version: 1,
|
|
rules: {},
|
|
staticRules: {
|
|
"/some%20page": { status: 302, to: "/somewhere%20else", lineNumber: 1 },
|
|
"/://so;%60me": {
|
|
status: 302,
|
|
to: "/nons:/&@%+~%7B%7Dense",
|
|
lineNumber: 2,
|
|
},
|
|
"/nah": { status: 302, to: "https://yeah.com/", lineNumber: 3 },
|
|
"/yeah.com": { status: 302, to: "https://nah.com/", lineNumber: 4 },
|
|
},
|
|
},
|
|
headers: {
|
|
version: 2,
|
|
rules: {
|
|
"/static/*": {
|
|
set: {
|
|
"Access-Control-Allow-Origin": "*",
|
|
},
|
|
},
|
|
"/logout": {
|
|
set: {
|
|
"Set-Cookie": "session=; Expires=Thu, 01 Jan 1970 00:00:00 GMT",
|
|
"x-content-type-options": "nosniff",
|
|
"x-frame-options": "DENY",
|
|
},
|
|
},
|
|
"https://my.pages.dev/*": {
|
|
set: { "X-Robots-Tag": "none" },
|
|
},
|
|
},
|
|
},
|
|
analytics: {
|
|
version: 1,
|
|
token: "secret_token_1234",
|
|
},
|
|
deploymentId: "some-deployment-123",
|
|
});
|
|
});
|
|
|
|
test("createMetadataObject should include unset", ({ expect }) => {
|
|
const metadata = createMetadataObject({
|
|
headers: {
|
|
invalid: [],
|
|
rules: [
|
|
{
|
|
path: "/*",
|
|
headers: { "x-custom-header": "value" },
|
|
unsetHeaders: [],
|
|
},
|
|
{
|
|
path: "/foo/*",
|
|
headers: {},
|
|
unsetHeaders: ["x-custom-header"],
|
|
},
|
|
{
|
|
path: "/foo/bar/*",
|
|
headers: { "x-custom-header": "newvalue" },
|
|
unsetHeaders: [],
|
|
},
|
|
],
|
|
},
|
|
webAnalyticsToken: "secret_token_1234",
|
|
deploymentId: "some-deployment-id",
|
|
});
|
|
|
|
expect(metadata).toEqual({
|
|
analytics: {
|
|
token: "secret_token_1234",
|
|
version: 1,
|
|
},
|
|
headers: {
|
|
version: 2,
|
|
rules: {
|
|
"/*": {
|
|
set: {
|
|
"x-custom-header": "value",
|
|
},
|
|
},
|
|
"/foo/*": {
|
|
unset: ["x-custom-header"],
|
|
},
|
|
"/foo/bar/*": {
|
|
set: {
|
|
"x-custom-header": "newvalue",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
deploymentId: "some-deployment-id",
|
|
});
|
|
});
|