/
ilyaBu
/
WebSpringJava
Обзор
Документация
Войти
/
ilyaBu
/
WebSpringJava
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/test/java/ru/gb/spring/diplomawebjavaspringgb/controller/PdfGenerateControllerTest.java
152 строки
9 KB
IliaBu
Update code
13 июл 2024, 17:50
13 июл 2024, 17:50
beaa8ef
Код
Авторство
О чём код?
package ru.gb.spring.diplomawebjavaspringgb.controller; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.core.io.Resource; import org.springframework.http.ResponseEntity; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import ru.gb.spring.diplomawebjavaspringgb.model.ListSelectedParts; import ru.gb.spring.diplomawebjavaspringgb.service.PdfGenerateService; import ru.gb.spring.diplomawebjavaspringgb.service.PriceListService; import ru.gb.spring.diplomawebjavaspringgb.service.UserService; import java.util.ArrayList; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class PdfGenerateControllerTest { @Mock private PriceListService priceListService; @Mock private UserService userService; @Mock private PdfGenerateService pdfGenerateService; @Mock private RedirectAttributes redirectAttributes; @InjectMocks private PdfGenerateController pdfGenerateController; /** * Инициализирует макеты объектов, используемые в тестах. */ @BeforeEach void setUp() { MockitoAnnotations.openMocks(this); } /** * Тестовый метод отвечает за создание PDF-файла на основе предоставленных параметров. * Он принимает два параметра: {@code redirectAttributes}, который используется для добавления атрибутов Flash в ответ на перенаправление. * и {@code контрагента} — имя контрагента, для которого создается PDF-файл. * Метод возвращает строку, представляющую URL-адрес для перенаправления после создания PDF-файла. * Если создание PDF-файла прошло успешно, к ответу перенаправления добавляется флэш-атрибут «messageSuccess» с сообщением «Файл PDF успешно создан!». * Он также вызывает метод {@codegeneratePdfFile} службы {@code pdfGenerateService} с параметрами "pdf-create", * текущий пользователь и список выбранных деталей. * Если список выбранных частей пуст, то в ответ на перенаправление с сообщением «Нет данных!» добавляется флэш-атрибут «messageError». * Если в процессе создания PDF-файла возникает исключение, к ответу на перенаправление добавляется флэш-атрибут «messageError» с сообщением «Тестовое исключение». */ @Test void pdfCreate_Success() { // Arrange String counterparty = "Test Counterparty"; String currentUser = "testUser"; List<ListSelectedParts> listSelectedParts = new ArrayList<>(); listSelectedParts.add(new ListSelectedParts()); when(userService.getCurrentUserNoSymbol()).thenReturn(currentUser); when(priceListService.getRowNumberTableListSelectedParts(currentUser)).thenReturn(listSelectedParts); when(priceListService.getCountRowsTableListSelectedParts(currentUser)).thenReturn(1); String result = pdfGenerateController.pdfCreate(redirectAttributes, counterparty); assertEquals("redirect:/list-parts", result); verify(redirectAttributes).addFlashAttribute("messageSuccess", "Файл PDF успешно создан!"); verify(pdfGenerateService).generatePdfFile(eq("pdf-create"), any(), any()); } /** * Тестовый метод {@code pdfCreate_EmptyList}, проверяющий поведение метода {@code pdfCreate}, когда список выбранных запчастей пуст. * Он устанавливает необходимые макетные объекты и вызывает метод {@code pdfCreate} с тестовым контрагентом и пустым списком выбранных запчастей. * Затем метод проверяет, возвращается ли ожидаемый URL-адрес перенаправления и добавляется ли соответствующий атрибут flash к атрибутам перенаправления. * Он также проверяет, что метод {@codegeneratePdfFile} службы {@code pdfGenerateService} не вызывается, поскольку нет выбранных частей для создания PDF-файла. */ @Test void pdfCreate_EmptyList() { String counterparty = "Test Counterparty"; String currentUser = "testUser"; List<ListSelectedParts> listSelectedParts = new ArrayList<>(); when(userService.getCurrentUserNoSymbol()).thenReturn(currentUser); when(priceListService.getRowNumberTableListSelectedParts(currentUser)).thenReturn(listSelectedParts); String result = pdfGenerateController.pdfCreate(redirectAttributes, counterparty); assertEquals("redirect:/list-parts", result); verify(redirectAttributes).addFlashAttribute("messageError", "Нет данных!"); } /** * Тестовый метод {@code pdfCreate_Exception} проверяет поведение метода {@code pdfCreate} при возникновении исключения в процессе создания PDF-файла. * Он устанавливает необходимые макетные объекты и вызывает метод {@code pdfCreate} с тестовым контрагентом и тестовым пользователем. * Затем метод проверяет, возвращается ли ожидаемое перенаправление URL-адреса и добавляется ли соответствующий атрибут flash к атрибутам перенаправления. * Кроме того, это гарантирует, что метод {@codegeneratePdfFile} службы {@code pdfGenerateService} не вызывается, поскольку нет выбранных частей для создания PDF-файла. */ @Test void pdfCreate_Exception() { String counterparty = "Test Counterparty"; String currentUser = "testUser"; when(userService.getCurrentUserNoSymbol()).thenReturn(currentUser); when(priceListService.getRowNumberTableListSelectedParts(currentUser)).thenThrow(new RuntimeException("Test Exception")); String result = pdfGenerateController.pdfCreate(redirectAttributes, counterparty); assertEquals("redirect:/list-parts", result); verify(redirectAttributes).addFlashAttribute("messageError", "Test Exception"); } /** * Тестовый метод отвечает за загрузку PDF-файла с сервера. * Он принимает имя файла в качестве параметра и возвращает {@link ResponseEntity}, содержащий запрошенный файл. * Файл получается с помощью метода {@link PdfGenerateService#downloadFile(String)}. */ @Test void downloadFile() { String fileName = "test.pdf"; ResponseEntity<Resource> expectedResponse = ResponseEntity.ok().build(); when(pdfGenerateService.downloadFile(fileName)).thenReturn(expectedResponse); ResponseEntity<Resource> result = pdfGenerateController.downloadFile(fileName); assertEquals(expectedResponse, result); verify(pdfGenerateService).downloadFile(fileName); } /** * Тестовый метод отвечает за удаление указанного PDF-файла с сервера. * Он принимает имя файла в качестве параметра и возвращает URL-адрес перенаправления на список запчастей после успешного удаления. * Этот метод вызывает метод {@code delete} службы {@code pdfGenerateService} с указанным именем файла. */ @Test void delete() { String fileName = "test.pdf"; String result = pdfGenerateController.delete(fileName); assertEquals("redirect:/list-parts", result); verify(pdfGenerateService).delete(fileName); } }