fix: cys design with ai duplicate color validation (#40670)
This commit is contained in:
parent
1b18634ad3
commit
773baea857
|
@ -222,10 +222,19 @@ export const colorPaletteValidator = z.object( {
|
||||||
.regex( hexColorRegex, { message: 'Invalid background color' } ),
|
.regex( hexColorRegex, { message: 'Invalid background color' } ),
|
||||||
} );
|
} );
|
||||||
|
|
||||||
export const colorPaletteResponseValidator = z.object( {
|
export const colorPaletteResponseValidator = z
|
||||||
default: colorPaletteNameValidator,
|
.object( {
|
||||||
bestColors: z.array( colorPaletteNameValidator ).length( 8 ),
|
default: colorPaletteNameValidator,
|
||||||
} );
|
bestColors: z.array( colorPaletteNameValidator ).length( 8 ),
|
||||||
|
} )
|
||||||
|
.refine(
|
||||||
|
( response ) => {
|
||||||
|
const allColors = [ response.default, ...response.bestColors ];
|
||||||
|
const uniqueColors = new Set( allColors );
|
||||||
|
return uniqueColors.size === allColors.length;
|
||||||
|
},
|
||||||
|
{ message: 'Color palette names must be unique' }
|
||||||
|
);
|
||||||
|
|
||||||
export const defaultColorPalette = {
|
export const defaultColorPalette = {
|
||||||
queryId: 'default_color_palette',
|
queryId: 'default_color_palette',
|
||||||
|
|
|
@ -141,12 +141,20 @@ describe( 'colorPaletteValidator', () => {
|
||||||
} );
|
} );
|
||||||
|
|
||||||
describe( 'colorPaletteResponseValidator', () => {
|
describe( 'colorPaletteResponseValidator', () => {
|
||||||
|
const validPalette = {
|
||||||
|
default: 'Ancient Bronze',
|
||||||
|
bestColors: [
|
||||||
|
'Canary',
|
||||||
|
'Cinder',
|
||||||
|
'Rustic Rosewood',
|
||||||
|
'Lightning',
|
||||||
|
'Midnight Citrus',
|
||||||
|
'Purple Twilight',
|
||||||
|
'Crimson Tide',
|
||||||
|
'Ice',
|
||||||
|
],
|
||||||
|
};
|
||||||
it( 'should validate a correct color palette response', () => {
|
it( 'should validate a correct color palette response', () => {
|
||||||
const validPalette = {
|
|
||||||
default: 'Ancient Bronze',
|
|
||||||
bestColors: Array( 8 ).fill( 'Ancient Bronze' ),
|
|
||||||
};
|
|
||||||
|
|
||||||
const parsedResult =
|
const parsedResult =
|
||||||
defaultColorPalette.responseValidation( validPalette );
|
defaultColorPalette.responseValidation( validPalette );
|
||||||
expect( parsedResult ).toEqual( validPalette );
|
expect( parsedResult ).toEqual( validPalette );
|
||||||
|
@ -154,10 +162,10 @@ describe( 'colorPaletteResponseValidator', () => {
|
||||||
|
|
||||||
it( 'should fail if array contains invalid color', () => {
|
it( 'should fail if array contains invalid color', () => {
|
||||||
const invalidPalette = {
|
const invalidPalette = {
|
||||||
default: 'Ancient Bronze',
|
default: validPalette.default,
|
||||||
bestColors: Array( 7 )
|
bestColors: validPalette.bestColors
|
||||||
.fill( 'Ancient Bronze' )
|
.slice( 0, 7 )
|
||||||
.concat( [ 'Invalid Color' ] ),
|
.concat( 'Invalid Color' ),
|
||||||
};
|
};
|
||||||
expect( () => defaultColorPalette.responseValidation( invalidPalette ) )
|
expect( () => defaultColorPalette.responseValidation( invalidPalette ) )
|
||||||
.toThrowErrorMatchingInlineSnapshot( `
|
.toThrowErrorMatchingInlineSnapshot( `
|
||||||
|
@ -195,7 +203,7 @@ describe( 'colorPaletteResponseValidator', () => {
|
||||||
} );
|
} );
|
||||||
it( 'should fail if default property is missing', () => {
|
it( 'should fail if default property is missing', () => {
|
||||||
const invalidPalette = {
|
const invalidPalette = {
|
||||||
bestColors: Array( 8 ).fill( 'Ancient Bronze' ),
|
bestColors: validPalette.bestColors,
|
||||||
};
|
};
|
||||||
expect( () => defaultColorPalette.responseValidation( invalidPalette ) )
|
expect( () => defaultColorPalette.responseValidation( invalidPalette ) )
|
||||||
.toThrowErrorMatchingInlineSnapshot( `
|
.toThrowErrorMatchingInlineSnapshot( `
|
||||||
|
@ -216,7 +224,7 @@ describe( 'colorPaletteResponseValidator', () => {
|
||||||
it( 'should fail if bestColors array is not of length 8', () => {
|
it( 'should fail if bestColors array is not of length 8', () => {
|
||||||
const invalidPalette = {
|
const invalidPalette = {
|
||||||
default: 'Ancient Bronze',
|
default: 'Ancient Bronze',
|
||||||
bestColors: Array( 7 ).fill( 'Ancient Bronze' ),
|
bestColors: validPalette.bestColors.slice( 0, 7 ),
|
||||||
};
|
};
|
||||||
expect( () => defaultColorPalette.responseValidation( invalidPalette ) )
|
expect( () => defaultColorPalette.responseValidation( invalidPalette ) )
|
||||||
.toThrowErrorMatchingInlineSnapshot( `
|
.toThrowErrorMatchingInlineSnapshot( `
|
||||||
|
@ -235,4 +243,21 @@ describe( 'colorPaletteResponseValidator', () => {
|
||||||
]"
|
]"
|
||||||
` );
|
` );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
it( 'should fail if there are duplicate colors', () => {
|
||||||
|
const invalidPalette = {
|
||||||
|
default: 'Ancient Bronze',
|
||||||
|
bestColors: Array( 8 ).fill( 'Ancient Bronze' ),
|
||||||
|
};
|
||||||
|
expect( () => defaultColorPalette.responseValidation( invalidPalette ) )
|
||||||
|
.toThrowErrorMatchingInlineSnapshot( `
|
||||||
|
"[
|
||||||
|
{
|
||||||
|
\\"code\\": \\"custom\\",
|
||||||
|
\\"message\\": \\"Color palette names must be unique\\",
|
||||||
|
\\"path\\": []
|
||||||
|
}
|
||||||
|
]"
|
||||||
|
` );
|
||||||
|
} );
|
||||||
} );
|
} );
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: patch
|
||||||
|
Type: fix
|
||||||
|
|
||||||
|
CYS: Fix the bug where sometimes switching from user defined color palettes to a pre-defined color palette won't set some colors.
|
Loading…
Reference in New Issue