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("input validation tests", () => {
describe("isEmail tests", () => { describe("isEmail tests", () => {
it("should be valid", () => { const tests: TextValidationCase[] = [
expect(isEmail.validate("abc@news.com")).toBe(true); ["abc@news.com", true],
expect(isEmail.validate("abc@news.co.uk")).toBe(true); ["abc@news.co.uk", true],
expect(isEmail.validate("abc1.3@news.co.uk")).toBe(true); ["abc1.3@news.co.uk", true],
expect(isEmail.validate("abc1.3@news.name")).toBe(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.each(tests)("validate %s", (input, output) => {
expect(isEmail.validate(input)).toBe(output);
});
}); });
it("should be invalid", () => { describe("isUrl tests", () => {
expect(isEmail.validate("@news.com")).toBe(false); const cases: TextValidationCase[] = [
expect(isEmail.validate("abcnews.co.uk")).toBe(false); ["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],
expect(isEmail.validate("abc1.3@news")).toBe(false); ["google.ca", false],
expect(isEmail.validate("abc1.3@news.name.a.b.c.d.d")).toBe(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", () => { describe("systemName tests", () => {
it("should be valid", () => { const tests: TextValidationCase[] = [
expect(systemName.validate("a")).toBe(true); ["a", true],
expect(systemName.validate("ab")).toBe(true); ["ab", true],
expect(systemName.validate("abc")).toBe(true); ["abc", true],
expect(systemName.validate("1")).toBe(true); ["1", true],
expect(systemName.validate("12")).toBe(true); ["12", true],
expect(systemName.validate("123")).toBe(true); ["123", true],
expect(systemName.validate("1a2")).toBe(true); ["1a2", true],
expect(systemName.validate("1-2")).toBe(true); ["1-2", true],
expect(systemName.validate("1---------------2")).toBe(true); ["1---------------2", true],
expect(systemName.validate("1---------------2.a")).toBe(true); ["1---------------2.a", true],
expect(systemName.validate("1---------------2.a.1")).toBe(true); ["1---------------2.a.1", true],
expect(systemName.validate("1---------------2.9-a.1")).toBe(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", () => { it.each(tests)("validate %s", (input, output) => {
expect(systemName.validate("")).toBe(false); expect(systemName.validate(input)).toBe(output);
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);
}); });
}); });
}); });

View File

@ -40,7 +40,13 @@ export const isNumber: InputValidator = {
export const isUrl: InputValidator = { export const isUrl: InputValidator = {
condition: ({ type }) => type === "url", condition: ({ type }) => type === "url",
message: () => _i18n._(t`Wrong url format`), 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 = { export const isPath: InputValidator = {