Skip to content

feat: isa 서버액션 테스트 작성#196

Merged
VarGun merged 5 commits intodevelopfrom
feat/#190-isa-test
Jun 28, 2025
Merged

feat: isa 서버액션 테스트 작성#196
VarGun merged 5 commits intodevelopfrom
feat/#190-isa-test

Conversation

@jjinleee
Copy link
Copy Markdown
Contributor

@jjinleee jjinleee commented Jun 27, 2025

📌 연관된 이슈 번호

🌱 주요 변경 사항

1️⃣ [getMonthlyReturns] 테스트

테스트 목적

  • 월말 기준 전체 평가금액 및 평가수익이 정확히 계산되는지 검증
  • 로그인 상태/ISA 계좌 존재 여부 등 예외 케이스 처리 확인
  • ETF + 일반 평가금액 합산 정확성
  • 월별 수익률(monthlyReturn) 데이터 반영 검증

Mock 구성 요소

  • getServerSession: 세션 존재 여부 확인
  • prisma.iSAAccount.findUnique: ISA 계좌 존재 여부
  • prisma.monthlyReturn.findMany: 수익률 값 모킹
  • prisma.eTFHoldingSnapshot.findMany: ETF 평가금액
  • prisma.generalHoldingSnapshot.aggregate: 일반 평가금액 합산

✅ 테스트 요약

Case 1 – 로그인하지 않은 경우

  • getServerSession이 null을 반환하도록 설정
  • "로그인이 필요합니다." 예외가 발생하는지 검증

Case 2 – ISA 계좌가 없는 경우

  • iSAAccount.findUnique가 null을 반환하도록 설정
  • "ISA 계좌가 없습니다." 예외가 발생하는지 검증

Case 3 – 평가수익 0원

  • ETF 평가금액: 5,000,000
  • 일반 평가금액: 12,000,000
  • 총 평가금액: 17,000,000
  • 평가수익: 0
  • 수익률: 12.0%

Case 4 – 평가수익 존재

  • ETF: 6,000,000
  • 일반: 14,000,000
  • 총 평가금액: 20,000,000
  • 투자원금: 17,000,000
  • 평가수익: 3,000,000
  • 수익률: 15.0%

Case 5 – 수익률 수식 검증
수익률 = (E - B - C) / (B + 0.5 * C)
mocking된 entireProfit값을 수식값과 비교하는 테스트

  • E = 평가금액 = 17,500,000
  • B = 투자원금 = 15,000,000
  • C = 중간 입금 = 1,000,000
  • 예상 수익률 = 9.68%

Case 5: ETF만 있는 경우

  • ETF: 8,000,000원
  • 일반: 0원

Case 6: 일반만 있는 경우

  • ETF: 0원
  • 일반: 9,000,000원

Case 7: 여러 ETF 스냅샷

  • ETF1: 3,000,000원
  • ETF2: 2,000,000원
  • ETF3: 1,500,000원
  • 일반: 10,500,000원

2️⃣ [getIsaPortfolio] 테스트

테스트 목적

  • ISA 계좌 기반으로 월별 포트폴리오 데이터를 요청했을 때, 다음 항목들이 올바르게 반환되는지 확인합니다:
  • 채권, 펀드, ELS, 국내/해외/복합 ETF 자산군별 금액
  • 전체 평가금액 대비 자산군별 비율(percentage)

✅ 테스트 요약

세션없는 경우 예외 발생

  • getServerSession이 null을 반환하도록 설정
  • "Unauthorized" 예외가 발생하는지 검증

포트폴리오 자산 분배계산 검증

  • prisma.iSAAccount.findUnique의 응답을 아래와 같이 구성:

    • 채권: 1,000,000원
    • 펀드: 2,000,000원
    • ELS: 3,000,000원
    • 국내 ETF: 4,000,000원
    • 해외 ETF: 5,000,000원
    • 국내&해외 ETF: 6,000,000원
  • 총 평가금액: 21,000,000원
    -비율 계산 결과:

채권: 4.8%
펀드: 9.5%
ELS: 14.3%
국내 ETF: 19.0%
해외 ETF: 23.8%
국내&해외 ETF: 28.6%

스냅샷 검증

  • getISAPortfolio가 반환하는 전체 객체가 일관된 형태로 유지되는지 toMatchSnapshot()으로 확인

@jjinleee jjinleee self-assigned this Jun 27, 2025
@jjinleee jjinleee added the enhancement New feature or request label Jun 27, 2025
@jjinleee jjinleee linked an issue Jun 27, 2025 that may be closed by this pull request
2 tasks
@VarGun VarGun merged commit f13e71b into develop Jun 28, 2025
1 check passed
@VarGun VarGun deleted the feat/#190-isa-test branch June 28, 2025 03:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ Feat ] ISA 테스트 코드

3 participants