1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

fix URL validator, add some tests (#1627)

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2020-12-03 08:49:51 -05:00 committed by GitHub
parent 3aa66eac05
commit 4e8fb65a2e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 65 additions and 38 deletions

View File

@ -1,48 +1,69 @@
import { isEmail, systemName } from "../input_validators";
import { isEmail, isUrl, systemName } from "../input_validators";
type TextValidationCase = [string, boolean];
describe("input validation tests", () => {
describe("isEmail tests", () => {
it("should be valid", () => {
expect(isEmail.validate("abc@news.com")).toBe(true);
expect(isEmail.validate("abc@news.co.uk")).toBe(true);
expect(isEmail.validate("abc1.3@news.co.uk")).toBe(true);
expect(isEmail.validate("abc1.3@news.name")).toBe(true);
});
const tests: TextValidationCase[] = [
["abc@news.com", true],
["abc@news.co.uk", true],
["abc1.3@news.co.uk", true],
["abc1.3@news.name", true],
["@news.com", false],
["abcnews.co.uk", false],
["abc1.3@news", false],
["abc1.3@news.name.a.b.c.d.d", false],
];
it("should be invalid", () => {
expect(isEmail.validate("@news.com")).toBe(false);
expect(isEmail.validate("abcnews.co.uk")).toBe(false);
expect(isEmail.validate("abc1.3@news")).toBe(false);
expect(isEmail.validate("abc1.3@news.name.a.b.c.d.d")).toBe(false);
it.each(tests)("validate %s", (input, output) => {
expect(isEmail.validate(input)).toBe(output);
});
});
describe("isUrl tests", () => {
const cases: TextValidationCase[] = [
["https://github-production-registry-package-file-4f11e5.s3.amazonaws.com/307985088/68bbbf00-309f-11eb-8457-a15e4efe9e77?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20201127%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20201127T123754Z&X-Amz-Expires=300&X-Amz-Signature=9b8167f00685a20d980224d397892195abc187cdb2934cefb79edcd7ec600f78&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=0&response-content-disposition=filename%3Dstarboard-lens-extension-0.0.1-alpha.1-npm.tgz&response-content-type=application%2Foctet-stream", true],
["google.ca", false],
["", false],
[".", false],
["google.askdgjkhsadjkhdas.dsakljsd", false],
["https://google.com", true],
["https://example.org", true],
["https://www.example.org", true],
];
it.each(cases)("validate %s", (input, output) => {
expect(isUrl.validate(input)).toBe(output);
});
});
describe("systemName tests", () => {
it("should be valid", () => {
expect(systemName.validate("a")).toBe(true);
expect(systemName.validate("ab")).toBe(true);
expect(systemName.validate("abc")).toBe(true);
expect(systemName.validate("1")).toBe(true);
expect(systemName.validate("12")).toBe(true);
expect(systemName.validate("123")).toBe(true);
expect(systemName.validate("1a2")).toBe(true);
expect(systemName.validate("1-2")).toBe(true);
expect(systemName.validate("1---------------2")).toBe(true);
expect(systemName.validate("1---------------2.a")).toBe(true);
expect(systemName.validate("1---------------2.a.1")).toBe(true);
expect(systemName.validate("1---------------2.9-a.1")).toBe(true);
});
const tests: TextValidationCase[] = [
["a", true],
["ab", true],
["abc", true],
["1", true],
["12", true],
["123", true],
["1a2", true],
["1-2", true],
["1---------------2", true],
["1---------------2.a", true],
["1---------------2.a.1", true],
["1---------------2.9-a.1", true],
["", false],
["-", false],
[".", false],
["as.", false],
[".asd", false],
["a.-", false],
["a.1-", false],
["o.2-2.", false],
["o.2-2....", false],
];
it("should be invalid", () => {
expect(systemName.validate("")).toBe(false);
expect(systemName.validate("-")).toBe(false);
expect(systemName.validate(".")).toBe(false);
expect(systemName.validate("as.")).toBe(false);
expect(systemName.validate(".asd")).toBe(false);
expect(systemName.validate("a.-")).toBe(false);
expect(systemName.validate("a.1-")).toBe(false);
expect(systemName.validate("o.2-2.")).toBe(false);
expect(systemName.validate("o.2-2....")).toBe(false);
it.each(tests)("validate %s", (input, output) => {
expect(systemName.validate(input)).toBe(output);
});
});
});

View File

@ -40,7 +40,13 @@ export const isNumber: InputValidator = {
export const isUrl: InputValidator = {
condition: ({ type }) => type === "url",
message: () => _i18n._(t`Wrong url format`),
validate: value => !!value.match(/^http(s)?:\/\/\w+(\.\w+)*(:[0-9]+)?\/?(\/[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]*)*$/),
validate: value => {
try {
return Boolean(new URL(value));
} catch (err) {
return false;
}
},
};
export const isPath: InputValidator = {