chromium/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelperUnitTest.java

// Copyright 2024 The Chromium Authors
// 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.user_education;

import android.app.Activity;
import android.os.Handler;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.shadows.ShadowLooper;

import org.chromium.base.ContextUtils;
import org.chromium.base.supplier.ObservableSupplierImpl;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.components.feature_engagement.Tracker;

/** Tests for {@link UserEducationHelper}. */
@RunWith(BaseRobolectricTestRunner.class)
public class UserEducationHelperUnitTest {
    public @Rule MockitoRule mMockitoRule = MockitoJUnit.rule();

    private IPHCommand mTestIPHCommand1;

    @Mock private Tracker mTracker;
    @Mock private Profile mProfile;

    @Before
    public void setUp() {
        Mockito.when(mProfile.getOriginalProfile()).thenReturn(mProfile);
        mTestIPHCommand1 =
                new IPHCommandBuilder(
                                ContextUtils.getApplicationContext().getResources(), "TEST", 1, 1)
                        .build();
    }

    @Test
    public void testConstructor_ProfileSupplier_DelayedInit() {
        TrackerFactory.setTrackerForTests(mTracker);
        ObservableSupplierImpl<Profile> profileSupplier = new ObservableSupplierImpl<>();
        UserEducationHelper educationHelper =
                new UserEducationHelper(new Activity(), profileSupplier, new Handler());
        educationHelper.requestShowIPH(mTestIPHCommand1);

        Mockito.verifyNoInteractions(mTracker);
        profileSupplier.set(mProfile);
        ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
        Mockito.verify(mTracker).addOnInitializedCallback(Mockito.any());
    }

    @Test
    public void testConstructor_ProfileSupplier_EarlyInit() {
        TrackerFactory.setTrackerForTests(mTracker);
        ObservableSupplierImpl<Profile> profileSupplier = new ObservableSupplierImpl<>();
        profileSupplier.set(mProfile);
        UserEducationHelper educationHelper =
                new UserEducationHelper(new Activity(), profileSupplier, new Handler());
        educationHelper.requestShowIPH(mTestIPHCommand1);
        Mockito.verify(mTracker).addOnInitializedCallback(Mockito.any());
    }

    @Test
    public void testConstructor_Profile() {
        TrackerFactory.setTrackerForTests(mTracker);
        UserEducationHelper educationHelper =
                new UserEducationHelper(new Activity(), mProfile, new Handler());
        educationHelper.requestShowIPH(mTestIPHCommand1);
        Mockito.verify(mTracker).addOnInitializedCallback(Mockito.any());
    }
}