@@ -21,7 +21,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
21
21
import com.duckduckgo.common.test.CoroutineTestRule
22
22
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection
23
23
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.Feed.PHISHING
24
+ import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.Feed.SCAM
24
25
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.IsMaliciousResult.ConfirmedResult
26
+ import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.MaliciousStatus
25
27
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.MaliciousStatus.Ignored
26
28
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.MaliciousStatus.Malicious
27
29
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.MaliciousStatus.Safe
@@ -79,7 +81,7 @@ class RealMaliciousSiteProtectionTest {
79
81
val hash = messageDigest.digest(hostname.toByteArray()).joinToString(" " ) { " %02x" .format(it) }
80
82
val hashPrefix = hash.substring(0 , 8 )
81
83
82
- whenever(mockMaliciousSiteRepository.containsHashPrefix (hashPrefix)).thenReturn(false )
84
+ whenever(mockMaliciousSiteRepository.getFeedForHashPrefix (hashPrefix)).thenReturn(null )
83
85
84
86
val result = realMaliciousSiteProtection.isMalicious(url) {}
85
87
@@ -94,7 +96,7 @@ class RealMaliciousSiteProtectionTest {
94
96
val hashPrefix = hash.substring(0 , 8 )
95
97
val filter = Filter (hash, " .*malicious.*" )
96
98
97
- whenever(mockMaliciousSiteRepository.containsHashPrefix (hashPrefix)).thenReturn(true )
99
+ whenever(mockMaliciousSiteRepository.getFeedForHashPrefix (hashPrefix)).thenReturn(PHISHING )
98
100
whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(
99
101
listOf (
100
102
FilterSet (
@@ -109,6 +111,30 @@ class RealMaliciousSiteProtectionTest {
109
111
assertEquals(ConfirmedResult (Malicious (PHISHING )), result)
110
112
}
111
113
114
+ @Test
115
+ fun isMalicious_returnsIgnored_whenUrlIsScamButScamProtectionDisabled () = runTest {
116
+ val url = Uri .parse(" https://malicious.com" )
117
+ val hostname = url.host!!
118
+ val hash = messageDigest.digest(hostname.toByteArray()).joinToString(" " ) { " %02x" .format(it) }
119
+ val hashPrefix = hash.substring(0 , 8 )
120
+ val filter = Filter (hash, " .*malicious.*" )
121
+
122
+ whenever(mockMaliciousSiteProtectionRCFeature.scamProtectionEnabled()).thenReturn(false )
123
+ whenever(mockMaliciousSiteRepository.getFeedForHashPrefix(hashPrefix)).thenReturn(SCAM )
124
+ whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(
125
+ listOf (
126
+ FilterSet (
127
+ listOf (filter),
128
+ SCAM ,
129
+ ),
130
+ ),
131
+ )
132
+
133
+ val result = realMaliciousSiteProtection.isMalicious(url) {}
134
+
135
+ assertEquals(ConfirmedResult (Ignored ), result)
136
+ }
137
+
112
138
@Test
113
139
fun isMalicious_returnsIgnored_whenUrlIsMaliciousButRCFeatureDisabled () = runTest {
114
140
val url = Uri .parse(" https://malicious.com" )
@@ -117,7 +143,7 @@ class RealMaliciousSiteProtectionTest {
117
143
val hashPrefix = hash.substring(0 , 8 )
118
144
val filter = Filter (hash, " .*malicious.*" )
119
145
120
- whenever(mockMaliciousSiteRepository.containsHashPrefix (hashPrefix)).thenReturn(true )
146
+ whenever(mockMaliciousSiteRepository.getFeedForHashPrefix (hashPrefix)).thenReturn(PHISHING )
121
147
whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(listOf (FilterSet (listOf (filter), PHISHING )))
122
148
whenever(mockMaliciousSiteProtectionRCFeature.isFeatureEnabled()).thenReturn(false )
123
149
@@ -134,7 +160,7 @@ class RealMaliciousSiteProtectionTest {
134
160
val hashPrefix = hash.substring(0 , 8 )
135
161
val filter = Filter (hash, " .*malicious.*" )
136
162
137
- whenever(mockMaliciousSiteRepository.containsHashPrefix (hashPrefix)).thenReturn(true )
163
+ whenever(mockMaliciousSiteRepository.getFeedForHashPrefix (hashPrefix)).thenReturn(PHISHING )
138
164
whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(listOf (FilterSet (listOf (filter), PHISHING )))
139
165
whenever(mockMaliciousSiteProtectionRCRepository.isExempted(hostname)).thenReturn(true )
140
166
@@ -151,7 +177,7 @@ class RealMaliciousSiteProtectionTest {
151
177
val hashPrefix = hash.substring(0 , 8 )
152
178
val filter = Filter (hash, " .*unsafe.*" )
153
179
154
- whenever(mockMaliciousSiteRepository.containsHashPrefix (hashPrefix)).thenReturn(true )
180
+ whenever(mockMaliciousSiteRepository.getFeedForHashPrefix (hashPrefix)).thenReturn(PHISHING )
155
181
whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(listOf (FilterSet (listOf (filter), PHISHING )))
156
182
157
183
val result = realMaliciousSiteProtection.isMalicious(url) {}
@@ -168,7 +194,7 @@ class RealMaliciousSiteProtectionTest {
168
194
val filter = Filter (hash, " .*whatever.*" )
169
195
var onSiteBlockedAsyncCalled = false
170
196
171
- whenever(mockMaliciousSiteRepository.containsHashPrefix (hashPrefix)).thenReturn(true )
197
+ whenever(mockMaliciousSiteRepository.getFeedForHashPrefix (hashPrefix)).thenReturn(PHISHING )
172
198
whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(listOf (FilterSet (listOf (filter), PHISHING )))
173
199
whenever(mockMaliciousSiteRepository.matches(hashPrefix.substring(0 , 4 )))
174
200
.thenReturn(Result (listOf (Match (hostname, url.toString(), " .*malicious.*" , hash, PHISHING ))))
@@ -179,4 +205,29 @@ class RealMaliciousSiteProtectionTest {
179
205
180
206
assertTrue(onSiteBlockedAsyncCalled)
181
207
}
208
+
209
+ @Test
210
+ fun isMalicious_InvokesOnSiteBlockedAsyncWithIgnored_whenUrlIsScamAndNeedsToGoToNetworkButScamProtectionIsDisabled () = runTest {
211
+ val url = Uri .parse(" https://malicious.com" )
212
+ val hostname = url.host!!
213
+ val hash = messageDigest.digest(hostname.toByteArray()).joinToString(" " ) { " %02x" .format(it) }
214
+ val hashPrefix = hash.substring(0 , 8 )
215
+ val filter = Filter (hash, " .*whatever.*" )
216
+ var onSiteBlockedAsyncCalled = false
217
+ var maliciousStatus: MaliciousStatus ? = null
218
+
219
+ whenever(mockMaliciousSiteProtectionRCFeature.scamProtectionEnabled()).thenReturn(false )
220
+ whenever(mockMaliciousSiteRepository.getFeedForHashPrefix(hashPrefix)).thenReturn(PHISHING )
221
+ whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(listOf (FilterSet (listOf (filter), PHISHING )))
222
+ whenever(mockMaliciousSiteRepository.matches(hashPrefix.substring(0 , 4 )))
223
+ .thenReturn(Result (listOf (Match (hostname, url.toString(), " .*malicious.*" , hash, SCAM ))))
224
+
225
+ realMaliciousSiteProtection.isMalicious(url) { status: MaliciousStatus ->
226
+ onSiteBlockedAsyncCalled = true
227
+ maliciousStatus = status
228
+ }
229
+
230
+ assertTrue(onSiteBlockedAsyncCalled)
231
+ assertEquals(Ignored , maliciousStatus)
232
+ }
182
233
}
0 commit comments