Skip to content

Commit

Permalink
feat(fga-eps-mds/2024.2-ARANDU-DOC#66): mais alguns testes
Browse files Browse the repository at this point in the history
  • Loading branch information
Joao151104 committed Feb 1, 2025
1 parent 45a04ba commit b07ed8e
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 21 deletions.
31 changes: 14 additions & 17 deletions src/app/subjects/[...pointId]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import {
import Popup from '@/components/ui/popup';
import { SubjectForm } from '@/components/forms/subject.form';
import { toast } from 'sonner';
import { updateSubject, addSubject, handleSubjectAction, handleRemoveSubject, handleMenuOpen, fetchSubjects } from './subject.functions';
import { updateSubject, addSubject, handleSubjectAction, handleRemoveSubject, handleMenuOpen, fetchSubjects, handleMenuClose } from './subject.functions';

export default function SubjectPage({
params,
Expand Down Expand Up @@ -69,11 +69,6 @@ export default function SubjectPage({
}
}, [searchQuery, listSubjects]);


const handleMenuClose = () => {
setAnchorEl(null);
};

if (isLoading) {
return <CircularProgress />;
}
Expand All @@ -82,7 +77,8 @@ export default function SubjectPage({
return <Typography>Error fetching subjects</Typography>;
}

return (

const SubjectPage = (
<Box
sx={{
padding: 2,
Expand All @@ -95,17 +91,15 @@ export default function SubjectPage({
<Box sx={{ width: '100%', maxWidth: 800, marginBottom: 2 }}>
<SearchBar value={searchQuery} onChange={setSearchQuery} />
</Box>
<Box sx={{ width: '100%', maxWidth: 800 }}><SubjectTable
subjects={filteredSubjects}
anchorEl={anchorEl}
onMenuClick={(event, subject) => handleMenuOpen(event, subject, setAnchorEl, setSelectedSubject)}
onMenuClose={() => handleMenuClose(setAnchorEl)}
onSubjectAction={(action) => handleSubjectAction(action, setEditionDialogOpen, setExclusionDialogOpen)}
/></Box>

<Box sx={{ width: '100%', maxWidth: 800, marginBottom: 2 }}>
<SubjectTable
subjects={filteredSubjects}
anchorEl={anchorEl}
onMenuClick={(event, subject) => handleMenuOpen(event, subject, setAnchorEl, setSelectedSubject)}
onMenuClose={handleMenuClose}
onSubjectAction={(action) => handleSubjectAction(action, setEditionDialogOpen, setExclusionDialogOpen)}

/>
</Box>

<ButtonRed onClick={() => setCreateDialogOpen(true)}>
Nova Disciplina
Expand Down Expand Up @@ -157,6 +151,9 @@ export default function SubjectPage({
</Button>
</DialogActions>
</Dialog>
</Box>
</Box >
);

return SubjectPage

}
4 changes: 4 additions & 0 deletions src/app/subjects/[...pointId]/subject.functions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,7 @@ export const fetchSubjects = async (

return subjects;
};

export const handleMenuClose = (setAnchorEl: React.Dispatch<React.SetStateAction<null | HTMLElement>>,) => {
setAnchorEl(null);
};
1 change: 1 addition & 0 deletions src/components/admin/SearchBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const SearchBar: React.FC<SearchBarProps> = ({ value, onChange }) => {
variant="outlined"
fullWidth
value={value}
role="searchbox"
onChange={(e) => onChange(e.target.value)}
InputProps={{
startAdornment: (
Expand Down
95 changes: 91 additions & 4 deletions test/app/subjects/[...pointid]/page.test.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { act, render, renderHook, screen } from '@testing-library/react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { act, render, renderHook, screen, waitFor } from '@testing-library/react';
import { QueryClient, QueryClientProvider, useQuery } from '@tanstack/react-query';
import '@testing-library/jest-dom';
import SubjectPage from '@/app/subjects/[...pointId]/page';
import { deleteSubjects, GetSubjects, GetSubjectsByUserId } from '@/services/studioMaker.service';
import { toast } from 'sonner';
import { fetchSubjects, handleMenuOpen, handleRemoveSubject, handleSubjectAction, updateSubject } from '@/app/subjects/[...pointId]/subject.functions';
import { addSubject, fetchSubjects, handleMenuClose, handleMenuOpen, handleRemoveSubject, handleSubjectAction, updateSubject } from '@/app/subjects/[...pointId]/subject.functions';
import { Subject } from '@/lib/interfaces/subjetc.interface';
import { useState } from 'react';

Expand Down Expand Up @@ -51,9 +51,14 @@ jest.mock('sonner', () => ({
describe('SubjectPage', () => {
const queryClient = new QueryClient();

jest.mock('@/services/studioMaker.service', () => ({
fetchSubjects: jest.fn().mockRejectedValue(new Error('Falha na requisição')),
}));

beforeEach(() => {
jest.clearAllMocks();
(GetSubjects as jest.Mock).mockResolvedValue(mockSubjects);
(GetSubjectsByUserId as jest.Mock).mockResolvedValue(mockSubjects);
});

it('deve exibir o indicador de carregamento enquanto os dados são buscados', async () => {
Expand Down Expand Up @@ -83,7 +88,7 @@ describe('SubjectPage', () => {
// Verificar se o indicador de carregamento (progressbar) está visível
expect(screen.getByRole('progressbar')).toBeInTheDocument();
});
it('deve ordenar as disciplinas pela propriedade order e chamar setListSubjects e setFilteredSubjects corretamente', async () => {
it('deve ordenar as disciplinas pela propriedade order e chamar setListSubjects e setFilteredSubjects corretamente "admin"', async () => {
// Mock da função de estado
const setListSubjects = jest.fn();
const setFilteredSubjects = jest.fn();
Expand All @@ -110,10 +115,81 @@ describe('SubjectPage', () => {
{ ...mockSubjects[1], order: 2 },
]);
});
it('deve ordenar as disciplinas pela propriedade order e chamar setListSubjects e setFilteredSubjects corretamente "aluno"', async () => {
const setListSubjects = jest.fn();
const setFilteredSubjects = jest.fn();

const params = { pointId: '1234' };

const subjects = await fetchSubjects(params, setListSubjects, setFilteredSubjects);

expect(subjects[0].order).toBe(1);
expect(subjects[1].order).toBe(2);

expect(setListSubjects).toHaveBeenCalledWith(subjects);
expect(setFilteredSubjects).toHaveBeenCalledWith(subjects);

expect(subjects).toEqual([
{ ...mockSubjects[0], order: 1 },
{ ...mockSubjects[1], order: 2 },
]);
});

it('deve exibir uma mensagem de erro quando a requisição falhar', async () => {
// Mocka o serviço para rejeitar a requisição
(GetSubjects as jest.Mock).mockRejectedValue(new Error('Falha na requisição'));

// Renderiza o componente SubjectPage
render(
<QueryClientProvider client={queryClient}>
<SubjectPage params={{ pointId: '123' }} />
</QueryClientProvider>
);

const errorMessage = screen.queryByText(/Error fetching subjects/i);

// Como o erro deve ser exibido imediatamente após a falha da requisição
expect(errorMessage)
});
});


describe('addSubject', () => {
it('Deve Adicionar uma nova Disciplina', async () => {
const { result } = renderHook(() => {
const [listSubjects, setListSubjects] = useState(mockSubjects);

return { listSubjects, setListSubjects };
});

const newSubject: Subject = {
_id: '1',
name: 'Matemática Avançada',
shortName: 'MAT',
description: 'Disciplina de Matemática Avançada',
user: 'user1',
journeys: ['journey1'],
order: 1,
createdAt: '2024-01-01T12:00:00Z',
updatedAt: '2024-01-02T12:00:00Z',
__v: 0,
};

act(() => {
addSubject(newSubject, result.current.listSubjects, result.current.setListSubjects);
});

expect(result.current.listSubjects).toEqual([
mockSubjects[0],
newSubject,
mockSubjects[1]

]);
})

})


describe('updateSubject', () => {
it("Deve atualizar a lista de subjects corretamente", async () => {
const { result } = renderHook(() => {
Expand Down Expand Up @@ -296,3 +372,14 @@ describe('handleMenuOpen', () => {
expect(setSelectedSubject).toHaveBeenCalledWith(subject);
});
});

describe("handleMenuClose", () => {
it("Teste do handleMenuClose", async () => {
const setAnchorEl = jest.fn(); // Mock da função de estado

handleMenuClose(setAnchorEl); // Chama a função com o mock

expect(setAnchorEl).toHaveBeenCalledWith(null); // Verifica

})
})

0 comments on commit b07ed8e

Please sign in to comment.