[ SourceCode 참고]
https://github.com/jjangsky/Testing-study
요구 사항에 맞춰 메일 발송 후, 관련 내용을 DB에 저장해야 하므로 새로운 Entity 생성
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
public class MailSendHistory extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String fromEmail;
private String toEmail;
private String subject;
private String content;
}
MailsendClient의 sendEmail는 메일을 발송하는 로직을 갖고있는 Method 이지만, 이번 Test에서는 메일을 발송했다는 가정을 두고 직접 로직 구현X
OrderStatisticsService Business Code
@Transactional
public boolean sendOrderStatisticsMail(LocalDate orderDate, String email){
// 해당 일자에 결제완료된 주문들을 가져와서
List<Order> orders = orderRepository.findOrdersBy(
orderDate.atStartOfDay(),
orderDate.plusDays(1).atStartOfDay(),
OrderStatus.PAYMENT_COMPLETED
);
// 총 매출 합계를 계산하고
int totalAmount = orders.stream()
.mapToInt(Order::getTotalPrice)
.sum();
// 메일 전송
boolean result = mailService.sendMail("[email protected]",
email,
String.format("[매출통계] %s", orderDate),
String.format("총 매출 합계는 %s원 입니다.", totalAmount)
);
if(!result){
throw new IllegalArgumentException("매출 통계 메일 전송에 실패했습니다.");
}
return true;
}
MailService Business Code