From a5111809bb402d40fbc0edcdc06cc54a604f7837 Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Thu, 15 Jan 2026 16:30:47 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(frontend)=20add=20email=20validation?= =?UTF-8?q?=20pages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__tests__/UserReconciliation.test.tsx | 62 +++++++++++ .../impress/src/features/auth/api/index.ts | 1 + .../auth/api/useUserReconciliations.tsx | 51 +++++++++ .../src/features/auth/assets/rocket.gif | Bin 0 -> 66119 bytes .../auth/components/UserReconciliation.tsx | 104 ++++++++++++++++++ .../src/features/auth/components/index.ts | 1 + .../active/[id]/index.tsx | 40 +++++++ .../inactive/[id]/index.tsx | 40 +++++++ src/frontend/apps/impress/vitest.setup.ts | 19 ++++ 9 files changed, 318 insertions(+) create mode 100644 src/frontend/apps/impress/src/features/auth/__tests__/UserReconciliation.test.tsx create mode 100644 src/frontend/apps/impress/src/features/auth/api/useUserReconciliations.tsx create mode 100644 src/frontend/apps/impress/src/features/auth/assets/rocket.gif create mode 100644 src/frontend/apps/impress/src/features/auth/components/UserReconciliation.tsx create mode 100644 src/frontend/apps/impress/src/pages/user_reconciliations/active/[id]/index.tsx create mode 100644 src/frontend/apps/impress/src/pages/user_reconciliations/inactive/[id]/index.tsx diff --git a/src/frontend/apps/impress/src/features/auth/__tests__/UserReconciliation.test.tsx b/src/frontend/apps/impress/src/features/auth/__tests__/UserReconciliation.test.tsx new file mode 100644 index 00000000..4f2d3959 --- /dev/null +++ b/src/frontend/apps/impress/src/features/auth/__tests__/UserReconciliation.test.tsx @@ -0,0 +1,62 @@ +import { render, screen, waitFor } from '@testing-library/react'; +import fetchMock from 'fetch-mock'; +import React from 'react'; +import { describe, expect, test } from 'vitest'; + +import { AppWrapper } from '@/tests/utils'; + +import { UserReconciliation } from '../components/UserReconciliation'; + +describe('UserReconciliation', () => { + beforeEach(() => { + fetchMock.reset(); + }); + + ['active', 'inactive'].forEach((type) => { + test(`renders when reconciliation is a ${type} success`, async () => { + fetchMock.get( + `http://test.jest/api/v1.0/user_reconciliations/${type}/123456/`, + { details: 'Success' }, + ); + + render( + , + { + wrapper: AppWrapper, + }, + ); + + await waitFor(() => { + expect(fetchMock.calls().length).toBe(1); + }); + + expect( + await screen.findByText(/Email validated successfully !/i), + ).toBeInTheDocument(); + }); + }); + + test('renders when reconciliation fails', async () => { + fetchMock.get( + `http://test.jest/api/v1.0/user_reconciliations/active/invalid-id/`, + { + throws: new Error('invalid id'), + }, + ); + + render(, { + wrapper: AppWrapper, + }); + + await waitFor(() => { + expect(fetchMock.calls().length).toBe(1); + }); + + expect( + await screen.findByText(/An error occurred during email validation./i), + ).toBeInTheDocument(); + }); +}); diff --git a/src/frontend/apps/impress/src/features/auth/api/index.ts b/src/frontend/apps/impress/src/features/auth/api/index.ts index ce8db5d4..a07760a0 100644 --- a/src/frontend/apps/impress/src/features/auth/api/index.ts +++ b/src/frontend/apps/impress/src/features/auth/api/index.ts @@ -1,2 +1,3 @@ export * from './useAuthQuery'; +export * from './useUserReconciliations'; export * from './types'; diff --git a/src/frontend/apps/impress/src/features/auth/api/useUserReconciliations.tsx b/src/frontend/apps/impress/src/features/auth/api/useUserReconciliations.tsx new file mode 100644 index 00000000..9185563d --- /dev/null +++ b/src/frontend/apps/impress/src/features/auth/api/useUserReconciliations.tsx @@ -0,0 +1,51 @@ +import { UseQueryOptions, useQuery } from '@tanstack/react-query'; + +import { APIError, errorCauses, fetchAPI } from '@/api'; + +type UserReconciliationResponse = { + details: string; +}; + +interface UserReconciliationProps { + type: 'active' | 'inactive'; + reconciliationId?: string; +} + +export const userReconciliations = async ({ + type, + reconciliationId, +}: UserReconciliationProps): Promise => { + const response = await fetchAPI( + `user_reconciliations/${type}/${reconciliationId}/`, + ); + + if (!response.ok) { + throw new APIError( + 'Failed to do the user reconciliation', + await errorCauses(response), + ); + } + + return response.json() as Promise; +}; + +export const KEY_USER_RECONCILIATIONS = 'user_reconciliations'; + +export function useUserReconciliationsQuery( + param: UserReconciliationProps, + queryConfig?: UseQueryOptions< + UserReconciliationResponse, + APIError, + UserReconciliationResponse + >, +) { + return useQuery< + UserReconciliationResponse, + APIError, + UserReconciliationResponse + >({ + queryKey: [KEY_USER_RECONCILIATIONS, param], + queryFn: () => userReconciliations(param), + ...queryConfig, + }); +} diff --git a/src/frontend/apps/impress/src/features/auth/assets/rocket.gif b/src/frontend/apps/impress/src/features/auth/assets/rocket.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0f183267f1ffcbd45e5c0ad04136e85a1acf918 GIT binary patch literal 66119 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 b3En;McX=L>SQz&2Myd9>@CABwWa<9_oPkp{ literal 0 HcmV?d00001 diff --git a/src/frontend/apps/impress/src/features/auth/components/UserReconciliation.tsx b/src/frontend/apps/impress/src/features/auth/components/UserReconciliation.tsx new file mode 100644 index 00000000..40a1e5e1 --- /dev/null +++ b/src/frontend/apps/impress/src/features/auth/components/UserReconciliation.tsx @@ -0,0 +1,104 @@ +import { Button } from '@gouvfr-lasuite/cunningham-react'; +import Image from 'next/image'; +import { useTranslation } from 'react-i18next'; +import styled from 'styled-components'; + +import error_img from '@/assets/icons/error-planetes.png'; +import { Box, Icon, Loading, StyledLink, Text } from '@/components'; + +import { useUserReconciliationsQuery } from '../api'; +import success_gif from '../assets/rocket.gif'; + +const StyledButton = styled(Button)` + width: fit-content; +`; + +interface UserReconciliationProps { + type: 'active' | 'inactive'; + reconciliationId: string; +} + +export const UserReconciliation = ({ + type, + reconciliationId, +}: UserReconciliationProps) => { + const { t } = useTranslation(); + const { data: userReconciliations, isError } = useUserReconciliationsQuery({ + type, + reconciliationId, + }); + + if (!userReconciliations && !isError) { + return ( + + ); + } + + let render = ( + <> + + + {t('Email validated successfully !')} + + + ); + + if (isError) { + render = ( + <> + + + {t('An error occurred during email validation.')} + + + ); + } + + return ( + + {render} + + + + + } + > + {t('Home')} + + + + + ); +}; diff --git a/src/frontend/apps/impress/src/features/auth/components/index.ts b/src/frontend/apps/impress/src/features/auth/components/index.ts index 26ebaf2e..0a91bf37 100644 --- a/src/frontend/apps/impress/src/features/auth/components/index.ts +++ b/src/frontend/apps/impress/src/features/auth/components/index.ts @@ -1,3 +1,4 @@ export * from './Auth'; export * from './ButtonLogin'; export * from './UserAvatar'; +export * from './UserReconciliation'; diff --git a/src/frontend/apps/impress/src/pages/user_reconciliations/active/[id]/index.tsx b/src/frontend/apps/impress/src/pages/user_reconciliations/active/[id]/index.tsx new file mode 100644 index 00000000..7fa8c27a --- /dev/null +++ b/src/frontend/apps/impress/src/pages/user_reconciliations/active/[id]/index.tsx @@ -0,0 +1,40 @@ +import Head from 'next/head'; +import { useRouter } from 'next/router'; +import { ReactElement } from 'react'; +import { useTranslation } from 'react-i18next'; + +import { UserReconciliation } from '@/features/auth/components/UserReconciliation'; +import { PageLayout } from '@/layouts'; +import { NextPageWithLayout } from '@/types/next'; + +const Page: NextPageWithLayout = () => { + const { t } = useTranslation(); + const { + query: { id }, + } = useRouter(); + + if (typeof id !== 'string') { + return null; + } + + return ( + <> + + + {`${t('User reconciliation')} - ${t('Docs')}`} + + + + + ); +}; + +Page.getLayout = function getLayout(page: ReactElement) { + return {page}; +}; + +export default Page; diff --git a/src/frontend/apps/impress/src/pages/user_reconciliations/inactive/[id]/index.tsx b/src/frontend/apps/impress/src/pages/user_reconciliations/inactive/[id]/index.tsx new file mode 100644 index 00000000..c10cbb38 --- /dev/null +++ b/src/frontend/apps/impress/src/pages/user_reconciliations/inactive/[id]/index.tsx @@ -0,0 +1,40 @@ +import Head from 'next/head'; +import { useRouter } from 'next/router'; +import { ReactElement } from 'react'; +import { useTranslation } from 'react-i18next'; + +import { UserReconciliation } from '@/features/auth/components/UserReconciliation'; +import { PageLayout } from '@/layouts'; +import { NextPageWithLayout } from '@/types/next'; + +const Page: NextPageWithLayout = () => { + const { t } = useTranslation(); + const { + query: { id }, + } = useRouter(); + + if (typeof id !== 'string') { + return null; + } + + return ( + <> + + + {`${t('User reconciliation')} - ${t('Docs')}`} + + + + + ); +}; + +Page.getLayout = function getLayout(page: ReactElement) { + return {page}; +}; + +export default Page; diff --git a/src/frontend/apps/impress/vitest.setup.ts b/src/frontend/apps/impress/vitest.setup.ts index de0945cf..6e449e8b 100644 --- a/src/frontend/apps/impress/vitest.setup.ts +++ b/src/frontend/apps/impress/vitest.setup.ts @@ -1,4 +1,23 @@ import '@testing-library/jest-dom/vitest'; import * as dotenv from 'dotenv'; +import React from 'react'; +import { vi } from 'vitest'; dotenv.config({ path: './.env.test', quiet: true }); + +vi.mock('next/image', () => ({ + __esModule: true, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + default: (props: any) => { + const { + src, + alt = '', + unoptimized: _unoptimized, + priority: _priority, + ...rest + } = props; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const resolved = typeof src === 'string' ? src : src?.src; + return React.createElement('img', { src: resolved, alt, ...rest }); + }, +}));