@@ -22,8 +22,9 @@ import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerManua
2222import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordEmailConfirmationCompleted
2323import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordEmailConfirmationNeeded
2424import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordEmailConfirmationStarted
25- import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutCompleted
25+ import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutFailed
2626import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutStarted
27+ import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutSubmitted
2728import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerScanActionSucceeded
2829import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerScheduledScanCompleted
2930import com.duckduckgo.pir.impl.models.AddressCityState
@@ -33,12 +34,17 @@ import com.duckduckgo.pir.impl.models.scheduling.JobRecord.EmailConfirmationJobR
3334import com.duckduckgo.pir.impl.models.scheduling.JobRecord.EmailConfirmationJobRecord.EmailData
3435import com.duckduckgo.pir.impl.models.scheduling.JobRecord.EmailConfirmationJobRecord.JobAttemptData
3536import com.duckduckgo.pir.impl.models.scheduling.JobRecord.EmailConfirmationJobRecord.LinkFetchData
37+ import com.duckduckgo.pir.impl.models.scheduling.JobRecord.OptOutJobRecord
38+ import com.duckduckgo.pir.impl.models.scheduling.JobRecord.OptOutJobRecord.OptOutJobStatus
3639import com.duckduckgo.pir.impl.pixels.PirPixelSender
40+ import com.duckduckgo.pir.impl.pixels.PirStage.OTHER
3741import com.duckduckgo.pir.impl.scheduling.JobRecordUpdater
42+ import com.duckduckgo.pir.impl.scripts.models.BrokerAction
3843import com.duckduckgo.pir.impl.scripts.models.PirSuccessResponse.ExtractedResponse
3944import com.duckduckgo.pir.impl.scripts.models.PirSuccessResponse.ExtractedResponse.ScriptAddressCityState
4045import com.duckduckgo.pir.impl.scripts.models.PirSuccessResponse.ExtractedResponse.ScriptExtractedProfile
4146import com.duckduckgo.pir.impl.scripts.models.PirSuccessResponse.NavigateResponse
47+ import com.duckduckgo.pir.impl.scripts.models.asActionType
4248import com.duckduckgo.pir.impl.store.PirEventsRepository
4349import com.duckduckgo.pir.impl.store.PirRepository
4450import com.duckduckgo.pir.impl.store.PirSchedulingRepository
@@ -449,13 +455,27 @@ class RealPirRunStateHandlerTest {
449455 fun whenHandleBrokerRecordOptOutCompletedWithSuccessThenUpdatesRecordAndReportsPixel () =
450456 runTest {
451457 val state =
452- BrokerRecordOptOutCompleted (
458+ BrokerRecordOptOutSubmitted (
453459 brokerName = testBrokerName,
454460 extractedProfile = testExtractedProfile,
455461 startTimeInMillis = testStartTimeInMillis,
456462 endTimeInMillis = testEventTimeInMillis,
457- isSubmitSuccess = true ,
463+ attemptId = " c9982ded-021a-4251-9e03-2c58b130410f" ,
464+ emailPattern = " ep15" ,
458465 )
466+ whenever(mockRepository.getBrokerForName(testBrokerName)).thenReturn(testBroker)
467+ whenever(mockJobRecordUpdater.updateOptOutRequested(any())).thenReturn(
468+ OptOutJobRecord (
469+ extractedProfileId = 789L ,
470+ brokerName = testBrokerName,
471+ userProfileId = 123L ,
472+ status = OptOutJobStatus .REQUESTED ,
473+ attemptCount = 2 ,
474+ lastOptOutAttemptDateInMillis = 1000L ,
475+ optOutRequestedDateInMillis = 2000L ,
476+ optOutRemovedDateInMillis = 0L ,
477+ ),
478+ )
459479
460480 testee.handleState(state)
461481
@@ -467,24 +487,46 @@ class RealPirRunStateHandlerTest {
467487 endTimeInMillis = testEventTimeInMillis,
468488 isSubmitSuccess = true ,
469489 )
470- verify(mockPixelSender).reportOptOutCompleted(
471- brokerName = testBrokerName,
472- totalTimeInMillis = testEventTimeInMillis - testStartTimeInMillis,
473- isSuccess = true ,
490+ verify(mockPixelSender).reportOptOutSubmitted(
491+ brokerUrl = testBroker.url,
492+ parent = " " ,
493+ attemptId = state.attemptId,
494+ durationMs = testEventTimeInMillis - testStartTimeInMillis,
495+ tries = 2 ,
496+ emailPattern = state.emailPattern,
474497 )
475498 }
476499
477500 @Test
478501 fun whenHandleBrokerRecordOptOutCompletedWithFailureThenUpdatesRecordAndReportsPixel () =
479502 runTest {
480503 val state =
481- BrokerRecordOptOutCompleted (
504+ BrokerRecordOptOutFailed (
482505 brokerName = testBrokerName,
483506 extractedProfile = testExtractedProfile,
484507 startTimeInMillis = testStartTimeInMillis,
485508 endTimeInMillis = testEventTimeInMillis,
486- isSubmitSuccess = false ,
509+ attemptId = " c9982ded-021a-4251-9e03-2c58b130410f" ,
510+ failedAction = BrokerAction .Navigate (
511+ id = " fail82ded-021a-4251-9e03-2c58b130410f" ,
512+ url = " https://example.com/fail" ,
513+ ),
514+ stage = OTHER ,
515+ emailPattern = " ep15" ,
487516 )
517+ whenever(mockRepository.getBrokerForName(testBrokerName)).thenReturn(testBroker)
518+ whenever(mockJobRecordUpdater.updateOptOutError(any())).thenReturn(
519+ OptOutJobRecord (
520+ extractedProfileId = 789L ,
521+ brokerName = testBrokerName,
522+ userProfileId = 123L ,
523+ status = OptOutJobStatus .ERROR ,
524+ attemptCount = 2 ,
525+ lastOptOutAttemptDateInMillis = 1000L ,
526+ optOutRequestedDateInMillis = 2000L ,
527+ optOutRemovedDateInMillis = 0L ,
528+ ),
529+ )
488530
489531 testee.handleState(state)
490532
@@ -496,10 +538,17 @@ class RealPirRunStateHandlerTest {
496538 endTimeInMillis = testEventTimeInMillis,
497539 isSubmitSuccess = false ,
498540 )
499- verify(mockPixelSender).reportOptOutCompleted(
500- brokerName = testBrokerName,
501- totalTimeInMillis = testEventTimeInMillis - testStartTimeInMillis,
502- isSuccess = false ,
541+ verify(mockPixelSender).reportOptOutFailed(
542+ brokerUrl = testBroker.url,
543+ parent = " " ,
544+ brokerJsonVersion = testBroker.version,
545+ attemptId = " c9982ded-021a-4251-9e03-2c58b130410f" ,
546+ durationMs = testEventTimeInMillis - testStartTimeInMillis,
547+ stage = state.stage,
548+ tries = 2 ,
549+ emailPattern = state.emailPattern,
550+ actionId = state.failedAction.id,
551+ actionType = state.failedAction.asActionType(),
503552 )
504553 }
505554
0 commit comments