16bd2cb92a
- 모노레포 구조 (Turborepo + pnpm): @relink/domain, @relink/shared, @relink/infrastructure, @relink/database, @relink/web - 도메인 레이어: 매장(store), 매칭(matching), 업체(vendor), 보조금(subsidy), 계약/에스크로(contract) TDD 완료 (158 단위 테스트) - 서비스 레이어: 전 도메인 서비스 함수 + 통합 테스트 (58 테스트) - 프론트엔드: Next.js 15 App Router, 13개 페이지 (사용자 6 + 관리자 7) - 인프라: PostgreSQL 16 + PostGIS, Prisma ORM, Docker Compose, AuditLog + OutboxEvent 패턴 - .env 파일 포함 (로컬 개발 기본값만 포함, 실제 시크릿 없음) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { buildSearchDefaults, type StoreSearchCriteria } from '../search-stores.js';
|
|
|
|
describe('buildSearchDefaults', () => {
|
|
// U010: 매장 검색 기본값 설정
|
|
it('U010-S1: publicationStatus는 항상 PUBLISHED로 고정', () => {
|
|
const result = buildSearchDefaults({});
|
|
|
|
expect(result.publicationStatus).toBe('PUBLISHED');
|
|
});
|
|
|
|
it('U010-S2: page 미지정 시 기본값 1', () => {
|
|
const result = buildSearchDefaults({});
|
|
|
|
expect(result.page).toBe(1);
|
|
});
|
|
|
|
it('U010-S3: limit 미지정 시 기본값 20', () => {
|
|
const result = buildSearchDefaults({});
|
|
|
|
expect(result.limit).toBe(20);
|
|
});
|
|
|
|
it('U010-S4: limit이 100 초과하면 100으로 제한', () => {
|
|
const result = buildSearchDefaults({ limit: 500 });
|
|
|
|
expect(result.limit).toBe(100);
|
|
});
|
|
|
|
it('U010-S5: limit이 100 이하면 그대로 사용', () => {
|
|
const result = buildSearchDefaults({ limit: 50 });
|
|
|
|
expect(result.limit).toBe(50);
|
|
});
|
|
|
|
it('U010-S6: 사용자 지정 page와 limit 유지', () => {
|
|
const result = buildSearchDefaults({ page: 3, limit: 30 });
|
|
|
|
expect(result.page).toBe(3);
|
|
expect(result.limit).toBe(30);
|
|
});
|
|
|
|
it('U010-S7: 검색 조건(regionClusterCode, industryLeafCode 등) 유지', () => {
|
|
const criteria: StoreSearchCriteria = {
|
|
regionClusterCode: 'GANGNAM',
|
|
industryLeafCode: 'CAFE',
|
|
dealStatus: 'OPEN',
|
|
minDepositAmount: 1000,
|
|
maxDepositAmount: 5000,
|
|
page: 2,
|
|
limit: 15,
|
|
};
|
|
|
|
const result = buildSearchDefaults(criteria);
|
|
|
|
expect(result.regionClusterCode).toBe('GANGNAM');
|
|
expect(result.industryLeafCode).toBe('CAFE');
|
|
expect(result.dealStatus).toBe('OPEN');
|
|
expect(result.minDepositAmount).toBe(1000);
|
|
expect(result.maxDepositAmount).toBe(5000);
|
|
expect(result.page).toBe(2);
|
|
expect(result.limit).toBe(15);
|
|
expect(result.publicationStatus).toBe('PUBLISHED');
|
|
});
|
|
});
|