Conversation
- CreateSecretUseCaseImplTests: createCount → createWithProjectsCount 수정, projectIDs 포워딩 검증 테스트 추가 - PatchSecretUseCaseImplTests: metadata-only update 테스트 추가, projectIDs .unchanged/.set 라우팅 경로 분기 테스트 추가
이미 .set된 updatedAt을 dateProvider()로 무조건 덮어쓰던 문제를 수정. SecretUseCaseHelper.settingUpdatedAtIfNeeded를 사용해 .unchanged일 때만 채우도록 변경.
projectIDs가 .set일 때 존재하지 않는 id가 secretNotFound로 매핑되는 경로를 별도로 검증하는 테스트 케이스 추가.
- ProjectFixture: make() 팩토리 추가 - InMemoryProjectRepository: 에러 주입·호출 카운트 포함한 in-memory 구현 - CreateProjectUseCaseImplTests: 정상·에러 케이스 4개 - RenameProjectUseCaseImplTests: 정상·에러 케이스 5개 - DeleteProjectUseCaseImplTests: 정상·에러 케이스 3개 - FetchProjectUseCaseImplTests: fetch(id:)·fetchAll() 정상·에러 케이스 6개
WalkthroughProject 유스케이스 테스트와 인메모리 저장소를 추가했습니다. Secret 저장소의 프로젝트 연결 동작과 create/patch 테스트를 보완했으며, Secret 업데이트의 Changes도메인 유스케이스 테스트 보강
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (2)
Projects/DVDomain/Tests/Core/UseCase/Project/CreateProjectUseCaseImplTests.swift (1)
13-13: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win강제 언래핑 대신 안전한 초기화를 권장합니다.
UUID(uuidString:)강제 언래핑이 사용되었습니다.ProjectFixture.fixedID를 재사용하거나guard let기반 초기화로 대체를 권장합니다.♻️ 제안: ProjectFixture 재사용 또는 guard let
- let fixedID = UUID(uuidString: "00000000-0000-0000-0000-0000000000AA")! + let fixedID = ProjectFixture.fixedID또는 고유 UUID가 필요한 경우:
- let fixedID = UUID(uuidString: "00000000-0000-0000-0000-0000000000AA")! + let fixedID = UUID()As per coding guidelines, 강제 언래핑(
!) 사용 시 반드시 지적하고guard let/if let/??대안을 제시해야 합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Projects/DVDomain/Tests/Core/UseCase/Project/CreateProjectUseCaseImplTests.swift` at line 13, Replace the force unwrap in the fixedID declaration with the existing ProjectFixture.fixedID when appropriate; otherwise initialize the UUID safely using guard let, if let, or a nil-coalescing fallback so UUID(uuidString:) cannot be force-unwrapped.Source: Path instructions
Projects/DVDomain/Tests/Core/Support/ProjectFixture.swift (1)
9-9: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win강제 언래핑 대신 안전한 초기화를 권장합니다.
UUID(uuidString:)의 강제 언래핑이 사용되었습니다. 하드코딩된 UUID 문자열이므로 크래시 위험은 낮지만, 패스 가이드라인에 따라 대안을 제시합니다.♻️ 제안: guard let 기반 안전 초기화
- public static let fixedID = UUID(uuidString: "00000000-0000-0000-0000-000000000002")! + public static let fixedID: UUID = { + guard let id = UUID(uuidString: "00000000-0000-0000-0000-000000000002") else { + fatalError("Invalid fixed UUID string in ProjectFixture") + } + return id + }()As per coding guidelines, 강제 언래핑(
!) 사용 시 반드시 지적하고guard let/if let/??대안을 제시해야 합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Projects/DVDomain/Tests/Core/Support/ProjectFixture.swift` at line 9, ProjectFixture의 fixedID 초기화에서 UUID(uuidString:) 강제 언래핑을 제거하세요. guard let, if let, 또는 적절한 기본 UUID를 제공하는 ??를 사용해 안전하게 초기화하고, 유효하지 않은 문자열도 런타임 크래시를 일으키지 않도록 하세요.Source: Path instructions
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@Projects/DVDomain/Tests/Core/Support/ProjectFixture.swift`:
- Line 9: ProjectFixture의 fixedID 초기화에서 UUID(uuidString:) 강제 언래핑을 제거하세요. guard
let, if let, 또는 적절한 기본 UUID를 제공하는 ??를 사용해 안전하게 초기화하고, 유효하지 않은 문자열도 런타임 크래시를 일으키지
않도록 하세요.
In
`@Projects/DVDomain/Tests/Core/UseCase/Project/CreateProjectUseCaseImplTests.swift`:
- Line 13: Replace the force unwrap in the fixedID declaration with the existing
ProjectFixture.fixedID when appropriate; otherwise initialize the UUID safely
using guard let, if let, or a nil-coalescing fallback so UUID(uuidString:)
cannot be force-unwrapped.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: b661c73a-9fd2-4ce9-93bd-1e520dddc201
📒 Files selected for processing (11)
Projects/DVDomain/Sources/UseCase/Impl/Secret/CreateSecretUseCaseImpl.swiftProjects/DVDomain/Sources/UseCase/Impl/Secret/PatchSecretUseCaseImpl.swiftProjects/DVDomain/Tests/Core/Support/InMemoryProjectRepository.swiftProjects/DVDomain/Tests/Core/Support/InMemorySecretRepository.swiftProjects/DVDomain/Tests/Core/Support/ProjectFixture.swiftProjects/DVDomain/Tests/Core/UseCase/Project/CreateProjectUseCaseImplTests.swiftProjects/DVDomain/Tests/Core/UseCase/Project/DeleteProjectUseCaseImplTests.swiftProjects/DVDomain/Tests/Core/UseCase/Project/FetchProjectUseCaseImplTests.swiftProjects/DVDomain/Tests/Core/UseCase/Project/RenameProjectUseCaseImplTests.swiftProjects/DVDomain/Tests/Core/UseCase/Secret/CreateSecretUseCaseImplTests.swiftProjects/DVDomain/Tests/Core/UseCase/Secret/PatchSecretUseCaseImplTests.swift
💤 Files with no reviewable changes (1)
- Projects/DVDomain/Sources/UseCase/Impl/Secret/CreateSecretUseCaseImpl.swift
✨ What’s this PR?
📌 관련 이슈 (Related Issue)
🧶 주요 변경 내용 (Summary)
Secret 테스트 보완
InMemorySecretRepository에create(_:projectIDs:),patch(id:with:projectIDs:)구현 추가projectLinks: [UUID: Set<UUID>])fetchProjects,linkProject,unlinkProject실제 동작하도록 구현patch→updateSimple메서드명 변경 반영,createCount→createWithProjectsCountprojectIDs포워딩 검증update(id:patch:projectIDs:).unchanged/.set라우팅 경로 분기 검증update오버로드 검증.set경로secretNotFound에러 매핑 검증Project 테스트 추가
ProjectFixture,InMemoryProjectRepository추가CreateProjectUseCaseImplTests— 이름 트리밍, invalidName·duplicateID 매핑RenameProjectUseCaseImplTests— 이름 트리밍 + updatedAt 주입, invalidName·projectNotFound·persistenceFailed 매핑DeleteProjectUseCaseImplTests— 삭제 후 저장소 제거 확인, projectNotFound·persistenceFailed 매핑FetchProjectUseCaseImplTests— fetch(id:) pass-through·nil 반환, fetchAll() 전체·빈 배열 반환, 각 단계 실패 매핑테스트 후 Bug Fix
PatchSecretUseCaseImpl의 모든update오버로드에서updatedAt을 무조건dateProvider()로 덮어쓰던 버그 수정SecretUseCaseHelper.settingUpdatedAtIfNeeded사용으로.unchanged일 때만 채우도록 변경📸 스크린샷 (Optional)
🧪 테스트 / 검증 내역
💬 기타 공유 사항
PatchSecretUseCaseImplupdatedAt 덮어쓰기 버그 발견 및 수정update오버로드 4개 모두updatedAt을 무조건dateProvider()로 덮어쓴 부분을 테스트 실행 후 발견문제: 호출자가
updatedAt: .set(explicit)을 명시적으로 전달해도 무시되고 현재 시각으로 교체됨원인:
fullPatch.updatedAt = .set(dateProvider())를 조건 없이 할당수정:
SecretUseCaseHelper.settingUpdatedAtIfNeeded사용으로.unchanged일 때만 채우도록 변경테스트 커버리지 덕분에 발견..
🙇🏻♀️ 리뷰 가이드 (선택)
Summary by CodeRabbit
기능 개선
updatedAt이 적절히 설정됩니다.테스트