From ee9140b30073a79d6cb9fb52fcf37b1318678a3a Mon Sep 17 00:00:00 2001 From: dadachi Date: Wed, 29 Apr 2026 15:34:19 +0900 Subject: [PATCH] Drop onboarding reload ceremony Co-Authored-By: Claude Opus 4.7 (1M context) --- .../Login/OnboardingRepository.swift | 2 - .../Login/OnboardingRepositoryProtocol.swift | 2 - .../UI/App Root/OnboardingView.swift | 3 - .../UI/App Root/OnboardingViewModel.swift | 11 ++- .../DemoOnboardingRepository.swift | 4 -- .../DemoOnboardingRepositoryTest.swift | 12 ---- .../TestOnboardingRepository.swift | 7 -- .../UI/App Root/OnboardingViewModelTest.swift | 71 ++----------------- 8 files changed, 8 insertions(+), 104 deletions(-) diff --git a/NativeAppTemplate/Login/OnboardingRepository.swift b/NativeAppTemplate/Login/OnboardingRepository.swift index 30094d6..7f9b25a 100644 --- a/NativeAppTemplate/Login/OnboardingRepository.swift +++ b/NativeAppTemplate/Login/OnboardingRepository.swift @@ -12,6 +12,4 @@ import Foundation Onboarding(id: 3, imageOrientation: .portrait), Onboarding(id: 4, imageOrientation: .portrait) ] - - func reload() {} } diff --git a/NativeAppTemplate/Login/OnboardingRepositoryProtocol.swift b/NativeAppTemplate/Login/OnboardingRepositoryProtocol.swift index d7f51bb..5a73bf8 100644 --- a/NativeAppTemplate/Login/OnboardingRepositoryProtocol.swift +++ b/NativeAppTemplate/Login/OnboardingRepositoryProtocol.swift @@ -8,6 +8,4 @@ import Foundation @MainActor protocol OnboardingRepositoryProtocol: AnyObject, Observable, Sendable { var onboardings: [Onboarding] { get set } - - func reload() } diff --git a/NativeAppTemplate/UI/App Root/OnboardingView.swift b/NativeAppTemplate/UI/App Root/OnboardingView.swift index 8598f4a..16185aa 100644 --- a/NativeAppTemplate/UI/App Root/OnboardingView.swift +++ b/NativeAppTemplate/UI/App Root/OnboardingView.swift @@ -15,9 +15,6 @@ struct OnboardingView: View { var body: some View { NavigationStack { contentView - .task { - viewModel.reload() - } } } } diff --git a/NativeAppTemplate/UI/App Root/OnboardingViewModel.swift b/NativeAppTemplate/UI/App Root/OnboardingViewModel.swift index f978c8e..b2efd18 100644 --- a/NativeAppTemplate/UI/App Root/OnboardingViewModel.swift +++ b/NativeAppTemplate/UI/App Root/OnboardingViewModel.swift @@ -9,17 +9,14 @@ import SwiftUI @Observable @MainActor final class OnboardingViewModel { - var onboardings: [Onboarding] = [] - private let onboardingRepository: OnboardingRepositoryProtocol - init(onboardingRepository: OnboardingRepositoryProtocol) { - self.onboardingRepository = onboardingRepository + var onboardings: [Onboarding] { + onboardingRepository.onboardings } - func reload() { - onboardingRepository.reload() - onboardings = onboardingRepository.onboardings + init(onboardingRepository: OnboardingRepositoryProtocol) { + self.onboardingRepository = onboardingRepository } func onboardingDescription(index: Int) -> String { diff --git a/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepository.swift b/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepository.swift index 9b7fc60..23dffa0 100644 --- a/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepository.swift +++ b/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepository.swift @@ -14,10 +14,6 @@ final class DemoOnboardingRepository: OnboardingRepositoryProtocol { setupMockOnboardings() } - func reload() { - setupMockOnboardings() - } - // MARK: - Test Helpers func resetState() { diff --git a/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepositoryTest.swift b/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepositoryTest.swift index af33426..0d0a349 100644 --- a/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepositoryTest.swift +++ b/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepositoryTest.swift @@ -33,18 +33,6 @@ struct DemoOnboardingRepositoryTest { #expect(onboarding3.imageOrientation == .portrait) } - @Test - func reload() { - repository.resetState() - - repository.onboardings.removeAll() - #expect(repository.onboardings.isEmpty) - - repository.reload() - - #expect(repository.onboardings.count == 5) - } - @Test func addOnboarding() throws { repository.resetState() diff --git a/NativeAppTemplateTests/Testing/Repositories/TestOnboardingRepository.swift b/NativeAppTemplateTests/Testing/Repositories/TestOnboardingRepository.swift index 23e6217..4cf7ff5 100644 --- a/NativeAppTemplateTests/Testing/Repositories/TestOnboardingRepository.swift +++ b/NativeAppTemplateTests/Testing/Repositories/TestOnboardingRepository.swift @@ -10,13 +10,6 @@ import Foundation final class TestOnboardingRepository: OnboardingRepositoryProtocol { var onboardings: [Onboarding] = [] - /// A test-only - var reloadCalled = false - - func reload() { - reloadCalled = true - } - /// A test-only func setOnboardings(onboardings: [Onboarding]) { self.onboardings = onboardings diff --git a/NativeAppTemplateTests/UI/App Root/OnboardingViewModelTest.swift b/NativeAppTemplateTests/UI/App Root/OnboardingViewModelTest.swift index 931a73c..2d30733 100644 --- a/NativeAppTemplateTests/UI/App Root/OnboardingViewModelTest.swift +++ b/NativeAppTemplateTests/UI/App Root/OnboardingViewModelTest.swift @@ -32,7 +32,7 @@ struct OnboardingViewModelTest { } @Test - func reload() { + func exposesRepositoryOnboardings() { let onboardings = [ mockOnboarding(id: 1, imageOrientation: .portrait), mockOnboarding(id: 2, imageOrientation: .landscape), @@ -45,90 +45,29 @@ struct OnboardingViewModelTest { onboardingRepository: onboardingRepository ) - viewModel.reload() - - #expect(onboardingRepository.reloadCalled == true) #expect(viewModel.onboardings.count == 3) } @Test func onboardingDescription() { - let onboardings = [ - mockOnboarding(id: 1), - mockOnboarding(id: 2), - mockOnboarding(id: 3) - ] - - onboardingRepository.setOnboardings(onboardings: onboardings) - let viewModel = OnboardingViewModel( onboardingRepository: onboardingRepository ) - viewModel.reload() - - // Test valid indices (1-based indexing in the switch case) #expect(viewModel.onboardingDescription(index: 1) == Strings.onboardingDescription1) #expect(viewModel.onboardingDescription(index: 2) == Strings.onboardingDescription2) #expect(viewModel.onboardingDescription(index: 3) == Strings.onboardingDescription3) + #expect(viewModel.onboardingDescription(index: 4) == Strings.onboardingDescription4) } @Test func onboardingDescriptionInvalidIndex() { - let onboardings = [ - mockOnboarding(id: 1) - ] - - onboardingRepository.setOnboardings(onboardings: onboardings) - - let viewModel = OnboardingViewModel( - onboardingRepository: onboardingRepository - ) - - viewModel.reload() - - // Test invalid indices - should return default (onboardingDescription1) - let result = viewModel.onboardingDescription(index: 0) - #expect(result == Strings.onboardingDescription1) - let result2 = viewModel.onboardingDescription(index: 99) - #expect(result2 == Strings.onboardingDescription1) - } - - @Test - func onboardingDescriptionAllSteps() { - let onboardings = (1...4).map { mockOnboarding(id: $0) } - onboardingRepository.setOnboardings(onboardings: onboardings) - - let viewModel = OnboardingViewModel( - onboardingRepository: onboardingRepository - ) - - viewModel.reload() - - let expectedDescriptions = [ - Strings.onboardingDescription1, - Strings.onboardingDescription2, - Strings.onboardingDescription3, - Strings.onboardingDescription4 - ] - - for index in 1...4 { - #expect(viewModel.onboardingDescription(index: index) == expectedDescriptions[index - 1]) - } - } - - @Test - func emptyOnboardings() { - onboardingRepository.setOnboardings(onboardings: []) - let viewModel = OnboardingViewModel( onboardingRepository: onboardingRepository ) - viewModel.reload() - - #expect(viewModel.onboardings.isEmpty) - #expect(onboardingRepository.reloadCalled == true) + #expect(viewModel.onboardingDescription(index: 0) == Strings.onboardingDescription1) + #expect(viewModel.onboardingDescription(index: 99) == Strings.onboardingDescription1) } @Test @@ -146,8 +85,6 @@ struct OnboardingViewModelTest { onboardingRepository: onboardingRepository ) - viewModel.reload() - #expect(viewModel.onboardings.count == 4) #expect(viewModel.onboardings[0].imageOrientation == .portrait) #expect(viewModel.onboardings[1].imageOrientation == .landscape)