import * as validator from './repositoryValidation'; describe('repository name validation', () => { // we don't need rich tests, because they are in validation.test.js it('should validate the name', () => { expect(validator.isNameValid('scm-manager')).toBe(true); }); it('should fail for old nested repository names', () => { // in v2 this is not allowed expect(validator.isNameValid('scm/manager')).toBe(false); expect(validator.isNameValid('scm/ma/nager')).toBe(false); }); it('should allow same names as the backend', () => { const validPaths = [ 'scm', 's', 'sc', '.hiddenrepo', 'b.', '...', '..c', 'd..', 'a..c', ]; validPaths.forEach(path => expect(validator.isNameValid(path)).toBe(true)); }); it('should deny same names as the backend', () => { const invalidPaths = [ '.', '/', '//', '..', '/.', '/..', './', '../', '/../', '/./', '/...', '/abc', '.../', '/sdf/', 'asdf/', './b', 'scm/plugins/.', 'scm/../plugins', 'scm/main/', '/scm/main/', 'scm/./main', 'scm//main', 'scm\\main', 'scm/main-$HOME', 'scm/main-${HOME}-home', 'scm/main-%HOME-home', 'scm/main-%HOME%-home', 'abc$abc', 'abc%abc', 'abcabc', 'abc#abc', 'abc+abc', 'abc{abc', 'abc}abc', 'abc(abc', 'abc)abc', 'abc[abc', 'abc]abc', 'abc|abc', 'scm/main', 'scm/plugins/git-plugin', '.scm/plugins', 'a/b..', 'a/..b', 'scm/main', 'scm/plugins/git-plugin', 'scm/plugins/git-plugin', ]; invalidPaths.forEach(path => expect(validator.isNameValid(path)).toBe(false), ); }); }); describe('repository contact validation', () => { it('should allow empty contact', () => { expect(validator.isContactValid('')).toBe(true); }); // we don't need rich tests, because they are in validation.test.js it('should allow real mail addresses', () => { expect(validator.isContactValid('trici.mcmillian@hitchhiker.com')).toBe( true, ); }); it('should fail on invalid mail addresses', () => { expect(validator.isContactValid('tricia')).toBe(false); }); });