From 008480e7adb72132960b5112c9500c107f11a836 Mon Sep 17 00:00:00 2001 From: joseph-sentry <136376984+joseph-sentry@users.noreply.github.com> Date: Tue, 9 Jan 2024 12:37:34 -0500 Subject: [PATCH] feat: support longer flag names that can contain special chars (#1380) * feat: support longer flag names that can contain special chars * test: add flag name validate test with flag name that is too long --- src/helpers/validate.ts | 4 +-- test/helpers/validate.test.ts | 48 ++++++++++++++++++++--------------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/helpers/validate.ts b/src/helpers/validate.ts index a4d2dba00..06d360309 100644 --- a/src/helpers/validate.ts +++ b/src/helpers/validate.ts @@ -16,7 +16,7 @@ export function validateURL(url: string): boolean { export function isValidFlag(flag: string): boolean { // eslint-disable-next-line no-useless-escape - const mask = /^[\w\.\-]{1,45}$/ + const mask = /^[^\'\"]{1,1024}$/ return flag.length === 0 || mask.test(flag) } @@ -25,7 +25,7 @@ export function validateFlags(flags: string[]): void { if (invalidFlags.length > 0) { throw new Error( - `Flags must consist only of alphanumeric characters, '_', '-', or '.' and not exceed 45 characters. Received ${flags}`, + `Flags cannot contain the ' or " characters and cannot exceed 1024 characters. Received ${flags}`, ) } } diff --git a/test/helpers/validate.test.ts b/test/helpers/validate.test.ts index d61f8e53e..b388b382b 100644 --- a/test/helpers/validate.test.ts +++ b/test/helpers/validate.test.ts @@ -44,11 +44,19 @@ describe('Input Validators', () => { expect(validate.isValidFlag('-moo-foor')).toBe(true) }) + it('Should pass with a long name and special characters', () => { + expect(validate.isValidFlag('uu-thisnameis-ridculouslylong-javascrip-but-thisisareally-longnamethatisgoing-tobe-supported-withmanymanycharacters-andthisflagname-istoolongto-dispaly-intheui1234567891011121314151617181920212222324252627282829201212-thisnameis$%#%&^')).toBe(true) + }) + + it('Should throw with a name longer than 1024 characters', () => { + expect(validate.isValidFlag('uu-thisnameis-ridculouslylong-javascrip-but-thisisareally-longnamethatisgoing-tobe-supported-withmanymanycharacters-andthisflagname-istoolongto-dispaly-intheui1234567891011121314151617181920212222324252627282829201212-thisnameis$%#%&^uu-thisnameis-ridculouslylong-javascrip-but-thisisareally-longnamethatisgoing-tobe-supported-withmanymanycharacters-andthisflagname-istoolongto-dispaly-intheui1234567891011121314151617181920212222324252627282829201212-thisnameis$%#%&^uu-thisnameis-ridculouslylong-javascrip-but-thisisareally-longnamethatisgoing-tobe-supported-withmanymanycharacters-andthisflagname-istoolongto-dispaly-intheui1234567891011121314151617181920212222324252627282829201212-thisnameis$%#%&^uu-thisnameis-ridculouslylong-javascrip-but-thisisareally-longnamethatisgoing-tobe-supported-withmanymanycharacters-andthisflagname-istoolongto-dispaly-intheui1234567891011121314151617181920212222324252627282829201212-thisnameis$%#%&^uu-thisnameis-ridculouslylong-javascrip-but-thisisareally-longnamethatisgoing-tobe-supported-withmanymanycharacters-andthisflagname-istoolongto-dispaly-intheui1234567891011121314151617181920212222324252627282829201212-thisnameis$%#%&^uu-thisnameis-ridculouslylong-javascrip-but-thisisareally-longnamethatisgoing-tobe-supported-withmanymanycharacters-andthisflagname-istoolongto-dispaly-intheui1234567891011121314151617181920212222324252627282829201212-thisnameis$%#%&^')).toBe(false) + }) + it("should throw when they they not match the pattern", () => { // arrange - const invalidFlagName = "flag/subflag" - const expectedErrorMessage = "Flags must consist only of alphanumeric characters, '_', '-', or '.' and not exceed 45 characters. Received flag/subflag" + const invalidFlagName = "flag'subflag" + const expectedErrorMessage = "Flags cannot contain the ' or \" characters and cannot exceed 1024 characters. Received flag'subflag" // act expect(() => validate.validateFlags([invalidFlagName])).toThrowError(expectedErrorMessage) }) @@ -73,28 +81,28 @@ describe('Input Validators', () => { }) describe('checkSlug()', () => { - it('should return true for a slug with a forward slash', () => { - // arrange - const inputSlug = "testOrg/testRepo" - const expectedResult = true + it('should return true for a slug with a forward slash', () => { + // arrange + const inputSlug = "testOrg/testRepo" + const expectedResult = true - // act - const result = validate.checkSlug(inputSlug) + // act + const result = validate.checkSlug(inputSlug) - // assert - expect(result).toEqual(expectedResult) - }) + // assert + expect(result).toEqual(expectedResult) + }) - it('should return false for a slug without a forward slash', () => { - // arrange - const inputSlug = 'testRepo' - const expectedResult = false + it('should return false for a slug without a forward slash', () => { + // arrange + const inputSlug = 'testRepo' + const expectedResult = false - // act - const result = validate.checkSlug(inputSlug) + // act + const result = validate.checkSlug(inputSlug) - // assert - expect(result).toEqual(expectedResult) - }) + // assert + expect(result).toEqual(expectedResult) + }) }) })