Skip to content

Commit 38e257c

Browse files
committed
Merge branch 'release/0.5.0'
2 parents 1d17a6b + 7be683b commit 38e257c

File tree

50 files changed

+637
-296
lines changed

Some content is hidden

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

50 files changed

+637
-296
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ apply plugin: 'kotlin-kapt'
66
apply from: '../versioning.gradle'
77

88
ext {
9-
VERSION_NAME = "0.4.0"
9+
VERSION_NAME = "0.5.0"
1010
}
1111

1212
android {

app/src/androidTest/java/com/duckduckgo/app/browser/BrowserViewModelTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,14 @@ class BrowserViewModelTest {
9999
}
100100

101101
@Test
102-
fun whenViewModelNotifiedThatUrlFocusChangedGotFocusThenViewStateIsUpdated() {
103-
testee.urlFocusChanged(true)
102+
fun whenViewModelNotifiedThatUrlGotFocusThenViewStateIsUpdated() {
103+
testee.onUrlInputStateChanged("", true)
104104
assertTrue(testee.viewState.value!!.isEditing)
105105
}
106106

107107
@Test
108-
fun whenViewModelNotifiedThatUrlFocusChangedLostFocusThenViewStateIsUpdated() {
109-
testee.urlFocusChanged(false)
108+
fun whenViewModelNotifiedThatUrlLostFocusThenViewStateIsUpdated() {
109+
testee.onUrlInputStateChanged("", false)
110110
assertFalse(testee.viewState.value!!.isEditing)
111111
}
112112

app/src/androidTest/java/com/duckduckgo/app/privacydashboard/PrivacyDashboardViewModelTest.kt

Lines changed: 0 additions & 111 deletions
This file was deleted.
Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
/*
2+
* Copyright (c) 2017 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.privacymonitor.ui
18+
19+
import android.arch.core.executor.testing.InstantTaskExecutorRule
20+
import android.arch.lifecycle.Observer
21+
import android.support.test.InstrumentationRegistry
22+
import com.duckduckgo.app.browser.R
23+
import com.duckduckgo.app.privacymonitor.HttpsStatus
24+
import com.duckduckgo.app.privacymonitor.PrivacyMonitor
25+
import com.duckduckgo.app.privacymonitor.store.PrivacySettingsStore
26+
import com.nhaarman.mockito_kotlin.mock
27+
import com.nhaarman.mockito_kotlin.whenever
28+
import org.junit.After
29+
import org.junit.Assert.*
30+
import org.junit.Before
31+
import org.junit.Rule
32+
import org.junit.Test
33+
34+
class PrivacyDashboardViewModelTest {
35+
36+
@get:Rule
37+
@Suppress("unused")
38+
var instantTaskExecutorRule = InstantTaskExecutorRule()
39+
40+
private lateinit var viewStateObserver: Observer<PrivacyDashboardViewModel.ViewState>
41+
private lateinit var monitor: PrivacyMonitor
42+
private lateinit var settingStore: PrivacySettingsStore
43+
44+
private val testee: PrivacyDashboardViewModel by lazy {
45+
val model = PrivacyDashboardViewModel(InstrumentationRegistry.getTargetContext(), settingStore)
46+
model.viewState.observeForever(viewStateObserver)
47+
model
48+
}
49+
50+
@Before
51+
fun before() {
52+
viewStateObserver = mock()
53+
monitor = mock()
54+
settingStore = mock()
55+
whenever(monitor.https).thenReturn(HttpsStatus.SECURE)
56+
}
57+
58+
@After
59+
fun after() {
60+
testee.viewState.removeObserver(viewStateObserver)
61+
settingStore = mock()
62+
}
63+
64+
@Test
65+
fun whenPrivacyInitiallyOnAndSwitchedOffThenShouldReloadIsTrue() {
66+
whenever(settingStore.privacyOn)
67+
.thenReturn(true)
68+
.thenReturn(false)
69+
assertTrue(testee.shouldReloadPage)
70+
}
71+
72+
@Test
73+
fun whenPrivacyInitiallyOnAndUnchangedThenShouldReloadIsFalse() {
74+
whenever(settingStore.privacyOn).thenReturn(true)
75+
assertFalse(testee.shouldReloadPage)
76+
}
77+
78+
@Test
79+
fun whenPrivacyInitiallyOffAndSwitchedOnThenShouldReloadIsTrue() {
80+
whenever(settingStore.privacyOn)
81+
.thenReturn(false)
82+
.thenReturn(true)
83+
assertTrue(testee.shouldReloadPage)
84+
}
85+
86+
@Test
87+
fun whenPrivacyInitiallyOffAndUnchangedThenShouldReloadIsFalse() {
88+
whenever(settingStore.privacyOn).thenReturn(false)
89+
assertFalse(testee.shouldReloadPage)
90+
}
91+
92+
@Test
93+
fun whenHttpsStatusIsSecureThenTextAndIconReflectSame() {
94+
whenever(monitor.https).thenReturn(HttpsStatus.SECURE)
95+
testee.onPrivacyMonitorChanged(monitor)
96+
assertEquals(getStringResource(R.string.httpsGood), testee.viewState.value?.httpsText)
97+
assertEquals(R.drawable.dashboard_https_good, testee.viewState.value?.httpsIcon)
98+
}
99+
100+
@Test
101+
fun whenHttpsStatusIsMixedThenTextAndIconReflectSame() {
102+
whenever(monitor.https).thenReturn(HttpsStatus.MIXED)
103+
testee.onPrivacyMonitorChanged(monitor)
104+
assertEquals(getStringResource(R.string.httpsMixed), testee.viewState.value?.httpsText)
105+
assertEquals(R.drawable.dashboard_https_neutral, testee.viewState.value?.httpsIcon)
106+
}
107+
108+
@Test
109+
fun whenHttpsStatusIsNoneThenTextAndIconReflectSame() {
110+
whenever(monitor.https).thenReturn(HttpsStatus.NONE)
111+
testee.onPrivacyMonitorChanged(monitor)
112+
assertEquals(getStringResource(R.string.httpsBad), testee.viewState.value?.httpsText)
113+
assertEquals(R.drawable.dashboard_https_bad, testee.viewState.value?.httpsIcon)
114+
}
115+
116+
@Test
117+
fun whenNoTrackersNetworksThenNetworkIconIsGood() {
118+
whenever(monitor.networkCount).thenReturn(0)
119+
testee.onPrivacyMonitorChanged(monitor)
120+
assertEquals(R.drawable.dashboard_networks_good, testee.viewState.value?.networksIcon)
121+
}
122+
123+
@Test
124+
fun whenTenTrackerNetworksAndAllBlockedThenNetworkIconIsGood() {
125+
whenever(monitor.networkCount).thenReturn(10)
126+
whenever(monitor.allTrackersBlocked).thenReturn(true)
127+
testee.onPrivacyMonitorChanged(monitor)
128+
assertEquals(R.drawable.dashboard_networks_good, testee.viewState.value?.networksIcon)
129+
}
130+
131+
@Test
132+
fun whenTenTrackerNetworksAndNotAllBlockedThenNetworkIconIsBad() {
133+
whenever(monitor.networkCount).thenReturn(10)
134+
whenever(monitor.allTrackersBlocked).thenReturn(false)
135+
testee.onPrivacyMonitorChanged(monitor)
136+
assertEquals(R.drawable.dashboard_networks_bad, testee.viewState.value?.networksIcon)
137+
}
138+
139+
@Test
140+
fun whenNoMajorTrackersNetworksThenMajorNetworkIconIsGood() {
141+
whenever(monitor.majorNetworkCount).thenReturn(0)
142+
testee.onPrivacyMonitorChanged(monitor)
143+
assertEquals(R.drawable.dashboard_major_networks_good, testee.viewState.value?.majorNetworksIcon)
144+
}
145+
146+
@Test
147+
fun whenTenMajorTrackerNetworksAndAllBlockedThenMajorNetworkIconIsGood() {
148+
whenever(monitor.majorNetworkCount).thenReturn(10)
149+
whenever(monitor.allTrackersBlocked).thenReturn(true)
150+
testee.onPrivacyMonitorChanged(monitor)
151+
assertEquals(R.drawable.dashboard_major_networks_good, testee.viewState.value?.majorNetworksIcon)
152+
}
153+
154+
@Test
155+
fun whenTenMajorTrackerNetworksAndNotAllBlockedThenMajorNetworkIconIsBad() {
156+
whenever(monitor.majorNetworkCount).thenReturn(10)
157+
whenever(monitor.allTrackersBlocked).thenReturn(false)
158+
testee.onPrivacyMonitorChanged(monitor)
159+
assertEquals(R.drawable.dashboard_major_networks_bad, testee.viewState.value?.majorNetworksIcon)
160+
}
161+
162+
@Test
163+
fun whenNoTrackerNetworksThenNetworkTextShowsZeroBlocked() {
164+
whenever(monitor.networkCount).thenReturn(0)
165+
whenever(monitor.allTrackersBlocked).thenReturn(true)
166+
testee.onPrivacyMonitorChanged(monitor)
167+
assertEquals("0 Tracker Networks Blocked", testee.viewState.value?.networksText)
168+
}
169+
170+
@Test
171+
fun whenTenTrackerNetworksAndAllBlockedThenNetworkTextShowsTenBlocked() {
172+
whenever(monitor.networkCount).thenReturn(10)
173+
whenever(monitor.allTrackersBlocked).thenReturn(true)
174+
testee.onPrivacyMonitorChanged(monitor)
175+
assertEquals("10 Tracker Networks Blocked", testee.viewState.value?.networksText)
176+
}
177+
178+
@Test
179+
fun whenTenTrackersNetworksAndNotAllBlockedThenNetworkTextShowsTenFound() {
180+
whenever(monitor.networkCount).thenReturn(10)
181+
whenever(monitor.allTrackersBlocked).thenReturn(false)
182+
testee.onPrivacyMonitorChanged(monitor)
183+
assertEquals("10 Tracker Networks Found", testee.viewState.value?.networksText)
184+
}
185+
186+
@Test
187+
fun whenNoMajorTrackersNetworksThenMajorNetworkTextShowsZeroBlocked() {
188+
whenever(monitor.majorNetworkCount).thenReturn(0)
189+
whenever(monitor.allTrackersBlocked).thenReturn(true)
190+
testee.onPrivacyMonitorChanged(monitor)
191+
assertEquals("0 Major Tracker Networks Blocked", testee.viewState.value?.majorNetworksText)
192+
}
193+
194+
@Test
195+
fun whenTenMajorTrackerNetworksAndAllBlockedThenMajorNetworkTextShowsTenBlocked() {
196+
whenever(monitor.majorNetworkCount).thenReturn(10)
197+
whenever(monitor.allTrackersBlocked).thenReturn(true)
198+
testee.onPrivacyMonitorChanged(monitor)
199+
assertEquals("10 Major Tracker Networks Blocked", testee.viewState.value?.majorNetworksText)
200+
}
201+
202+
@Test
203+
fun whenTenMajorTrackerNetworksAndNotAllBlockedThenMajorNetworkTextShowsTenFound() {
204+
whenever(monitor.majorNetworkCount).thenReturn(10)
205+
whenever(monitor.allTrackersBlocked).thenReturn(false)
206+
testee.onPrivacyMonitorChanged(monitor)
207+
assertEquals("10 Major Tracker Networks Found", testee.viewState.value?.majorNetworksText)
208+
}
209+
210+
@Test
211+
fun whenNoDataThenDefaultValuesAreUsed() {
212+
val viewState = testee.viewState.value!!
213+
assertEquals(getStringResource(R.string.httpsGood), viewState.httpsText)
214+
assertEquals(R.drawable.dashboard_networks_good, testee.viewState.value?.networksIcon)
215+
assertEquals("0 Tracker Networks Blocked", testee.viewState.value?.networksText)
216+
assertEquals(R.drawable.dashboard_major_networks_good, testee.viewState.value?.majorNetworksIcon)
217+
assertEquals("0 Major Tracker Networks Blocked", testee.viewState.value?.majorNetworksText)
218+
}
219+
220+
private fun getStringResource(id: Int): String =
221+
InstrumentationRegistry.getTargetContext().getString(id)
222+
}

0 commit comments

Comments
 (0)