package cz.habarta.typescript.generator.ext;
import cz.habarta.typescript.generator.Input;
import cz.habarta.typescript.generator.JaxrsApplicationTest;
import cz.habarta.typescript.generator.JaxrsNamespacing;
import cz.habarta.typescript.generator.Settings;
import cz.habarta.typescript.generator.TestUtils;
import cz.habarta.typescript.generator.TypeScriptFileType;
import cz.habarta.typescript.generator.TypeScriptGenerator;
import cz.habarta.typescript.generator.TypeScriptOutputKind;
import org.junit.Assert;
import org.junit.Test;
public class AxiosClientExtensionTest {
@Test
public void test() {
final Settings settings = TestUtils.settings();
settings.outputFileType = TypeScriptFileType.implementationFile;
settings.outputKind = TypeScriptOutputKind.module;
settings.generateJaxrsApplicationClient = true;
settings.jaxrsNamespacing = JaxrsNamespacing.perResource;
settings.extensions.add(new AxiosClientExtension());
final String output = new TypeScriptGenerator(settings).generateTypeScript(Input.from(JaxrsApplicationTest.OrganizationApplication.class));
final String errorMessage = "Unexpected output: " + output;
Assert.assertTrue(errorMessage, output.contains("interface Organization"));
Assert.assertTrue(errorMessage, output.contains("interface Address"));
Assert.assertTrue(errorMessage, output.contains("interface Person"));
Assert.assertTrue(errorMessage, output.contains("interface HttpClient"));
Assert.assertTrue(errorMessage, output.contains("class OrganizationsResourceClient<O>"));
Assert.assertTrue(errorMessage, output.contains("class PersonResourceClient<O>"));
Assert.assertTrue(errorMessage, output.contains("type RestResponse<R> = Promise<Axios.GenericAxiosResponse<R>>"));
Assert.assertTrue(errorMessage, output.contains("class AxiosHttpClient implements HttpClient<Axios.AxiosRequestConfig>"));
Assert.assertTrue(errorMessage, output.contains("request(requestConfig: { method: string; url: string; queryParams?: any; data?: any; options?: Axios.AxiosRequestConfig; }): RestResponse<any>"));
Assert.assertTrue(errorMessage, output.contains("class AxiosOrganizationsResourceClient extends OrganizationsResourceClient<Axios.AxiosRequestConfig>"));
Assert.assertTrue(errorMessage, output.contains("class AxiosPersonResourceClient extends PersonResourceClient<Axios.AxiosRequestConfig>"));
Assert.assertTrue(errorMessage, output.contains("constructor(baseURL: string, axiosInstance: Axios.AxiosInstance = axios.create())"));
}
}