diff --git a/api/src/routes/settings.test.ts b/api/src/routes/settings.test.ts index 2b0e83ffd7f..490bb9b3a93 100644 --- a/api/src/routes/settings.test.ts +++ b/api/src/routes/settings.test.ts @@ -530,11 +530,26 @@ Please wait 5 minutes to resend an authentication link.` expect(response.statusCode).toEqual(200); }); + test('PUT accepts empty strings for socials', async () => { + const response = await superPut('/update-my-socials').send({ + website: 'https://www.freecodecamp.org/', + twitter: '', + linkedin: '', + githubProfile: '' + }); + + expect(response.body).toEqual({ + message: 'flash.updated-socials', + type: 'success' + }); + expect(response.statusCode).toEqual(200); + }); + test('PUT returns 400 status code with invalid socials setting', async () => { const response = await superPut('/update-my-socials').send({ website: 'invalid', - twitter: 'invalid', - linkedin: 'invalid', + twitter: '', + linkedin: '', githubProfile: 'invalid' }); diff --git a/api/src/schemas/settings/update-my-socials.ts b/api/src/schemas/settings/update-my-socials.ts index fd4f4fee7bc..f0a3e98c3be 100644 --- a/api/src/schemas/settings/update-my-socials.ts +++ b/api/src/schemas/settings/update-my-socials.ts @@ -1,13 +1,16 @@ import { Type } from '@fastify/type-provider-typebox'; +const urlOrEmptyString = Type.Union([ + Type.Literal(''), + Type.String({ format: 'uri', maxLength: 1024 }) +]); + export const updateMySocials = { body: Type.Object({ - website: Type.Optional(Type.String({ format: 'url', maxLength: 1024 })), - twitter: Type.Optional(Type.String({ format: 'url', maxLength: 1024 })), - githubProfile: Type.Optional( - Type.String({ format: 'url', maxLength: 1024 }) - ), - linkedin: Type.Optional(Type.String({ format: 'url', maxLength: 1024 })) + website: urlOrEmptyString, + twitter: urlOrEmptyString, + githubProfile: urlOrEmptyString, + linkedin: urlOrEmptyString }), response: { 200: Type.Object({