Skip to content

Commit

Permalink
test(#119): GenerateProofOfApplicationUseCaseTest 작성
Browse files Browse the repository at this point in the history
- GenerateProofOfApplicationUseCaseTest를 생성했어요.
  • Loading branch information
jyj1289 committed Sep 6, 2024
1 parent d9e27ff commit 5dfe482
Showing 1 changed file with 98 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package com.bamdoliro.maru.application.form;

import com.bamdoliro.maru.domain.form.domain.Form;
import com.bamdoliro.maru.domain.form.domain.type.FormType;
import com.bamdoliro.maru.domain.form.exception.FormNotFoundException;
import com.bamdoliro.maru.domain.form.exception.InvalidFormStatusException;
import com.bamdoliro.maru.domain.form.service.FormFacade;
import com.bamdoliro.maru.domain.user.domain.User;
import com.bamdoliro.maru.infrastructure.pdf.GeneratePdfService;
import com.bamdoliro.maru.infrastructure.s3.FileService;
import com.bamdoliro.maru.infrastructure.thymeleaf.ProcessTemplateService;
import com.bamdoliro.maru.shared.fixture.FormFixture;
import com.bamdoliro.maru.shared.fixture.SharedFixture;
import com.bamdoliro.maru.shared.fixture.UserFixture;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.io.ByteArrayOutputStream;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.willThrow;
import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)

public class GenerateProofOfApplicationUseCaseTest {

@InjectMocks
private GenerateProofOfApplicationUseCase generateProofOfApplicationUseCase;

@Mock
private FormFacade formFacade;

@Mock
private ProcessTemplateService processTemplateService;

@Mock
private GeneratePdfService generatePdfService;

@Mock
private FileService fileService;

@Test
void 접수증을_생성한다() {
// given
User user = UserFixture.createUser();
Form form = FormFixture.createForm(FormType.MULTI_CHILDREN);
form.submit();
given(formFacade.getForm(user)).willReturn(form);
given(processTemplateService.execute(any(String.class), any(Map.class))).willReturn("html");
given(fileService.getPresignedUrl(any(String.class), any(String.class))).willReturn(SharedFixture.createFormUrlResponse());
given(generatePdfService.execute(any(String.class))).willReturn(new ByteArrayOutputStream());

// when
generateProofOfApplicationUseCase.execute(user);

// then
verify(formFacade, times(1)).getForm(user);
verify(processTemplateService, times(1)).execute(any(String.class), any(Map.class));
verify(generatePdfService, times(1)).execute(any(String.class));
verify(fileService, times(1)).getPresignedUrl(any(String.class), any(String.class));
}

@Test
void 접수증을_생성할__상태가_최종제출이_아닌_사용자라면_에러가_발생한다() {
// given
User user = UserFixture.createUser();
Form form = FormFixture.createForm(FormType.MULTI_CHILDREN);
given(formFacade.getForm(user)).willReturn(form);

// when and then
assertThrows(InvalidFormStatusException.class, () -> generateProofOfApplicationUseCase.execute(user));

verify(formFacade, times(1)).getForm(user);
verify(processTemplateService, never()).execute(any(String.class), any(Map.class));
verify(generatePdfService, never()).execute(any(String.class));
}

@Test
void 접수증을_생성할__원서를_접수하지_않았다면_에러가_발생한다() {
// given
User user = UserFixture.createUser();
willThrow(new FormNotFoundException()).given(formFacade).getForm(user);

// when and then
assertThrows(FormNotFoundException.class, () -> generateProofOfApplicationUseCase.execute(user));

verify(formFacade, times(1)).getForm(user);
verify(processTemplateService, never()).execute(any(String.class), any(Map.class));
verify(generatePdfService, never()).execute(any(String.class));
}
}

0 comments on commit 5dfe482

Please sign in to comment.