목마름에 관하여

export interface UserBankAccount {
  id: string;
  type: string;
  /** 수기계좌 여부 */
  isManuallyCreated: boolean;
  /**
   * 하이픈, 마스킹 없는 계좌번호
   * e.g. 80123404123456
   * 수기계좌 일 경우 이 데이터는 undefined
   */
  number?: string;
  /** 메모 */
  description?: string;
  /** 사용자에게 표시되는 계좌명 (계좌 별칭 > 원본 데이터 상품명) */
  accountDisplayName: string;
  /** 마지막 동기화 날짜 (수기계좌인 경우 undefined) */
  lastSyncedAtMs?: string;
  /** 원본 계좌 상품명 (수가계좌인 경우 undefined)*/
  originalAccountName?: string;
  /**
   * 계좌 종류
   * enum: v1.bankaccount.UserBankAccountType
   */
  typeEnum: string;
  /** 계좌 잔액 */
  balance: Amount;
  /** 숨김 처리 여부 */
  isHidden: boolean;
  /** 휴면 여부 */
  isDormant: boolean;
  /** 만기 여부 */
  isClosed: boolean;
  /** 개설 일시 */
  openedAtMs?: string;
  /** 만기 일시 */
  expiredAtMs?: string;
  /** 마이데이터로 동기화 된 정보 (수기계좌인 경우 undefined) */
  mydata?: BankAccountMydata;
  organization: OrganizationMessage;
  /** 마이너스 통장 여부 (수기계좌인 경우 undefined) */
  isRevolvingCreditAccount?: boolean;
  /** 마이너스 통장 금리 (is_revolving_credit_account 값이 true일 경우에만 존재) */
  revolvingCreditAccountRate4f?: string;
  /** 수기 적용 금리 */
  manuallyCreatedOfferedRate3f?: string;
}

export interface Amount {
  /** 금액 */
  amount2f: string;
  /** ISO 4217 Currency code */
  currencyIdentifier: string;
}

export interface BankAccountMydata {
  /** 전송요구여부 */
  isConsent: boolean;
  /** 적용 금리 */
  offeredRate5f: string;
  /** 월 납입액 */
  monthlyPaidInAmount?: Amount;
  /** 최종 납입 회차 */
  latestInstallmentRoundNumber?: number;
  /**
   * 출금 가능 금액
   * NOTE: 압류로 인해 출금이 불가능하거나 출금 한도 금액이 설정되어 있는 등의 경우에 계좌 잔액과 금액이 다를 수 있음.
   */
  withdrawableAmount?: Amount;
  /**
   * 수신계좌 저축방식
   * enum: v1.mydata.BankDepositAccountSavingMethod
   */
  bankDepositAccountSavingMethodEnum: string;
}

export interface OrganizationMessage {
  /** 기관구분 global unique id */
  guid: string;
  /** 기관명 */
  name: string;
  /**
   * 기관 로고 이미지 URL
   * bds-graphic: color/logo/original, color/logo/circle
   */
  logoImageUrl: string;
  /**
   * 업권
   * enum: v1.organization.Industry
   */
  industryEnum: string;
  /** 오브젝트 ID (하위호환성 유지 용도) */
  objectid: string;
  /**
   * 세부업권
   * enum: v1.organization.SubIndustry
   */
  subIndustryEnum: string;
}

하나의 api response 가 주는 여러가지 case들이 존재한다.

갈증 1

위와 같은 상황을 전제로 테스트하기 위해서는 해당 api의 결과값을 케이스별로 재현해야 하는데, 각 결과에 대한 목 데이터를 만들기 너무어렵다.

e.g) 실제로 지난 스팩의 테스트 케이스 api 기준으로 약 30개의 시나리오,

고군분투

1차로 해결해보기

const mockData = {
	 id: '1',
	 type: 'savings',
	 // ....
};

const data = { ...mockData, isManuallyCreated: true, type: 'A', mydata: undefined };