Skip to content

Commit 0191f64

Browse files
authored
PIR: Add unit tests for PirWebOnboardingStateHolder (#6654)
Task/Issue URL: https://app.asana.com/1/137249556945/task/1211134926977198?focus=true ### Description - Uses an interface for `PirWebOnboardingStateHolder` - Adds unit tests for `RealPirWebOnboardingStateHolder` ### Steps to test this PR Run unit tests in `RealPirWebOnboardingStateHolderTest` ### UI changes No UI changes
1 parent 48e6fbb commit 0191f64

File tree

2 files changed

+506
-13
lines changed

2 files changed

+506
-13
lines changed

pir/pir-impl/src/main/java/com/duckduckgo/pir/impl/dashboard/state/PirWebOnboardingStateHolder.kt

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,56 @@ package com.duckduckgo.pir.impl.dashboard.state
1919
import com.duckduckgo.di.scopes.ActivityScope
2020
import com.duckduckgo.pir.impl.models.Address
2121
import com.duckduckgo.pir.impl.models.ProfileQuery
22+
import com.squareup.anvil.annotations.ContributesBinding
2223
import dagger.SingleInstanceIn
2324
import javax.inject.Inject
2425

26+
interface PirWebOnboardingStateHolder {
27+
val isProfileComplete: Boolean
28+
29+
fun addAddress(
30+
city: String,
31+
state: String,
32+
): Boolean
33+
34+
fun addName(
35+
firstName: String,
36+
middleName: String? = null,
37+
lastName: String,
38+
): Boolean
39+
40+
fun setBirthYear(year: Int): Boolean
41+
fun setNameAtIndex(
42+
index: Int,
43+
firstName: String,
44+
middleName: String? = null,
45+
lastName: String,
46+
): Boolean
47+
48+
fun setAddressAtIndex(
49+
index: Int,
50+
city: String,
51+
state: String,
52+
): Boolean
53+
54+
fun removeAddressAtIndex(index: Int): Boolean
55+
fun removeNameAtIndex(index: Int): Boolean
56+
fun toProfileQueries(currentYear: Int): List<ProfileQuery>
57+
fun clear()
58+
}
59+
60+
@ContributesBinding(ActivityScope::class)
2561
@SingleInstanceIn(ActivityScope::class)
26-
class PirWebOnboardingStateHolder @Inject constructor() {
62+
class RealPirWebOnboardingStateHolder @Inject constructor() : PirWebOnboardingStateHolder {
2763

2864
private val names: MutableList<Name> = mutableListOf()
2965
private val addresses: MutableList<Address> = mutableListOf()
3066
private var birthYear: Int = 0
3167

32-
val isProfileComplete: Boolean
68+
override val isProfileComplete: Boolean
3369
get() = names.isNotEmpty() && addresses.isNotEmpty() && birthYear > 0
3470

35-
fun addAddress(
71+
override fun addAddress(
3672
city: String,
3773
state: String,
3874
): Boolean {
@@ -43,9 +79,9 @@ class PirWebOnboardingStateHolder @Inject constructor() {
4379
return true
4480
}
4581

46-
fun addName(
82+
override fun addName(
4783
firstName: String,
48-
middleName: String? = null,
84+
middleName: String?,
4985
lastName: String,
5086
): Boolean {
5187
if (names.any { it.firstName == firstName && it.middleName == middleName && it.lastName == lastName }) {
@@ -61,15 +97,15 @@ class PirWebOnboardingStateHolder @Inject constructor() {
6197
return true
6298
}
6399

64-
fun setBirthYear(year: Int): Boolean {
100+
override fun setBirthYear(year: Int): Boolean {
65101
birthYear = year
66102
return true
67103
}
68104

69-
fun setNameAtIndex(
105+
override fun setNameAtIndex(
70106
index: Int,
71107
firstName: String,
72-
middleName: String? = null,
108+
middleName: String?,
73109
lastName: String,
74110
): Boolean {
75111
if (index !in names.indices) {
@@ -89,7 +125,7 @@ class PirWebOnboardingStateHolder @Inject constructor() {
89125
return true
90126
}
91127

92-
fun setAddressAtIndex(
128+
override fun setAddressAtIndex(
93129
index: Int,
94130
city: String,
95131
state: String,
@@ -107,23 +143,23 @@ class PirWebOnboardingStateHolder @Inject constructor() {
107143
return true
108144
}
109145

110-
fun removeAddressAtIndex(index: Int): Boolean {
146+
override fun removeAddressAtIndex(index: Int): Boolean {
111147
if (index in addresses.indices) {
112148
addresses.removeAt(index)
113149
return true
114150
}
115151
return false
116152
}
117153

118-
fun removeNameAtIndex(index: Int): Boolean {
154+
override fun removeNameAtIndex(index: Int): Boolean {
119155
if (index in names.indices) {
120156
names.removeAt(index)
121157
return true
122158
}
123159
return false
124160
}
125161

126-
fun toProfileQueries(currentYear: Int): List<ProfileQuery> {
162+
override fun toProfileQueries(currentYear: Int): List<ProfileQuery> {
127163
val profiles = mutableListOf<ProfileQuery>()
128164
names.forEach { name ->
129165
addresses.forEach { address ->
@@ -149,7 +185,7 @@ class PirWebOnboardingStateHolder @Inject constructor() {
149185
return profiles
150186
}
151187

152-
fun clear() {
188+
override fun clear() {
153189
names.clear()
154190
addresses.clear()
155191
birthYear = 0

0 commit comments

Comments
 (0)