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("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);
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -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 = {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user