Skip to content

Test/#32 - Secret·Project 도메인 UseCase 테스트 추가 및 InMemoryRepository 보완 - #33

Merged
dlguszoo merged 6 commits into
developfrom
test/#32
Jul 11, 2026
Merged

Test/#32 - Secret·Project 도메인 UseCase 테스트 추가 및 InMemoryRepository 보완#33
dlguszoo merged 6 commits into
developfrom
test/#32

Conversation

@dlguszoo

@dlguszoo dlguszoo commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

✨ What’s this PR?

📌 관련 이슈 (Related Issue)


🧶 주요 변경 내용 (Summary)

Secret 테스트 보완

  • InMemorySecretRepositorycreate(_:projectIDs:), patch(id:with:projectIDs:) 구현 추가
    • project link 추적 (projectLinks: [UUID: Set<UUID>])
    • fetchProjects, linkProject, unlinkProject 실제 동작하도록 구현
    • 새 메서드에 대한 에러 주입 및 호출 카운트 추가
  • 기존 테스트 수정: patchupdateSimple 메서드명 변경 반영, createCountcreateWithProjectsCount
  • 신규 테스트 추가
    • projectIDs 포워딩 검증
    • update(id:patch:projectIDs:) .unchanged / .set 라우팅 경로 분기 검증
    • metadata-only 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)


🧪 테스트 / 검증 내역

  • tuist generate 성공
  • tuist test DVDomain — DVDomainTests 65 tests 통과
  • tuist test DVDomainContentTests — DVDomainContentTests 43 tests 통과
  • DVDomain 커버리지 94%
  • My Mac, macOS 14+ 환경에서 정상 동작

💬 기타 공유 사항

PatchSecretUseCaseImpl updatedAt 덮어쓰기 버그 발견 및 수정

update 오버로드 4개 모두 updatedAt을 무조건 dateProvider()로 덮어쓴 부분을 테스트 실행 후 발견

문제: 호출자가 updatedAt: .set(explicit)을 명시적으로 전달해도 무시되고 현재 시각으로 교체됨
원인: fullPatch.updatedAt = .set(dateProvider())를 조건 없이 할당
수정: SecretUseCaseHelper.settingUpdatedAtIfNeeded 사용으로 .unchanged일 때만 채우도록 변경

테스트 커버리지 덕분에 발견..


🙇🏻‍♀️ 리뷰 가이드 (선택)

Summary by CodeRabbit

  • 기능 개선

    • 시크릿 수정 시 변경 내용에 따라 updatedAt이 적절히 설정됩니다.
    • 프로젝트 생성, 조회, 이름 변경, 삭제 동작의 검증이 강화되었습니다.
    • 시크릿 생성·수정 시 프로젝트 연결 정보가 올바르게 처리됩니다.
  • 테스트

    • 프로젝트 및 시크릿 관련 성공·실패 시나리오 테스트를 추가했습니다.
    • 입력값 검증, 저장소 오류, 암호화·메타데이터 처리 검증을 보강했습니다.

dlguszoo added 6 commits July 11, 2026 01:34
- 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개
@dlguszoo dlguszoo self-assigned this Jul 10, 2026
@dlguszoo dlguszoo added ✅ Test 테스트 코드 작성 및 테스트 환경 구축 🐞 BugFix 이멀전시! 버그 수정 labels Jul 10, 2026
@dlguszoo dlguszoo linked an issue Jul 10, 2026 that may be closed by this pull request
6 tasks
@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

Project 유스케이스 테스트와 인메모리 저장소를 추가했습니다. Secret 저장소의 프로젝트 연결 동작과 create/patch 테스트를 보완했으며, Secret 업데이트의 updatedAt 처리를 helper로 위임하고 관련 경로 테스트를 확장했습니다.

Changes

도메인 유스케이스 테스트 보강

Layer / File(s) Summary
Project 테스트 기반과 유스케이스 검증
Projects/DVDomain/Tests/Core/Support/InMemoryProjectRepository.swift, Projects/DVDomain/Tests/Core/Support/ProjectFixture.swift, Projects/DVDomain/Tests/Core/UseCase/Project/*
인메모리 Project 저장소와 fixture를 추가하고 생성, 조회, 이름 변경, 삭제 및 오류 매핑을 검증합니다.
Secret 프로젝트 연결 테스트 지원
Projects/DVDomain/Tests/Core/Support/InMemorySecretRepository.swift, Projects/DVDomain/Tests/Core/UseCase/Secret/CreateSecretUseCaseImplTests.swift
Project 연결 상태와 오류 주입을 지원하도록 저장소를 확장하고, 프로젝트 ID를 포함한 Secret 생성 호출을 검증합니다.
Secret patch 라우팅과 updatedAt 처리
Projects/DVDomain/Sources/UseCase/Impl/Secret/PatchSecretUseCaseImpl.swift, Projects/DVDomain/Tests/Core/UseCase/Secret/PatchSecretUseCaseImplTests.swift
모든 update 오버로드가 조건부 updatedAt helper를 사용하도록 변경하고, metadata 처리 및 프로젝트 연결 라우팅을 검증합니다.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

Suggested reviewers: yeseonglee, doyeonk429

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.81% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed #32의 Project 테스트 더블/fixture 추가, Secret UseCase 보완, Project UseCase 테스트 작성 요구를 모두 반영했습니다.
Out of Scope Changes check ✅ Passed 형식 변경과 updatedAt 수정도 PR 목표인 테스트 보완 및 Secret 도메인 개선 범위에 포함됩니다.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR의 핵심인 Secret/Project 도메인 UseCase 테스트 추가와 InMemoryRepository 보완을 정확히 요약합니다.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch test/#32

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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

📥 Commits

Reviewing files that changed from the base of the PR and between 5430925 and 4f47d15.

📒 Files selected for processing (11)
  • Projects/DVDomain/Sources/UseCase/Impl/Secret/CreateSecretUseCaseImpl.swift
  • Projects/DVDomain/Sources/UseCase/Impl/Secret/PatchSecretUseCaseImpl.swift
  • Projects/DVDomain/Tests/Core/Support/InMemoryProjectRepository.swift
  • Projects/DVDomain/Tests/Core/Support/InMemorySecretRepository.swift
  • Projects/DVDomain/Tests/Core/Support/ProjectFixture.swift
  • Projects/DVDomain/Tests/Core/UseCase/Project/CreateProjectUseCaseImplTests.swift
  • Projects/DVDomain/Tests/Core/UseCase/Project/DeleteProjectUseCaseImplTests.swift
  • Projects/DVDomain/Tests/Core/UseCase/Project/FetchProjectUseCaseImplTests.swift
  • Projects/DVDomain/Tests/Core/UseCase/Project/RenameProjectUseCaseImplTests.swift
  • Projects/DVDomain/Tests/Core/UseCase/Secret/CreateSecretUseCaseImplTests.swift
  • Projects/DVDomain/Tests/Core/UseCase/Secret/PatchSecretUseCaseImplTests.swift
💤 Files with no reviewable changes (1)
  • Projects/DVDomain/Sources/UseCase/Impl/Secret/CreateSecretUseCaseImpl.swift

@dlguszoo
dlguszoo merged commit ca55dd2 into develop Jul 11, 2026
1 check passed
@dlguszoo
dlguszoo deleted the test/#32 branch July 11, 2026 01:45
@dlguszoo
dlguszoo restored the test/#32 branch July 15, 2026 16:26
@doyeonk429
doyeonk429 deleted the test/#32 branch July 19, 2026 11:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🐞 BugFix 이멀전시! 버그 수정 ✅ Test 테스트 코드 작성 및 테스트 환경 구축

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Test: Project domain 관련 Test Code 작성

2 participants