[BE-03] goods·ticketing 제공 UseCase 경계 계약 동결 테스트 (FR-4)
작업 내용 (설계 의도)
근거 TDD: ../TDD.md “FR-4 결정”, “인터페이스 시그니처 — 동결 대상” / ADR-003
변경 사항
- B2B 파트너(② 과제)가 코드 변경 없이 경유하는 제공 경계 UseCase 2개의 시그니처를 계약으로 동결하고, 변경 시 조기 감지하는 테스트를 추가한다.
goods.CreateMyProductUseCase.execute(CreateMyProductCommand): ProductWithStockticketing.CreateMyEventUseCase.execute(CreateMyEventCommand): CreateMyEventResult
CreateMyEventCommand.ownerUserId: Long필드 존재를 검증(파트너 Controller가 SecurityContext id를 채우는 접점).CreateMyProductUseCase가OwnershipGuard에 의존(SecurityContext 소유자 해석)함을 검증.- 목적: ② 과제 설계·구현이 시작되기 전, 두 UseCase 시그니처가 리팩터링으로 바뀌면 이 테스트가 RED로 알린다. 프로덕션 코드 무변경.
위치
backend/src/test/kotlin/com/sportsapp/architecture/ProvidedInterfaceContractTest.kt(신규)- 리플렉션 기반 시그니처 assert 또는 ArchUnit
methods()규칙. 기존architecture/스타일 준수.
의존
- 없음 (독립 — 새 파일만 생성)
다이어그램
처리 흐름
sequenceDiagram participant T as ProvidedInterfaceContractTest participant U1 as CreateMyProductUseCase participant U2 as CreateMyEventUseCase T->>U1: execute(CreateMyProductCommand) 반환타입 검증 T->>U2: execute(CreateMyEventCommand) 반환타입 검증 T->>U2: CreateMyEventCommand.ownerUserId 존재 검증
클래스 의존
flowchart LR Test["ProvidedInterfaceContractTest"] --> Product["CreateMyProductUseCase"] Test --> Event["CreateMyEventUseCase"] Test --> Cmd["CreateMyEventCommand.ownerUserId"]
테스트 케이스
- CreateMyProductUseCase.execute가 CreateMyProductCommand를 받아 ProductWithStock를 반환하면 계약이 통과한다
- CreateMyEventUseCase.execute가 CreateMyEventCommand를 받아 CreateMyEventResult를 반환하면 계약이 통과한다
- CreateMyEventCommand에 ownerUserId: Long 필드가 존재하면 계약이 통과한다
- CreateMyProductUseCase가 OwnershipGuard에 의존하면 계약이 통과한다 (SecurityContext 소유자 해석 경로 보증)
- (위반 시나리오) execute의 파라미터/반환 타입이 바뀌면 계약 테스트가 실패해 ② 경유 파손을 조기 감지한다