- reversalOf 미지정 시 undefined가 원장 문서 스프레드로 흘러가 Firestore가 "Cannot use undefined as a Firestore value"로 지급 전체를 실패시키던 버그 수정 - 조건부 스프레드로 값이 있을 때만 필드를 포함하도록 변경 - 회귀 테스트 추가: reversalOf 없이 지급 시 원장에 키 자체가 없음 + 명시 시 그대로 기록됨 (에뮬레이터 vitest 2건 통과)
29 lines
1.5 KiB
TypeScript
29 lines
1.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { firestore } from "../../src/firebase";
|
|
import { adminPointChange } from "../../src/services/adminPointService";
|
|
|
|
const uid = "admin-point-service-test-user";
|
|
|
|
describe("adminPointChange", () => {
|
|
it("reversalOf 없이 지급해도 원장 문서에 undefined 키가 들어가지 않는다", async () => {
|
|
// 어드민 웹의 일반 지급은 reversalOf 를 보내지 않는다 — undefined 가 Firestore 까지
|
|
// 흘러가면 "Cannot use undefined as a Firestore value" 로 지급 전체가 실패한다.
|
|
const key = `no-reversal-${Date.now()}`;
|
|
const wallet = await adminPointChange(uid, 100, "credit", key, "테스트 지급", "admin-uid");
|
|
|
|
expect(wallet?.availableBalance).toBeGreaterThanOrEqual(100);
|
|
const entry = await firestore.doc(`users/${uid}/pointLedger/${uid}:admin:${key}`).get();
|
|
expect(entry.exists).toBe(true);
|
|
expect(entry.data()).not.toHaveProperty("reversalOf");
|
|
expect(entry.data()).toMatchObject({ adminReason: "테스트 지급", adminActor: "admin-uid", amount: 100 });
|
|
});
|
|
|
|
it("reversalOf 를 명시하면 원장에 그대로 기록된다", async () => {
|
|
const key = `with-reversal-${Date.now()}`;
|
|
await adminPointChange(uid, 50, "credit", key, "정정 지급", "admin-uid", "prev-tx-id");
|
|
|
|
const entry = await firestore.doc(`users/${uid}/pointLedger/${uid}:admin:${key}`).get();
|
|
expect(entry.data()).toMatchObject({ reversalOf: "prev-tx-id" });
|
|
});
|
|
});
|