Repository navigation
클래스 API 계약 테스트를 현재 모듈 구조에 맞춤 - #77
Conversation
이동된 APIEndpoint와 공통 유틸 모듈을 테스트에서 직접 가져옵니다. 통합된 클래스 Repository와 로컬 AI UseCase 이름으로 테스트 참조를 갱신합니다.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
전반적으로 ClassAIChatUseCase 및 ClassAIFeedbackUseCase가 ClassLocalAIUseCase로 통합되었고, 관련 종속성 및 메서드 호출이 업데이트되었습니다. 또한, 여러 API 계약 테스트에서 ClassRepositoryImpl로의 리팩토링 및 APIEndpoint 모듈 직접 참조가 발생했습니다.
주요 문제는 Domain 계층의 테스트에서 APIEndpoint 모듈을 직접 가져오는 것인데, 이는 프로젝트의 Clean Architecture 및 모듈 종속성 규칙(Presentation → Domain ← Data, Network는 Data만 참조)을 위반합니다. Domain 계층은 Data 계층의 인터페이스에만 의존해야 합니다.
사소한 문제로는 테스트 헬퍼로 추가된 FeedbackUseCaseStub이 final 클래스로 선언되지 않은 점이 있습니다.
| #endif | ||
| } | ||
|
|
||
| private struct FeedbackUseCaseStub: ClassLocalAIInterface { |
There was a problem hiding this comment.
🔵 [P4] Readability
FeedbackUseCaseStub은 구조체로 선언되었으므로 final을 사용할 수 없습니다. 그러나 private 가시성을 고려할 때, 이 타입을 class로 변경하여 final로 선언하는 것을 고려할 수 있습니다. struct로 유지하는 것이 의도된 설계라면 이 코멘트는 무시해도 좋습니다.
| private struct FeedbackUseCaseStub: ClassLocalAIInterface { | |
| private final class FeedbackUseCaseStub: ClassLocalAIInterface { |
| @@ -1,4 +1,5 @@ | |||
| @testable import ClassDomain | |||
| import APIEndpoint | |||
There was a problem hiding this comment.
🟠 [P2] Major
Domain 모듈의 테스트에서 APIEndpoint 모듈을 직접 가져오는 것은 아키텍처 규칙(Network는 Data 계층에서만 참조되어야 함)을 위반합니다. Domain 계층은 DataInterface 프로토콜을 통해서만 Data 계층과 상호작용해야 합니다. 테스트 시에는 DataInterface를 준수하는 Mock/Stub 객체를 사용하여 의존성을 주입해야 합니다.
APIEndpoint가 포함된 Network 또는 Data 계층의 모듈에 대한 직접적인 의존성은 Domain 계층에서 제거되어야 합니다. 이 테스트는 ClassRepositoryInterface와 같은 DomainInterface에 정의된 프로토콜을 사용하고, 해당 프로토콜의 구현체(예: ClassRepositoryImpl)가 APIEndpoint를 사용하는 형태로 이루어져야 합니다.
| @@ -1,4 +1,5 @@ | |||
| @testable import ClassDomain | |||
| import APIEndpoint | |||
There was a problem hiding this comment.
🟠 [P2] Major
Domain 모듈의 테스트에서 APIEndpoint 모듈을 직접 가져오는 것은 아키텍처 규칙(Network는 Data 계층에서만 참조되어야 함)을 위반합니다. Domain 계층은 DataInterface 프로토콜을 통해서만 Data 계층과 상호작용해야 합니다. 테스트 시에는 DataInterface를 준수하는 Mock/Stub 객체를 사용하여 의존성을 주입해야 합니다.
APIEndpoint가 포함된 Network 또는 Data 계층의 모듈에 대한 직접적인 의존성은 Domain 계층에서 제거되어야 합니다. 이 테스트는 ClassRepositoryInterface와 같은 DomainInterface에 정의된 프로토콜을 사용하고, 해당 프로토콜의 구현체(예: ClassRepositoryImpl)가 APIEndpoint를 사용하는 형태로 이루어져야 합니다.
| @@ -1,4 +1,5 @@ | |||
| @testable import ClassDomain | |||
| import APIEndpoint | |||
There was a problem hiding this comment.
🟠 [P2] Major
Domain 모듈의 테스트에서 APIEndpoint 모듈을 직접 가져오는 것은 아키텍처 규칙(Network는 Data 계층에서만 참조되어야 함)을 위반합니다. Domain 계층은 DataInterface 프로토콜을 통해서만 Data 계층과 상호작용해야 합니다. 테스트 시에는 DataInterface를 준수하는 Mock/Stub 객체를 사용하여 의존성을 주입해야 합니다.
APIEndpoint가 포함된 Network 또는 Data 계층의 모듈에 대한 직접적인 의존성은 Domain 계층에서 제거되어야 합니다. 이 테스트는 ClassRepositoryInterface와 같은 DomainInterface에 정의된 프로토콜을 사용하고, 해당 프로토콜의 구현체(예: ClassRepositoryImpl)가 APIEndpoint를 사용하는 형태로 이루어져야 합니다.
| ClassRepositoryImpl() | ||
| } | ||
| ) | ||
| let live = withDependencies { |
There was a problem hiding this comment.
🟡 [P3] Minor
ClassLiveRepository가 제거되고 ClassRepositoryImpl이 직접 withDependencies 블록 내에서 인스턴스화되는 것은 TCA의 종속성 주입 패턴에 더 적합합니다. 이는 ClassRepositoryImpl이 환경 종속성(예: networkClient)을 올바르게 사용하도록 설계되었음을 나타냅니다. 잘 리팩터링되었습니다.
| @@ -1,22 +1,24 @@ | |||
| @testable import ClassDomain | |||
| import APIEndpoint | |||
There was a problem hiding this comment.
🟠 [P2] Major
Domain 모듈의 테스트에서 APIEndpoint 모듈을 직접 가져오는 것은 아키텍처 규칙(Network는 Data 계층에서만 참조되어야 함)을 위반합니다. Domain 계층은 DataInterface 프로토콜을 통해서만 Data 계층과 상호작용해야 합니다. 테스트 시에는 DataInterface를 준수하는 Mock/Stub 객체를 사용하여 의존성을 주입해야 합니다.
APIEndpoint가 포함된 Network 또는 Data 계층의 모듈에 대한 직접적인 의존성은 Domain 계층에서 제거되어야 합니다. 이 테스트는 ClassRepositoryInterface와 같은 DomainInterface에 정의된 프로토콜을 사용하고, 해당 프로토콜의 구현체(예: ClassRepositoryImpl)가 APIEndpoint를 사용하는 형태로 이루어져야 합니다.
| @@ -1,4 +1,5 @@ | |||
| @testable import ClassDomain | |||
| import APIEndpoint | |||
There was a problem hiding this comment.
🟠 [P2] Major
Domain 모듈의 테스트에서 APIEndpoint 모듈을 직접 가져오는 것은 아키텍처 규칙(Network는 Data 계층에서만 참조되어야 함)을 위반합니다. Domain 계층은 DataInterface 프로토콜을 통해서만 Data 계층과 상호작용해야 합니다. 테스트 시에는 DataInterface를 준수하는 Mock/Stub 객체를 사용하여 의존성을 주입해야 합니다.
APIEndpoint가 포함된 Network 또는 Data 계층의 모듈에 대한 직접적인 의존성은 Domain 계층에서 제거되어야 합니다. 이 테스트는 ClassRepositoryInterface와 같은 DomainInterface에 정의된 프로토콜을 사용하고, 해당 프로토콜의 구현체(예: ClassRepositoryImpl)가 APIEndpoint를 사용하는 형태로 이루어져야 합니다.
| @@ -1,5 +1,6 @@ | |||
| @testable import ClassDomain | |||
| import ClassDomainInterface | |||
| import APIEndpoint | |||
There was a problem hiding this comment.
🟠 [P2] Major
Domain 모듈의 테스트에서 APIEndpoint 모듈을 직접 가져오는 것은 아키텍처 규칙(Network는 Data 계층에서만 참조되어야 함)을 위반합니다. Domain 계층은 DataInterface 프로토콜을 통해서만 Data 계층과 상호작용해야 합니다. 테스트 시에는 DataInterface를 준수하는 Mock/Stub 객체를 사용하여 의존성을 주입해야 합니다.
APIEndpoint가 포함된 Network 또는 Data 계층의 모듈에 대한 직접적인 의존성은 Domain 계층에서 제거되어야 합니다. 이 테스트는 ClassRepositoryInterface와 같은 DomainInterface에 정의된 프로토콜을 사용하고, 해당 프로토콜의 구현체(예: ClassRepositoryImpl)가 APIEndpoint를 사용하는 형태로 이루어져야 합니다.
|
리뷰 확인했습니다.
|
변경 내용
ClassRepositoryImpl및ClassLocalAIUseCaseDependency이름으로 테스트 참조 갱신검증
tuist test ClassDomain --no-binary-cache --device 'Picke-Preview-375'통과확인 범위
이 PR은 로컬 계약 테스트 수정입니다. 인증된 운영 서버 API 응답은 Device Hub 화면 접근 오류로 아직 재검증하지 못했습니다.