diff --git a/scm-ui-components/packages/ui-components/src/Breadcrumb.js b/scm-ui-components/packages/ui-components/src/Breadcrumb.js index d2f3409af6..5b0f151c61 100644 --- a/scm-ui-components/packages/ui-components/src/Breadcrumb.js +++ b/scm-ui-components/packages/ui-components/src/Breadcrumb.js @@ -1,10 +1,9 @@ //@flow import React from "react"; -import { Link } from "react-router-dom"; -import type { Branch, Repository } from "@scm-manager/ui-types"; +import {Link} from "react-router-dom"; +import type {Branch, Repository} from "@scm-manager/ui-types"; import injectSheet from "react-jss"; -import { ExtensionPoint, binder } from "@scm-manager/ui-extensions"; -import {ButtonGroup} from "./buttons"; +import {binder, ExtensionPoint} from "@scm-manager/ui-extensions"; import classNames from "classnames"; type Props = { @@ -64,33 +63,48 @@ class Breadcrumb extends React.Component { } render() { - const { classes, baseUrl, branch, defaultBranch, branches, revision, path, repository } = this.props; + const { + classes, + baseUrl, + branch, + defaultBranch, + branches, + revision, + path, + repository + } = this.props; return ( <>
-

diff --git a/scm-ui-components/packages/ui-components/src/validation.js b/scm-ui-components/packages/ui-components/src/validation.js index fcfffcee45..98a36c6f0e 100644 --- a/scm-ui-components/packages/ui-components/src/validation.js +++ b/scm-ui-components/packages/ui-components/src/validation.js @@ -5,7 +5,7 @@ export const isNameValid = (name: string) => { return nameRegex.test(name); }; -const mailRegex = /^[ -~]+@[A-Za-z0-9][\w\-.]*\.[A-Za-z0-9][A-Za-z0-9-]+$/; +const mailRegex = /^[ -~]+@[A-Za-z0-9][\w\-.]*\.[A-Za-z0-9][A-Za-z0-9-]+$/; export const isMailValid = (mail: string) => { return mailRegex.test(mail); @@ -14,3 +14,9 @@ export const isMailValid = (mail: string) => { export const isNumberValid = (number: string) => { return !isNaN(number); }; + +const pathRegex = /^((?!\/{2,}).)*$/; + +export const isPathValid = (path: string) => { + return pathRegex.test(path); +}; diff --git a/scm-ui-components/packages/ui-components/src/validation.test.js b/scm-ui-components/packages/ui-components/src/validation.test.js index d50996ff2b..4af5d755d0 100644 --- a/scm-ui-components/packages/ui-components/src/validation.test.js +++ b/scm-ui-components/packages/ui-components/src/validation.test.js @@ -2,102 +2,117 @@ import * as validator from "./validation"; describe("test name validation", () => { - it("should return false", () => { - // invalid names taken from ValidationUtilTest.java - const invalidNames = [ - "@test", - " test 123", - " test 123 ", - "test 123 ", - "test/123", - "test%123", - "test:123", - "t ", - " t", - " t ", - "", + // invalid names taken from ValidationUtilTest.java + const invalidNames = [ + "@test", + " test 123", + " test 123 ", + "test 123 ", + "test/123", + "test%123", + "test:123", + "t ", + " t", + " t ", + "", - " invalid_name", - "another%one", - "!!!", - "!_!" - ]; - for (let name of invalidNames) { + " invalid_name", + "another%one", + "!!!", + "!_!" + ]; + for (let name of invalidNames) { + it(`should return false for '${name}'`, () => { expect(validator.isNameValid(name)).toBe(false); - } - }); + }); + } - it("should return true", () => { - // valid names taken from ValidationUtilTest.java - const validNames = [ - "test", - "test.git", - "Test123.git", - "Test123-git", - "Test_user-123.git", - "test@scm-manager.de", - "test123", - "tt", - "t", - "valid_name", - "another1", - "stillValid", - "this.one_as-well", - "and@this" - ]; - for (let name of validNames) { + // valid names taken from ValidationUtilTest.java + const validNames = [ + "test", + "test.git", + "Test123.git", + "Test123-git", + "Test_user-123.git", + "test@scm-manager.de", + "test123", + "tt", + "t", + "valid_name", + "another1", + "stillValid", + "this.one_as-well", + "and@this" + ]; + for (let name of validNames) { + it(`should return true for '${name}'`, () => { expect(validator.isNameValid(name)).toBe(true); - } - }); + }); + } }); describe("test mail validation", () => { - it("should return false", () => { - // invalid taken from ValidationUtilTest.java - const invalid = [ - "ostfalia.de", - "@ostfalia.de", - "s.sdorra@", - "s.sdorra@ostfalia", - "s.sdorra@ ostfalia.de", - "s.sdorra@[ostfalia.de" - ]; - for (let mail of invalid) { + // invalid taken from ValidationUtilTest.java + const invalid = [ + "ostfalia.de", + "@ostfalia.de", + "s.sdorra@", + "s.sdorra@ostfalia", + "s.sdorra@ ostfalia.de", + "s.sdorra@[ostfalia.de" + ]; + for (let mail of invalid) { + it(`should return false for '${mail}'`, () => { expect(validator.isMailValid(mail)).toBe(false); - } - }); + }); + } - it("should return true", () => { - // valid taken from ValidationUtilTest.java - const valid = [ - "s.sdorra@ostfalia.de", - "sdorra@ostfalia.de", - "s.sdorra@hbk-bs.de", - "s.sdorra@gmail.com", - "s.sdorra@t.co", - "s.sdorra@ucla.college", - "s.sdorra@example.xn--p1ai", - "s.sdorra@scm.solutions", - "s'sdorra@scm.solutions", - "\"S Sdorra\"@scm.solutions" - ]; - for (let mail of valid) { + // valid taken from ValidationUtilTest.java + const valid = [ + "s.sdorra@ostfalia.de", + "sdorra@ostfalia.de", + "s.sdorra@hbk-bs.de", + "s.sdorra@gmail.com", + "s.sdorra@t.co", + "s.sdorra@ucla.college", + "s.sdorra@example.xn--p1ai", + "s.sdorra@scm.solutions", + "s'sdorra@scm.solutions", + "\"S Sdorra\"@scm.solutions" + ]; + for (let mail of valid) { + it(`should return true for '${mail}'`, () => { expect(validator.isMailValid(mail)).toBe(true); - } - }); + }); + } }); describe("test number validation", () => { - it("should return false", () => { - const invalid = ["1a", "35gu", "dj6", "45,5", "test"]; - for (let number of invalid) { - expect(validator.isNumberValid(number)).toBe(false); - } - }); - it("should return true", () => { - const valid = ["1", "35", "2", "235", "34.4"]; - for (let number of valid) { + const invalid = ["1a", "35gu", "dj6", "45,5", "test"]; + for (let number of invalid) { + it(`should return false for '${number}'`, () => { + expect(validator.isNumberValid(number)).toBe(false); + }); + } + const valid = ["1", "35", "2", "235", "34.4"]; + for (let number of valid) { + it(`should return true for '${number}'`, () => { expect(validator.isNumberValid(number)).toBe(true); - } - }); + }); + } +}); + +describe("test path validation", () => { + const invalid = ["//", "some//path", "end//"]; + for (let path of invalid) { + it(`should return false for '${path}'`, () => { + expect(validator.isPathValid(path)).toBe(false); + }); + } + const valid = ["", "/", "dir", "some/path", "end/"]; + for (let path of valid) { + it(`should return true for '${path}'`, () => { + expect(validator.isPathValid(path)).toBe(true); + }); + } }); diff --git a/scm-ui/src/repos/sources/containers/Content.js b/scm-ui/src/repos/sources/containers/Content.js index b9032ae681..4d297c05bc 100644 --- a/scm-ui/src/repos/sources/containers/Content.js +++ b/scm-ui/src/repos/sources/containers/Content.js @@ -106,17 +106,15 @@ class Content extends React.Component {
{selector}
- - - +
diff --git a/scm-ui/src/users/components/userValidation.js b/scm-ui/src/users/components/userValidation.js index c9460fdd50..e53dce229c 100644 --- a/scm-ui/src/users/components/userValidation.js +++ b/scm-ui/src/users/components/userValidation.js @@ -2,9 +2,9 @@ import { validation } from "@scm-manager/ui-components"; -const { isNameValid, isMailValid } = validation; +const { isNameValid, isMailValid, isPathValid } = validation; -export { isNameValid, isMailValid }; +export { isNameValid, isMailValid, isPathValid }; export const isDisplayNameValid = (displayName: string) => { if (displayName) {