diff --git a/src/frontend/src/lib/schema/network.schema.ts b/src/frontend/src/lib/schema/network.schema.ts index 760bba84d8..2b594fb3da 100644 --- a/src/frontend/src/lib/schema/network.schema.ts +++ b/src/frontend/src/lib/schema/network.schema.ts @@ -17,11 +17,15 @@ export const NetworkAppMetadataSchema = z.object({ explorerUrl: UrlSchema }); +const IconSchema = z + .string() + .refine((value) => value.endsWith('.svg'), { message: 'Must be an SVG file' }); + export const NetworkSchema = z.object({ id: NetworkIdSchema, env: NetworkEnvironmentSchema, name: z.string(), - icon: z.string().optional(), - iconBW: z.string().optional(), + icon: IconSchema.optional(), + iconBW: IconSchema.optional(), buy: z.custom>().optional() }); diff --git a/src/frontend/src/tests/lib/schema/network.schema.spec.ts b/src/frontend/src/tests/lib/schema/network.schema.spec.ts index 6ee8858083..1daa9f8b84 100644 --- a/src/frontend/src/tests/lib/schema/network.schema.spec.ts +++ b/src/frontend/src/tests/lib/schema/network.schema.spec.ts @@ -86,8 +86,8 @@ describe('network.schema', () => { const validNetwork = { ...validNetworkWithRequiredFields, - icon: 'https://example.com/icon.png', - iconBW: 'https://example.com/icon-bw.png', + icon: 'https://example.com/icon.svg', + iconBW: 'https://example.com/icon-bw.svg', buy: { onramperId: 'icp' } }; @@ -115,5 +115,21 @@ describe('network.schema', () => { const { name: _, ...invalidNetwork } = validNetwork; expect(() => NetworkSchema.parse(invalidNetwork)).toThrow(); }); + + it('should fail validation when icon is not a valid SVG string', () => { + const invalidNetwork = { + ...validNetwork, + icon: 'https://example.com/invalid-icon.png' + }; + expect(() => NetworkSchema.parse(invalidNetwork)).toThrow(); + }); + + it('should fail validation when iconBW is not a valid SVG string', () => { + const invalidNetwork = { + ...validNetwork, + iconBW: 'https://example.com/invalid-icon-bw.png' + }; + expect(() => NetworkSchema.parse(invalidNetwork)).toThrow(); + }); }); });