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:
parent
3aa66eac05
commit
4e8fb65a2e
@ -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);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -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 = {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user