// Copyright 2019 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.components.webapps;

import android.graphics.Bitmap;
import android.util.Pair;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;

import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.modelutil.PropertyModelChangeProcessor;

/**
 * Tests for the {@link AddToHomescreenViewBinder} class.
 */
@RunWith(BaseRobolectricTestRunner.class)
public class AddToHomescreenViewBinderTest {
    @Test
    public void testViewBinder() {
        AddToHomescreenDialogView view = Mockito.mock(AddToHomescreenDialogView.class);
        Bitmap icon = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888);

        // Construct the model.
        PropertyModel viewModel =
                new PropertyModel.Builder(AddToHomescreenProperties.ALL_KEYS).build();
        viewModel.set(AddToHomescreenProperties.CAN_SUBMIT, true);
        viewModel.set(AddToHomescreenProperties.ICON, new Pair<>(icon, false));
        viewModel.set(AddToHomescreenProperties.NATIVE_INSTALL_BUTTON_TEXT, "Install");
        viewModel.set(AddToHomescreenProperties.NATIVE_APP_RATING, 3.4f);
        viewModel.set(AddToHomescreenProperties.TITLE, "My App");
        viewModel.set(AddToHomescreenProperties.TYPE, AppType.NATIVE);
        viewModel.set(AddToHomescreenProperties.URL, "google.com");

        // Invoke the binder.
        PropertyModelChangeProcessor.create(viewModel, view, AddToHomescreenViewBinder::bind);

        // Verify that the binder called the right methods on the view, with the correct arguments.
        Mockito.verify(view, Mockito.times(1)).setCanSubmit(true);
        Mockito.verify(view, Mockito.times(1)).setIcon(icon, false);
        Mockito.verify(view, Mockito.times(1)).setNativeInstallButtonText("Install");
        Mockito.verify(view, Mockito.times(1)).setNativeAppRating(3.4f);
        Mockito.verify(view, Mockito.times(1)).setTitle("My App");
        Mockito.verify(view, Mockito.times(1)).setType(AppType.NATIVE);
        Mockito.verify(view, Mockito.times(1)).setUrl("google.com");
    }
}
