package com.mobify.astro.plugins;

import android.widget.ImageView;
import android.widget.RelativeLayout;

import com.mobify.astro.ActivityTestBase;
import com.mobify.astro.PluginResolver;
import com.mobify.astro.messaging.EventManager;
import com.mobify.astro.messaging.MessageSender;
import com.mobify.astro.messaging.RpcResponse;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

public class ImageViewPluginTest extends ActivityTestBase {
    private ImageViewPlugin imageViewPlugin;
    private MessageSender mockMessageSender;

    private static final String TEST_IMAGE_PATH = "test-image.png";

    @Before
    public void setup() {
        PluginResolver mockPluginResolver = Mockito.mock(PluginResolver.class);
        EventManager mockEventManager = mock(EventManager.class);
        mockMessageSender = mock(MessageSender.class);
        imageViewPlugin = new ImageViewPlugin(getActivity(), mockPluginResolver, mockEventManager, mockMessageSender);
    }

    @Test
    public void testSetupImageView() throws Exception {
        ImageView imageView = imageViewPlugin.setUpImageView();

        RelativeLayout.LayoutParams layoutParams;
        layoutParams = (RelativeLayout.LayoutParams)imageView.getLayoutParams();
        assert(layoutParams instanceof RelativeLayout.LayoutParams);

        // Rules that have not been set will have a value of 0
        // http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html#getRules()
        assertEquals(-1, layoutParams.getRules()[RelativeLayout.CENTER_IN_PARENT]);

        // Scale type Center
        assertEquals(ImageView.ScaleType.CENTER, imageView.getScaleType());
    }

    @Test
    public void testImageViewCreationOnInstantiation() {
        // ImageView has been created
        assertNotNull(imageViewPlugin.imageView);

        // Drawable has not been created
        assertNull(imageViewPlugin.imageView.getDrawable());
    }

    @Test
    public void testSetImagePath() throws Exception {
        RpcResponse response = Mockito.mock(RpcResponse.class);

        imageViewPlugin.setImagePath(response, "file:///" + TEST_IMAGE_PATH);

        verify(mockMessageSender, Mockito.timeout(1000)).sendRpcResponse(response);
    }
}
