package com.github.dreamhead.moco.runner; import com.github.dreamhead.moco.bootstrap.arg.StartArgs; import com.github.dreamhead.moco.helper.MocoTestHelper; import org.apache.http.Header; import org.apache.http.client.HttpResponseException; import org.junit.After; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import static com.github.dreamhead.moco.bootstrap.arg.HttpArgs.httpArgs; import static com.github.dreamhead.moco.helper.RemoteTestUtils.remoteUrl; import static com.google.common.collect.ImmutableMultimap.of; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; public class SettingRunnerTest { private final MocoTestHelper helper = new MocoTestHelper(); private SettingRunner runner; private InputStream stream; @After public void tearDown() throws IOException { if (runner != null) { runner.stop(); } if (stream != null) { stream.close(); stream = null; } } @Test public void should_run_with_setting() throws IOException { stream = getResourceAsStream("settings/settings.json"); runner = new SettingRunner(stream, createStartArgs(12306)); runner.run(); assertThat(helper.get(remoteUrl("/foo")), is("foo")); assertThat(helper.get(remoteUrl("/bar")), is("bar")); } @Test public void should_run_with_setting_with_context() throws IOException { stream = getResourceAsStream("settings/context-settingss.json"); runner = new SettingRunner(stream, createStartArgs(12306)); runner.run(); assertThat(helper.get(remoteUrl("/foo/foo")), is("foo")); assertThat(helper.get(remoteUrl("/bar/bar")), is("bar")); } @Test public void should_run_with_setting_with_file_root() throws IOException { stream = getResourceAsStream("settings/fileroot-settings.json"); runner = new SettingRunner(stream, createStartArgs(12306)); runner.run(); assertThat(helper.get(remoteUrl("/fileroot/fileroot")), is("foo.response")); } @Test public void should_run_with_env() throws IOException { stream = getResourceAsStream("settings/env-settings.json"); runner = new SettingRunner(stream, createStartArgs(12306, "foo")); runner.run(); assertThat(helper.get(remoteUrl("/foo/foo")), is("foo")); } @Test(expected = HttpResponseException.class) public void should_not_run_without_env() throws IOException { stream = getResourceAsStream("settings/env-settings.json"); runner = new SettingRunner(stream, createStartArgs(12306, "bar")); runner.run(); helper.get(remoteUrl("/foo/foo")); } @Test public void should_run_with_global_response_settings() throws IOException { stream = getResourceAsStream("settings/response-settings.json"); runner = new SettingRunner(stream, createStartArgs(12306)); runner.run(); Header header = helper.getResponse(remoteUrl("/foo")).getFirstHeader("foo"); assertThat(header.getValue(), is("bar")); } @Test public void should_run_with_global_request_settings() throws IOException { stream = getResourceAsStream("settings/request-settings.json"); runner = new SettingRunner(stream, createStartArgs(12306)); runner.run(); assertThat(helper.getWithHeader(remoteUrl("/foo"), of("foo", "bar")), is("foo")); } @Test(expected = HttpResponseException.class) public void should_throw_exception_without_global_request_settings() throws IOException { stream = getResourceAsStream("settings/request-settings.json"); runner = new SettingRunner(stream, createStartArgs(12306)); runner.run(); helper.get(remoteUrl("/foo")); } private StartArgs createStartArgs(final int port, final String env) { return httpArgs().withPort(port).withEnv(env).build(); } private StartArgs createStartArgs(final int port) { return httpArgs().withPort(port).build(); } private InputStream getResourceAsStream(final String filename) { return SettingRunnerTest.class.getClassLoader().getResourceAsStream(filename); } }