Project

[Toss] 잔액사용 확인(2)

sangyunpark 2023. 8. 26. 01:06

Test코드를 작성해보자

 

Controller Test Code

@Test
@DisplayName("")
void successGetTransaction() throws Exception{
    //given
    given(transactionService.getTransactionByTransactionId(anyString()))
            .willReturn(
              TransactionDto.builder()
                      .transactionId("21asfq3qpeu12351cxv")
                      .accountNumber("1234567890")
                      .transactionType(USE)
                      .transactionResultType(SUCCESS)
                      .amount(1000L)
                      .transactedAt(LocalDateTime.now())
                      .build()
            );
    //when

    //then
    mockMvc.perform(get("/transaction?id=sadfsaffe"))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.accountNumber").value("1234567890"))
            .andExpect(jsonPath("$.transactionId").value("21asfq3qpeu12351cxv"))
            .andExpect(jsonPath("$.transactionResultType").value("SUCCESS"))
            .andExpect(jsonPath("$.amount").value(1000L));

}

 

Service Test Code

 

성공 Case

@Test
@DisplayName("트랜잭션 가져오기 성공")
void succesGetTransaction() throws Exception{

    AccountUser user = AccountUser.builder()
            .id(12L)
            .name("sy")
            .build();

    Account account = Account.builder()
            .id(12L)
            .accountUser(user)
            .accountStatus(IN_USE)
            .accountNumber("1000000012")
            .balance(9000L)
            .build();

    //given
    given(transactionRepository.findByTransactionId(anyString()))
            .willReturn(
                    Optional.of(
                            Transaction.builder()
                                    .transactionId("asdf")
                                    .id(12L)
                                    .account(account)
                                    .amount(1000L)
                                    .transactionResultType(SUCCESS)
                                    .build()
                    )
            );
    //when

    //then
    TransactionDto transaction = transactionService.getTransactionByTransactionId("asdf");
    assertEquals("asdf", transaction.getTransactionId());
    assertEquals(1000L, transaction.getAmount());
}

실패 Case

@Test
@DisplayName("트랜잭션 가져오기 실패 - 트랜잭션이 존재하지 않는 경우")
void failGetTransaction() throws Exception{

    AccountUser user = AccountUser.builder()
            .id(12L)
            .name("sy")
            .build();

    Account account = Account.builder()
            .id(12L)
            .accountUser(user)
            .accountStatus(IN_USE)
            .accountNumber("1000000012")
            .balance(9000L)
            .build();

    //given
    given(transactionRepository.findByTransactionId(anyString()))
            .willReturn(
                    Optional.empty()
            );
    //when

    //then
    AccountException exception = assertThrows(AccountException.class,() -> transactionService.getTransactionByTransactionId("asdf"));
    assertEquals(ErrorCode.TRANSACTION_NOT_FOUND, exception.getErrorCode());
}