import { describe, expect, it } from "vitest"; import { resolveOrderOption } from "../../src/services/orderService"; import { HttpError } from "../../src/middleware/errors"; const options = [ { id: "blue", name: "블루" }, { id: "red", name: "레드" }, ]; describe("resolveOrderOption", () => { it("옵션 상품은 optionId 를 실제 옵션으로 해석한다", () => { expect(resolveOrderOption({ options }, "blue")).toEqual({ id: "blue", name: "블루" }); }); it("옵션 상품에 optionId 가 없으면 OPTION_REQUIRED 로 거부한다", () => { expect(() => resolveOrderOption({ options }, undefined)).toThrowError( expect.objectContaining({ status: 400, code: "OPTION_REQUIRED" }) as HttpError, ); }); it("옵션 상품에 존재하지 않는 optionId 도 OPTION_REQUIRED 로 거부한다", () => { expect(() => resolveOrderOption({ options }, "green")).toThrowError( expect.objectContaining({ status: 400, code: "OPTION_REQUIRED" }) as HttpError, ); }); it("무옵션 상품은 optionId 없이 null 을 돌려준다", () => { expect(resolveOrderOption({}, undefined)).toBeNull(); expect(resolveOrderOption({ options: [] }, undefined)).toBeNull(); }); it("무옵션 상품에 optionId 가 오면 INVALID_INPUT 으로 거부한다", () => { expect(() => resolveOrderOption({}, "blue")).toThrowError( expect.objectContaining({ status: 400, code: "INVALID_INPUT" }) as HttpError, ); }); });