Skip to content

Commit b3e3cc5

Browse files
committed
Merge branch 'release/5.26.0'
2 parents ef1b90a + 2d6fe21 commit b3e3cc5

File tree

77 files changed

+1499
-773
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+1499
-773
lines changed

app/src/androidTest/java/com/duckduckgo/app/global/view/ColorCombinerTest.kt

Lines changed: 0 additions & 49 deletions
This file was deleted.
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*
2+
* Copyright (c) 2019 DuckDuckGo
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.duckduckgo.app.onboarding.ui
18+
19+
import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserDetector
20+
import com.duckduckgo.app.statistics.Variant
21+
import com.duckduckgo.app.statistics.VariantManager
22+
import com.duckduckgo.app.statistics.VariantManager.VariantFeature
23+
import com.nhaarman.mockitokotlin2.mock
24+
import com.nhaarman.mockitokotlin2.whenever
25+
import org.junit.Assert.assertEquals
26+
import org.junit.Before
27+
import org.junit.Test
28+
import org.junit.runner.RunWith
29+
import org.junit.runners.Parameterized
30+
31+
@RunWith(Parameterized::class)
32+
class OnboardingPageManagerPageCountTest(private val testCase: TestCase) {
33+
34+
private lateinit var testee: OnboardingPageManager
35+
private val variantManager: VariantManager = mock()
36+
private val onboardingPageBuilder: OnboardingPageBuilder = mock()
37+
private val mockDefaultBrowserDetector: DefaultBrowserDetector = mock()
38+
39+
@Before
40+
fun setup() {
41+
testee = OnboardingPageManagerWithTrackerBlocking(variantManager, onboardingPageBuilder, mockDefaultBrowserDetector)
42+
}
43+
44+
@Test
45+
fun ensurePageCountAsExpected() {
46+
configureDefaultBrowserPageConfig()
47+
configureTrackerBlockerOptInPageConfig()
48+
49+
testee.buildPageBlueprints()
50+
assertEquals(testCase.expectedPageCount, testee.pageCount())
51+
}
52+
53+
private fun configureTrackerBlockerOptInPageConfig() {
54+
if (testCase.trackerBlockerOptInPage) {
55+
configureShowTrackerBlockerOptInPage()
56+
} else {
57+
configureHideTrackerBlockerOptInPage()
58+
}
59+
}
60+
61+
private fun configureDefaultBrowserPageConfig() {
62+
if (testCase.defaultBrowserPage) {
63+
configureDeviceSupportsDefaultBrowser()
64+
} else {
65+
configureDeviceDoesNotSupportDefaultBrowser()
66+
}
67+
}
68+
69+
companion object {
70+
71+
@JvmStatic
72+
@Parameterized.Parameters(name = "Test case: {index} - {0}")
73+
fun testData(): Array<TestCase> {
74+
return arrayOf(
75+
TestCase(false, false, 1),
76+
TestCase(false, true, 2),
77+
TestCase(true, false, 2),
78+
TestCase(true, true, 3)
79+
)
80+
}
81+
}
82+
83+
private fun configureDeviceSupportsDefaultBrowser() {
84+
whenever(mockDefaultBrowserDetector.deviceSupportsDefaultBrowserConfiguration()).thenReturn(true)
85+
}
86+
87+
private fun configureDeviceDoesNotSupportDefaultBrowser() {
88+
whenever(mockDefaultBrowserDetector.deviceSupportsDefaultBrowserConfiguration()).thenReturn(false)
89+
}
90+
91+
private fun configureShowTrackerBlockerOptInPage() {
92+
whenever(variantManager.getVariant()).thenReturn(Variant("test", features = listOf(VariantFeature.TrackerBlockingOnboardingOptIn)))
93+
}
94+
95+
private fun configureHideTrackerBlockerOptInPage() {
96+
whenever(variantManager.getVariant()).thenReturn(Variant("test", features = emptyList()))
97+
}
98+
99+
data class TestCase(val trackerBlockerOptInPage: Boolean, val defaultBrowserPage: Boolean, val expectedPageCount: Int)
100+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/*
2+
* Copyright (c) 2019 DuckDuckGo
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.duckduckgo.app.onboarding.ui
18+
19+
import com.duckduckgo.app.browser.R
20+
import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserDetector
21+
import com.duckduckgo.app.statistics.Variant
22+
import com.duckduckgo.app.statistics.VariantManager
23+
import com.nhaarman.mockitokotlin2.mock
24+
import com.nhaarman.mockitokotlin2.whenever
25+
import org.junit.Assert.assertEquals
26+
import org.junit.Before
27+
import org.junit.Test
28+
29+
class OnboardingPageManagerTest {
30+
31+
private lateinit var testee: OnboardingPageManager
32+
private val variantManager: VariantManager = mock()
33+
private val onboardingPageBuilder: OnboardingPageBuilder = mock()
34+
private val mockDefaultBrowserDetector: DefaultBrowserDetector = mock()
35+
36+
@Before
37+
fun setup() {
38+
testee = OnboardingPageManagerWithTrackerBlocking(variantManager, onboardingPageBuilder, mockDefaultBrowserDetector)
39+
}
40+
41+
@Test
42+
fun whenDefaultBrowserSupportedAndTrackerBlockingOptInSupportedThenFirstPageShowsContinueTextOnButton() {
43+
configureDeviceSupportsDefaultBrowser()
44+
configureShouldShowTrackerBlockerOptIn()
45+
testee.buildPageBlueprints()
46+
val resourceId = testee.getContinueButtonTextResourceId(0)
47+
assertEquals(R.string.onboardingContinue, resourceId)
48+
}
49+
50+
@Test
51+
fun whenDefaultBrowserNotSupportedAndTrackerBlockingOptInNotSupportedThenFirstPageShowsFinalTextOnButton() {
52+
configureDeviceDoesNotSupportDefaultBrowser()
53+
configureShouldNotShowTrackerBlockerOptIn()
54+
testee.buildPageBlueprints()
55+
val resourceId = testee.getContinueButtonTextResourceId(0)
56+
assertEquals(R.string.onboardingContinueFinalPage, resourceId)
57+
}
58+
59+
private fun configureShouldNotShowTrackerBlockerOptIn() {
60+
whenever(variantManager.getVariant()).thenReturn(Variant("test", features = emptyList()))
61+
}
62+
63+
private fun configureShouldShowTrackerBlockerOptIn() {
64+
whenever(variantManager.getVariant()).thenReturn(
65+
Variant(
66+
"test",
67+
features = listOf(VariantManager.VariantFeature.TrackerBlockingOnboardingOptIn)
68+
)
69+
)
70+
}
71+
72+
private fun configureDeviceSupportsDefaultBrowser() {
73+
whenever(mockDefaultBrowserDetector.deviceSupportsDefaultBrowserConfiguration()).thenReturn(true)
74+
}
75+
76+
private fun configureDeviceDoesNotSupportDefaultBrowser() {
77+
whenever(mockDefaultBrowserDetector.deviceSupportsDefaultBrowserConfiguration()).thenReturn(false)
78+
}
79+
80+
}

app/src/androidTest/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModelTest.kt

Lines changed: 12 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717
package com.duckduckgo.app.onboarding.ui
1818

1919
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
20-
import com.duckduckgo.app.browser.R
2120
import com.duckduckgo.app.browser.defaultbrowsing.DefaultBrowserDetector
2221
import com.duckduckgo.app.onboarding.store.OnboardingStore
22+
import com.duckduckgo.app.privacy.store.PrivacySettingsStore
23+
import com.duckduckgo.app.statistics.VariantManager
24+
import com.duckduckgo.app.statistics.pixels.Pixel
2325
import com.nhaarman.mockitokotlin2.mock
2426
import com.nhaarman.mockitokotlin2.never
2527
import com.nhaarman.mockitokotlin2.verify
2628
import com.nhaarman.mockitokotlin2.whenever
27-
import org.junit.Assert.*
2829
import org.junit.Rule
2930
import org.junit.Test
3031

@@ -36,93 +37,23 @@ class OnboardingViewModelTest {
3637
var instantTaskExecutorRule = InstantTaskExecutorRule()
3738

3839
private var onboardingStore: OnboardingStore = mock()
39-
private var mockDefaultBrowserDetector: DefaultBrowserDetector = mock()
40+
private var privacySettingsStore: PrivacySettingsStore = mock()
41+
42+
private val variantManager: VariantManager = mock()
43+
private val mockDefaultBrowserCapabilityDetector: DefaultBrowserDetector = mock()
44+
private val pixelSender: Pixel = mock()
45+
private val mockPageLayout: OnboardingPageManager =
46+
OnboardingPageManagerWithTrackerBlocking(variantManager, OnboardingFragmentPageBuilder(), mockDefaultBrowserCapabilityDetector)
4047

4148
private val testee: OnboardingViewModel by lazy {
42-
OnboardingViewModel(onboardingStore, mockDefaultBrowserDetector)
49+
OnboardingViewModel(onboardingStore, privacySettingsStore, mockPageLayout, variantManager, pixelSender)
4350
}
4451

4552
@Test
4653
fun whenOnboardingDoneThenStoreNotifiedThatOnboardingShown() {
54+
whenever(variantManager.getVariant()).thenReturn(VariantManager.DEFAULT_VARIANT)
4755
verify(onboardingStore, never()).onboardingShown()
4856
testee.onOnboardingDone()
4957
verify(onboardingStore).onboardingShown()
5058
}
51-
52-
@Test
53-
fun whenFreshInstallFirstPageRequestedThenUnifiedWelcomePageReturned() {
54-
val page = testee.getItem(0, isFreshAppInstall = true)
55-
assertTrue(page is OnboardingPageFragment.UnifiedWelcomePage)
56-
}
57-
58-
@Test
59-
fun whenNotFreshInstallFirstPageRequestedThenUnifiedWelcomePageReturned() {
60-
val page = testee.getItem(0, isFreshAppInstall = false)
61-
assertTrue(page is OnboardingPageFragment.UnifiedWelcomePage)
62-
}
63-
64-
@Test
65-
fun whenFreshInstallSecondPageRequestedWithDefaultBrowserCapableThenDefaultBrowserPageReturned() {
66-
configureDeviceSupportsDefaultBrowser()
67-
val page = testee.getItem(1, isFreshAppInstall = true)
68-
assertTrue(page is OnboardingPageFragment.DefaultBrowserPage)
69-
}
70-
71-
@Test
72-
fun whenNotFreshInstallSecondPageRequestedWithDefaultBrowserCapableThenNoPageReturned() {
73-
configureDeviceSupportsDefaultBrowser()
74-
val page = testee.getItem(1, isFreshAppInstall = false)
75-
assertNull(page)
76-
}
77-
78-
@Test
79-
fun whenFreshInstallSecondPageRequestedButDefaultBrowserNotCapableThenNoPageReturned() {
80-
configureDeviceDoesNotSupportDefaultBrowser()
81-
val page = testee.getItem(1, isFreshAppInstall = true)
82-
assertNull(page)
83-
}
84-
85-
@Test
86-
fun whenNotFreshInstallSecondPageRequestedButDefaultBrowserNotCapableThenNoPageReturned() {
87-
configureDeviceDoesNotSupportDefaultBrowser()
88-
val page = testee.getItem(1, isFreshAppInstall = false)
89-
assertNull(page)
90-
}
91-
92-
@Test
93-
fun whenDefaultBrowserSupportedThenFirstPageShowsContinueTextOnButton() {
94-
configureDeviceSupportsDefaultBrowser()
95-
val resourceId = testee.getContinueButtonTextResourceId(0, isFreshAppInstall = true)
96-
assertEquals(R.string.onboardingContinue, resourceId)
97-
}
98-
99-
@Test
100-
fun whenFreshInstallDefaultBrowserNotSupportedThenFirstPageShowsFinalTextOnButton() {
101-
configureDeviceDoesNotSupportDefaultBrowser()
102-
val resourceId = testee.getContinueButtonTextResourceId(0, isFreshAppInstall = true)
103-
assertEquals(R.string.onboardingContinueFinalPage, resourceId)
104-
}
105-
106-
@Test
107-
fun whenNotFreshInstallDefaultBrowserSupportedThenFirstPageShowsBackTextOnButton() {
108-
configureDeviceSupportsDefaultBrowser()
109-
val resourceId = testee.getContinueButtonTextResourceId(0, isFreshAppInstall = false)
110-
assertEquals(R.string.onboardingBackButton, resourceId)
111-
}
112-
113-
@Test
114-
fun whenNotFreshInstallDefaultBrowserNotSupportedThenFirstPageShowsBackTextOnButton() {
115-
configureDeviceDoesNotSupportDefaultBrowser()
116-
val resourceId = testee.getContinueButtonTextResourceId(0, isFreshAppInstall = false)
117-
assertEquals(R.string.onboardingBackButton, resourceId)
118-
}
119-
120-
private fun configureDeviceSupportsDefaultBrowser() {
121-
whenever(mockDefaultBrowserDetector.deviceSupportsDefaultBrowserConfiguration()).thenReturn(true)
122-
}
123-
124-
private fun configureDeviceDoesNotSupportDefaultBrowser() {
125-
whenever(mockDefaultBrowserDetector.deviceSupportsDefaultBrowserConfiguration()).thenReturn(false)
126-
}
127-
12859
}

app/src/androidTest/java/com/duckduckgo/app/statistics/VariantManagerTest.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,16 @@ class VariantManagerTest {
2525
private val variants = VariantManager.ACTIVE_VARIANTS
2626

2727
@Test
28-
fun sharedControlVariantConfiguredCorrectly() {
28+
fun serpAndSharedControlVariantSuppressed() {
2929
val variant = variants.firstOrNull { it.key == "sc" }
30-
assertEqualsDouble(1.0, variant!!.weight)
30+
assertEqualsDouble(0.0, variant!!.weight)
31+
assertEquals(0, variant.features.size)
32+
}
33+
34+
@Test
35+
fun serpExperimentalVariantSuppressed() {
36+
val variant = variants.firstOrNull { it.key == "se" }
37+
assertEqualsDouble(0.0, variant!!.weight)
3138
assertEquals(0, variant.features.size)
3239
}
3340

app/src/main/java/com/duckduckgo/app/browser/rating/ui/AppEnjoymentDialogFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import android.app.Dialog
2020
import android.os.Bundle
2121
import androidx.appcompat.app.AlertDialog
2222
import com.duckduckgo.app.browser.R
23+
import com.duckduckgo.app.global.dialog.BackKeyListener
2324
import com.duckduckgo.app.global.rating.PromptCount
2425
import com.duckduckgo.app.statistics.pixels.Pixel.PixelName.*
2526

0 commit comments

Comments
 (0)