diff --git a/src/app/msw/handlers.ts b/src/app/msw/handlers.ts index 6a4fa5795..4b8a8d757 100644 --- a/src/app/msw/handlers.ts +++ b/src/app/msw/handlers.ts @@ -24,6 +24,7 @@ import { usersRatingHandlers } from '@/entities/user'; import { createCollectionHandlers } from '@/features/collections/createCollection'; import { collectionDeleteHandlers } from '@/features/collections/deleteCollection'; +import { collectionEditHandlers } from '@/features/collections/editCollection'; import { createCompanyHandlers } from '@/features/company/createCompany'; import { createFeatureFlagHandlers } from '@/features/featureFlag/createFeatureFlag'; import { featureFlagDeleteHandlers } from '@/features/featureFlag/deleteFeatureFlag'; @@ -52,6 +53,7 @@ export const handlers = [ ...interviewHandlers, ...questionHandlers, ...collectionHandlers, + ...collectionEditHandlers, ...collectionDeleteHandlers, ...specializationHandlers, ...featureFlagHandlers, diff --git a/src/features/collections/editCollection/api/__mocks__/editCollectionMock.ts b/src/features/collections/editCollection/api/__mocks__/editCollectionMock.ts new file mode 100644 index 000000000..a2970840f --- /dev/null +++ b/src/features/collections/editCollection/api/__mocks__/editCollectionMock.ts @@ -0,0 +1,50 @@ +import { http, HttpResponse } from 'msw'; + +import { collectionsMock } from '@/entities/collection'; +import { companiesMock } from '@/entities/company'; +import { specializationsMock } from '@/entities/specialization'; + +import { editCollectionApiUrls } from '../../model/constants/editCollectionConstants'; +import { + EditCollectionBodyRequest, + EditCollectionResponse, +} from '../../model/types/collectionEditTypes'; + +export const editCollectionMock = http.patch< + { collectionId: string }, + EditCollectionBodyRequest, + EditCollectionResponse +>(process.env.API_URL + editCollectionApiUrls.editCollection, async ({ params, request }) => { + const collectionId = Number(params.collectionId); + + const index = collectionsMock.data.findIndex((collection) => collection.id === collectionId); + + if (index === -1) { + return HttpResponse.json(null, { status: 404 }); + } + + const body = await request.json(); + + const currentCollection = collectionsMock.data[index]; + const companyIndex = companiesMock.data.findIndex((c) => String(c.id) === body.companyId); + + const updatedCollection: EditCollectionResponse = { + ...currentCollection, + title: body.title ?? currentCollection.title, + description: body.description ?? currentCollection.description, + imageSrc: body.collectionImage ?? currentCollection.imageSrc ?? null, + tariff: (body.isFree ?? currentCollection.isFree) ? 'free' : 'premium', + questionsCount: body.questions?.length ?? currentCollection.questions?.length ?? 0, + tasksCount: body.taskIds?.length ?? currentCollection.tasks?.length ?? 0, + specializations: body.specializations + ? body.specializations.map((id) => specializationsMock.find((spec) => spec.id === id)!) + : currentCollection.specializations, + keywords: body.keywords ?? currentCollection.keywords ?? [], + company: companiesMock.data[companyIndex], + createdBy: currentCollection.createdBy, + }; + + collectionsMock.data[index] = updatedCollection; + + return HttpResponse.json(updatedCollection); +}); diff --git a/src/features/collections/editCollection/api/__mocks__/index.ts b/src/features/collections/editCollection/api/__mocks__/index.ts new file mode 100644 index 000000000..be6dfb328 --- /dev/null +++ b/src/features/collections/editCollection/api/__mocks__/index.ts @@ -0,0 +1,3 @@ +import { editCollectionMock } from './editCollectionMock'; + +export const collectionEditHandlers = [editCollectionMock]; diff --git a/src/features/collections/editCollection/index.ts b/src/features/collections/editCollection/index.ts index 825247b24..62ce2c7e7 100644 --- a/src/features/collections/editCollection/index.ts +++ b/src/features/collections/editCollection/index.ts @@ -1 +1,2 @@ export { CollectionEditForm } from './ui/CollectionEditForm/CollectionEditForm'; +export { collectionEditHandlers } from './api/__mocks__/index';