84 lines
2.3 KiB
TypeScript
84 lines
2.3 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
import { CustomBackgroundSchema } from "@monkeytype/schemas/configs";
|
|
|
|
describe("config schema", () => {
|
|
describe("CustomBackgroundSchema", () => {
|
|
it.for([
|
|
{
|
|
name: "http",
|
|
input: `http://example.com/path/image.png`,
|
|
},
|
|
{
|
|
name: "https",
|
|
input: `https://example.com/path/image.png`,
|
|
},
|
|
{
|
|
name: "png",
|
|
input: `https://example.com/path/image.png`,
|
|
},
|
|
{
|
|
name: "gif",
|
|
input: `https://example.com/path/image.gif?width=5`,
|
|
},
|
|
{
|
|
name: "jpeg",
|
|
input: `https://example.com/path/image.jpeg`,
|
|
},
|
|
{
|
|
name: "jpg",
|
|
input: `https://example.com/path/image.jpg`,
|
|
},
|
|
{
|
|
name: "tiff",
|
|
input: `https://example.com/path/image.tiff`,
|
|
expectedError: "Unsupported image format",
|
|
},
|
|
{
|
|
name: "non-url",
|
|
input: `test`,
|
|
expectedError: "Needs to be an URI",
|
|
},
|
|
{
|
|
name: "single quotes",
|
|
input: `https://example.com/404.jpg?q=alert('1')`,
|
|
expectedError: "May not contain quotes",
|
|
},
|
|
{
|
|
name: "double quotes",
|
|
input: `https://example.com/404.jpg?q=alert("1")`,
|
|
expectedError: "May not contain quotes",
|
|
},
|
|
{
|
|
name: "back tick",
|
|
input: `https://example.com/404.jpg?q=alert(\`1\`)`,
|
|
expectedError: "May not contain quotes",
|
|
},
|
|
{
|
|
name: "javascript url",
|
|
input: `javascript:alert('asdf');//https://example.com/img.jpg`,
|
|
expectedError: "Unsupported protocol",
|
|
},
|
|
{
|
|
name: "data url",
|
|
input: `data:image/gif;base64,data`,
|
|
expectedError: "Unsupported protocol",
|
|
},
|
|
{
|
|
name: "long url",
|
|
input: `https://example.com/path/image.jpeg?q=${new Array(2048)
|
|
.fill("x")
|
|
.join()}`,
|
|
expectedError: "URL is too long",
|
|
},
|
|
])(`$name`, ({ input, expectedError }) => {
|
|
const parsed = CustomBackgroundSchema.safeParse(input);
|
|
if (expectedError !== undefined) {
|
|
expect(parsed.success).toEqual(false);
|
|
expect(parsed.error?.issues[0]?.message).toEqual(expectedError);
|
|
} else {
|
|
expect(parsed.success).toEqual(true);
|
|
}
|
|
});
|
|
});
|
|
});
|