package com.googlecode.jmeter.plugins.webdriver.sampler.gui;

import com.googlecode.jmeter.plugins.webdriver.sampler.WebDriverSampler;
import kg.apc.emulators.TestJMeterUtils;
import org.apache.jmeter.gui.JMeterGUIComponent;
import org.hamcrest.CoreMatchers;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class WebDriverSamplerGuiTest {

    private WebDriverSamplerGui gui;

    @BeforeClass
    public static void setupJMeterEnv() {
        TestJMeterUtils.createJmeterEnv();
    }

    @Before
    public void createGui() {
        gui = new WebDriverSamplerGui();
    }

    @Test
    public void shouldImplementJMeterGUIComponent() {
        assertThat(gui, is(CoreMatchers.instanceOf(JMeterGUIComponent.class)));
    }

    @Test
    public void shouldReturnStaticLabel() {
        assertThat(gui.getStaticLabel(), containsString("WebDriver Sampler"));
    }

    @Test
    public void shouldReturnCanonicalClassNameAsLabelResource() {
        assertThat(gui.getLabelResource(), is(gui.getClass().getCanonicalName()));
    }

    @Test
    public void shouldSetParameters() {
        gui.parameters.setText("parameter1 parameter2");
        final WebDriverSampler testElement = (WebDriverSampler) gui.createTestElement();
        assertThat(testElement.getParameters(), is("parameter1 parameter2"));
    }

    @Test
    public void shouldSetScript() {
        gui.script.setText("some script");
        final WebDriverSampler testElement = (WebDriverSampler) gui.createTestElement();
        assertThat(testElement.getScript(), is("some script"));
    }

    @Test
    public void shouldResetValuesOnClearGui() {
        gui.script.setText("script");
        gui.parameters.setText("p1 p2");

        gui.clearGui();

        assertThat(gui.script.getText(), is(WebDriverSampler.defaultScript));
        assertThat(gui.parameters.getText(), is(""));
        assertThat((String) gui.languages.getSelectedItem(), is(WebDriverSampler.DEFAULT_ENGINE));
    }

    @Test
    public void shouldSetValuesOnConfigure() {
        WebDriverSampler sampler = new WebDriverSampler();
        sampler.setParameters("param1 param2");
        sampler.setScript("var script;");

        gui.configure(sampler);

        assertThat(gui.script.getText(), is(sampler.getScript()));
        assertThat(gui.parameters.getText(), is(sampler.getParameters()));
    }
}