diff --git a/Application/DevLogPresentation/Sources/Root/RootFeature.swift b/Application/DevLogPresentation/Sources/Root/RootFeature.swift index 861530c1..36669c45 100644 --- a/Application/DevLogPresentation/Sources/Root/RootFeature.swift +++ b/Application/DevLogPresentation/Sources/Root/RootFeature.swift @@ -109,7 +109,10 @@ struct RootFeature { if result { state.selectedMainTab = .home } else { - return trackLoginScreenEffect() + return .merge( + trackLoginScreenEffect(), + clearApplicationBadgeCountEffect() + ) } } diff --git a/Application/DevLogPresentation/Tests/Root/RootFeatureTestSupport.swift b/Application/DevLogPresentation/Tests/Root/RootFeatureTestSupport.swift index a961b077..f297e540 100644 --- a/Application/DevLogPresentation/Tests/Root/RootFeatureTestSupport.swift +++ b/Application/DevLogPresentation/Tests/Root/RootFeatureTestSupport.swift @@ -9,6 +9,7 @@ import Combine import ComposableArchitecture import DevLogCore import DevLogDomain +import Foundation import Testing @testable import DevLogPresentation @@ -299,9 +300,18 @@ final class RootTrackAnalyticsEventUseCaseSpy: TrackAnalyticsEventUseCase { } final class RootApplicationBadgeCountSpy: @unchecked Sendable { - private(set) var counts = [Int]() + private let lock = NSLock() + private var protectedCounts = [Int]() + + var counts: [Int] { + lock.withLock { + protectedCounts + } + } func setBadgeCount(_ count: Int) async throws { - counts.append(count) + lock.withLock { + protectedCounts.append(count) + } } } diff --git a/Application/DevLogPresentation/Tests/Root/RootFeatureTests.swift b/Application/DevLogPresentation/Tests/Root/RootFeatureTests.swift index bd75da05..db68a4a1 100644 --- a/Application/DevLogPresentation/Tests/Root/RootFeatureTests.swift +++ b/Application/DevLogPresentation/Tests/Root/RootFeatureTests.swift @@ -39,6 +39,19 @@ struct RootFeatureTests { await verifyDidLoginedFalse(adapter: adapter, trackAnalyticsEventUseCaseSpy: trackSpy) } + @Test("RootFeature didLogined(false)는 앱 badge 초기화를 요청한다") + func RootFeature_didLogined_false는_앱_badge_초기화를_요청한다() async { + let badgeSpy = RootApplicationBadgeCountSpy() + let adapter = RootStoreTestAdapter(badgeCountSpy: badgeSpy) + + await adapter.didLogined(false) + await waitUntil { + badgeSpy.counts == [0] + } + + #expect(badgeSpy.counts == [0]) + } + @Test("RootFeature didLogined(true)는 기존 Root 상태관리처럼 signIn 상태를 true로 갱신하고 selectedMainTab을 home으로 되돌린다") func RootFeature_didLogined_true는_기존_Root_상태관리처럼_signIn_상태를_true로_갱신하고_selectedMainTab을_home으로_되돌린다() async { let trackSpy = RootTrackAnalyticsEventUseCaseSpy()