blob: 681388e2e1445c93c45bc2df14ac2e09a21098c1 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.safety_check;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.chromium.base.Callback;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.password_check.BulkLeakCheckServiceState;
import org.chromium.chrome.browser.safety_check.SafetyCheckProperties.PasswordsState;
import org.chromium.chrome.browser.safety_check.SafetyCheckProperties.SafeBrowsingState;
import org.chromium.chrome.browser.safety_check.SafetyCheckProperties.UpdatesState;
import org.chromium.ui.modelutil.PropertyModel;
import java.lang.ref.WeakReference;
/** Unit tests for {@link SafetyCheckMediator}. */
@RunWith(BaseRobolectricTestRunner.class)
public class SafetyCheckMediatorTest {
private PropertyModel mModel;
@Mock
private SafetyCheckUpdatesDelegate mUpdatesDelegate;
@Mock
private SafetyCheckBridge mBridge;
private SafetyCheckMediator mMediator;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mModel = SafetyCheckProperties.createSafetyCheckModel();
mMediator = new SafetyCheckMediator(mModel, mUpdatesDelegate, mBridge);
}
@Test
public void testUpdatesCheckUpdated() {
doAnswer(invocation -> {
Callback<Integer> callback =
((WeakReference<Callback<Integer>>) invocation.getArguments()[0]).get();
callback.onResult(UpdatesState.UPDATED);
return null;
})
.when(mUpdatesDelegate)
.checkForUpdates(any(WeakReference.class));
mMediator.performSafetyCheck();
assertEquals(UpdatesState.UPDATED, mModel.get(SafetyCheckProperties.UPDATES_STATE));
}
@Test
public void testUpdatesCheckOutdated() {
doAnswer(invocation -> {
Callback<Integer> callback =
((WeakReference<Callback<Integer>>) invocation.getArguments()[0]).get();
callback.onResult(UpdatesState.OUTDATED);
return null;
})
.when(mUpdatesDelegate)
.checkForUpdates(any(WeakReference.class));
mMediator.performSafetyCheck();
assertEquals(UpdatesState.OUTDATED, mModel.get(SafetyCheckProperties.UPDATES_STATE));
}
@Test
public void testSafeBrowsingCheckEnabledStandard() {
doAnswer(invocation -> {
mMediator.onSafeBrowsingCheckResult(SafeBrowsingStatus.ENABLED_STANDARD);
return null;
})
.when(mBridge)
.checkSafeBrowsing();
mMediator.performSafetyCheck();
assertEquals(SafeBrowsingState.ENABLED_STANDARD,
mModel.get(SafetyCheckProperties.SAFE_BROWSING_STATE));
}
@Test
public void testSafeBrowsingCheckDisabled() {
doAnswer(invocation -> {
mMediator.onSafeBrowsingCheckResult(SafeBrowsingStatus.DISABLED);
return null;
})
.when(mBridge)
.checkSafeBrowsing();
mMediator.performSafetyCheck();
assertEquals(
SafeBrowsingState.DISABLED, mModel.get(SafetyCheckProperties.SAFE_BROWSING_STATE));
}
@Test
public void testPasswordsCheckError() {
doAnswer(invocation -> {
mMediator.onPasswordCheckStateChange(BulkLeakCheckServiceState.SERVICE_ERROR);
return null;
})
.when(mBridge)
.checkPasswords();
mMediator.performSafetyCheck();
assertEquals(PasswordsState.ERROR, mModel.get(SafetyCheckProperties.PASSWORDS_STATE));
}
@Test
public void testPasswordsCheckNoPasswords() {
doAnswer(invocation -> {
mMediator.onPasswordCheckStateChange(BulkLeakCheckServiceState.IDLE);
return null;
})
.when(mBridge)
.checkPasswords();
when(mBridge.savedPasswordsExist()).thenReturn(false);
mMediator.performSafetyCheck();
assertEquals(
PasswordsState.NO_PASSWORDS, mModel.get(SafetyCheckProperties.PASSWORDS_STATE));
}
@Test
public void testPasswordsCheckNoLeaks() {
doAnswer(invocation -> {
mMediator.onPasswordCheckStateChange(BulkLeakCheckServiceState.IDLE);
return null;
})
.when(mBridge)
.checkPasswords();
when(mBridge.savedPasswordsExist()).thenReturn(true);
when(mBridge.getNumberOfPasswordLeaksFromLastCheck()).thenReturn(0);
mMediator.performSafetyCheck();
assertEquals(PasswordsState.SAFE, mModel.get(SafetyCheckProperties.PASSWORDS_STATE));
}
@Test
public void testPasswordsCheckHasLeaks() {
doAnswer(invocation -> {
mMediator.onPasswordCheckStateChange(BulkLeakCheckServiceState.IDLE);
return null;
})
.when(mBridge)
.checkPasswords();
when(mBridge.savedPasswordsExist()).thenReturn(true);
when(mBridge.getNumberOfPasswordLeaksFromLastCheck()).thenReturn(123);
mMediator.performSafetyCheck();
assertEquals(PasswordsState.COMPROMISED_EXIST,
mModel.get(SafetyCheckProperties.PASSWORDS_STATE));
}
}