Skip to content

Commit 412ca7f

Browse files
authored
PIR: Fix dashboard button showing on onboarding (#6743)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1203581873609357/task/1211255677689944?focus=true ### Description Fixes an issue with initial scan response at the start of onboarding that caused a "Back to Dashboard" button to show at the final step of onboarding. ### Steps to test this PR See https://app.asana.com/1/137249556945/project/1203581873609357/task/1211255677689959?focus=true for instructions ### UI changes See task
1 parent 7fc5e06 commit 412ca7f

File tree

3 files changed

+73
-0
lines changed

3 files changed

+73
-0
lines changed

pir/pir-impl/src/main/java/com/duckduckgo/pir/impl/dashboard/messaging/handlers/PirWebInitialScanStatusMessageHandler.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.duckduckgo.pir.impl.dashboard.messaging.model.PirWebMessageResponse.S
2929
import com.duckduckgo.pir.impl.dashboard.messaging.model.PirWebMessageResponse.ScanResult.ScanResultAddress
3030
import com.duckduckgo.pir.impl.dashboard.messaging.model.PirWebMessageResponse.ScannedBroker
3131
import com.duckduckgo.pir.impl.dashboard.state.PirDashboardInitialScanStateProvider
32+
import com.duckduckgo.pir.impl.store.PirRepository
3233
import com.squareup.anvil.annotations.ContributesMultibinding
3334
import java.util.concurrent.TimeUnit
3435
import javax.inject.Inject
@@ -47,6 +48,7 @@ class PirWebInitialScanStatusMessageHandler @Inject constructor(
4748
private val dispatcherProvider: DispatcherProvider,
4849
@AppCoroutineScope private val appCoroutineScope: CoroutineScope,
4950
private val stateProvider: PirDashboardInitialScanStateProvider,
51+
private val pirRepository: PirRepository,
5052
) : PirWebJsMessageHandler() {
5153

5254
override val message = PirDashboardWebMessages.INITIAL_SCAN_STATUS
@@ -59,6 +61,14 @@ class PirWebInitialScanStatusMessageHandler @Inject constructor(
5961
logcat { "PIR-WEB: InitialScanStatusMessageHandler: process $jsMessage" }
6062

6163
appCoroutineScope.launch(dispatcherProvider.io()) {
64+
if (!canRunScan()) {
65+
jsMessaging.sendResponse(
66+
jsMessage = jsMessage,
67+
response = PirWebMessageResponse.InitialScanResponse.EMPTY,
68+
)
69+
return@launch
70+
}
71+
6272
jsMessaging.sendResponse(
6373
jsMessage = jsMessage,
6474
response = PirWebMessageResponse.InitialScanResponse(
@@ -73,6 +83,10 @@ class PirWebInitialScanStatusMessageHandler @Inject constructor(
7383
}
7484
}
7585

86+
private suspend fun canRunScan(): Boolean {
87+
return pirRepository.getUserProfileQueries().isNotEmpty()
88+
}
89+
7690
private suspend fun getResultsFound(): List<ScanResult> {
7791
return stateProvider.getScanResults().map {
7892
ScanResult(

pir/pir-impl/src/main/java/com/duckduckgo/pir/impl/dashboard/messaging/model/PirWebMessageResponse.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,17 @@ sealed interface PirWebMessageResponse {
8585
val totalScans: Int,
8686
val scannedBrokers: List<ScannedBroker>,
8787
)
88+
89+
companion object {
90+
val EMPTY = InitialScanResponse(
91+
resultsFound = emptyList(),
92+
scanProgress = ScanProgress(
93+
currentScans = 0,
94+
totalScans = 0,
95+
scannedBrokers = emptyList(),
96+
),
97+
)
98+
}
8899
}
89100

90101
data class ScanResult(

pir/pir-impl/src/test/java/com/duckduckgo/pir/impl/dashboard/messaging/handlers/PirWebInitialScanStatusMessageHandlerTest.kt

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.duckduckgo.pir.impl.dashboard.state.PirDashboardInitialScanStateProvi
2929
import com.duckduckgo.pir.impl.dashboard.state.PirDashboardInitialScanStateProvider.DashboardBrokerWithStatus
3030
import com.duckduckgo.pir.impl.models.AddressCityState
3131
import com.duckduckgo.pir.impl.models.ExtractedProfile
32+
import com.duckduckgo.pir.impl.store.PirRepository
3233
import com.squareup.moshi.JsonAdapter
3334
import com.squareup.moshi.Moshi
3435
import java.util.concurrent.TimeUnit
@@ -59,13 +60,15 @@ class PirWebInitialScanStatusMessageHandlerTest {
5960
private val mockStateProvider: PirDashboardInitialScanStateProvider = mock()
6061
private val mockJsMessageCallback: JsMessageCallback = mock()
6162
private val testScope = TestScope()
63+
private val mockRepository: PirRepository = mock()
6264

6365
@Before
6466
fun setUp() {
6567
testee = PirWebInitialScanStatusMessageHandler(
6668
dispatcherProvider = coroutineRule.testDispatcherProvider,
6769
appCoroutineScope = testScope,
6870
stateProvider = mockStateProvider,
71+
pirRepository = mockRepository,
6972
)
7073
fakeJsMessaging.reset()
7174
}
@@ -79,6 +82,7 @@ class PirWebInitialScanStatusMessageHandlerTest {
7982
fun whenProcessWithNoDataThenSendsEmptyResponse() = runTest {
8083
// Given
8184
val jsMessage = createJsMessage("", PirDashboardWebMessages.INITIAL_SCAN_STATUS)
85+
whenever(mockRepository.getUserProfileQueries()).thenReturn(listOf(mock()))
8286
whenever(mockStateProvider.getScanResults()).thenReturn(emptyList())
8387
whenever(mockStateProvider.getFullyCompletedBrokersTotal()).thenReturn(0)
8488
whenever(mockStateProvider.getActiveBrokersAndMirrorSitesTotal()).thenReturn(0)
@@ -96,6 +100,47 @@ class PirWebInitialScanStatusMessageHandlerTest {
96100
)
97101
}
98102

103+
@Test
104+
fun whenProcessWithNoProfilesThenSendsEmptyResponse() = runTest {
105+
// Given
106+
val jsMessage = createJsMessage("", PirDashboardWebMessages.INITIAL_SCAN_STATUS)
107+
val extractedProfile = createExtractedProfile()
108+
val dashboardBroker = createDashboardBroker()
109+
val scanResults = listOf(
110+
DashboardExtractedProfileResult(
111+
extractedProfile = extractedProfile,
112+
broker = dashboardBroker,
113+
optOutSubmittedDateInMillis = 1640995200000L,
114+
optOutRemovedDateInMillis = 1643673600000L,
115+
estimatedRemovalDateInMillis = 1641081600000L,
116+
hasMatchingRecordOnParentBroker = true,
117+
),
118+
)
119+
val scannedBrokers = listOf(
120+
DashboardBrokerWithStatus(
121+
broker = dashboardBroker,
122+
status = DashboardBrokerWithStatus.Status.COMPLETED,
123+
),
124+
)
125+
126+
whenever(mockRepository.getUserProfileQueries()).thenReturn(emptyList())
127+
whenever(mockStateProvider.getScanResults()).thenReturn(scanResults)
128+
whenever(mockStateProvider.getFullyCompletedBrokersTotal()).thenReturn(5)
129+
whenever(mockStateProvider.getActiveBrokersAndMirrorSitesTotal()).thenReturn(10)
130+
whenever(mockStateProvider.getAllScannedBrokersStatus()).thenReturn(scannedBrokers)
131+
132+
// When
133+
testee.process(jsMessage, fakeJsMessaging, mockJsMessageCallback)
134+
135+
// Then
136+
verifyInitialScanResponse(
137+
expectedResultsCount = 0,
138+
expectedCurrentScans = 0,
139+
expectedTotalScans = 0,
140+
expectedScannedBrokersCount = 0,
141+
)
142+
}
143+
99144
@Test
100145
fun whenProcessWithScanResultsAndProgressThenSendsCorrectResponse() = runTest {
101146
// Given
@@ -119,6 +164,7 @@ class PirWebInitialScanStatusMessageHandlerTest {
119164
),
120165
)
121166

167+
whenever(mockRepository.getUserProfileQueries()).thenReturn(listOf(mock()))
122168
whenever(mockStateProvider.getScanResults()).thenReturn(scanResults)
123169
whenever(mockStateProvider.getFullyCompletedBrokersTotal()).thenReturn(5)
124170
whenever(mockStateProvider.getActiveBrokersAndMirrorSitesTotal()).thenReturn(10)
@@ -175,6 +221,7 @@ class PirWebInitialScanStatusMessageHandlerTest {
175221
),
176222
)
177223

224+
whenever(mockRepository.getUserProfileQueries()).thenReturn(listOf(mock()))
178225
whenever(mockStateProvider.getScanResults()).thenReturn(scanResults)
179226
whenever(mockStateProvider.getFullyCompletedBrokersTotal()).thenReturn(2)
180227
whenever(mockStateProvider.getActiveBrokersAndMirrorSitesTotal()).thenReturn(5)
@@ -248,6 +295,7 @@ class PirWebInitialScanStatusMessageHandlerTest {
248295
),
249296
)
250297

298+
whenever(mockRepository.getUserProfileQueries()).thenReturn(listOf(mock()))
251299
whenever(mockStateProvider.getScanResults()).thenReturn(emptyList())
252300
whenever(mockStateProvider.getFullyCompletedBrokersTotal()).thenReturn(1)
253301
whenever(mockStateProvider.getActiveBrokersAndMirrorSitesTotal()).thenReturn(2)

0 commit comments

Comments
 (0)