Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions NativeAppTemplate/Login/OnboardingRepository.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,4 @@ import Foundation
Onboarding(id: 3, imageOrientation: .portrait),
Onboarding(id: 4, imageOrientation: .portrait)
]

func reload() {}
}
2 changes: 0 additions & 2 deletions NativeAppTemplate/Login/OnboardingRepositoryProtocol.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,4 @@ import Foundation
@MainActor
protocol OnboardingRepositoryProtocol: AnyObject, Observable, Sendable {
var onboardings: [Onboarding] { get set }

func reload()
}
3 changes: 0 additions & 3 deletions NativeAppTemplate/UI/App Root/OnboardingView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@ struct OnboardingView: View {
var body: some View {
NavigationStack {
contentView
.task {
viewModel.reload()
}
}
}
}
Expand Down
11 changes: 4 additions & 7 deletions NativeAppTemplate/UI/App Root/OnboardingViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ final class DemoOnboardingRepository: OnboardingRepositoryProtocol {
setupMockOnboardings()
}

func reload() {
setupMockOnboardings()
}

// MARK: - Test Helpers

func resetState() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
71 changes: 4 additions & 67 deletions NativeAppTemplateTests/UI/App Root/OnboardingViewModelTest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ struct OnboardingViewModelTest {
}

@Test
func reload() {
func exposesRepositoryOnboardings() {
let onboardings = [
mockOnboarding(id: 1, imageOrientation: .portrait),
mockOnboarding(id: 2, imageOrientation: .landscape),
Expand All @@ -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
Expand All @@ -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)
Expand Down
Loading