package com.gisgraphy.client.addressparser;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import org.easymock.classextension.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import com.gisgraphy.addressparser.Address;
import com.gisgraphy.addressparser.AddressParserClient;
import com.gisgraphy.addressparser.AddressQuery;
import com.gisgraphy.addressparser.AddressResultsDto;
import com.gisgraphy.addressparser.exception.AddressParserException;
import com.gisgraphy.helper.BeanHelper;
import com.gisgraphy.rest.IRestClient;
import com.gisgraphy.serializer.OutputFormat;
public class AddressParserClientTest {
@Test
public void getBaseUrlShouldReturnTheConstructor(){
String baseURL="baseURL";
AddressParserClient service = new AddressParserClient(baseURL);
Assert.assertEquals(baseURL, service.getBaseURL());
}
@Test
public void defaultConstructor(){
AddressParserClient service = new AddressParserClient();
Assert.assertEquals(AddressParserClient.DEFAULT_ADDRESS_PARSER_BASE_URL, service.getBaseURL());
}
@Test
public void execute(){
final String url = "URL";
final IRestClient mockRestClient = EasyMock.createMock(IRestClient.class);
EasyMock.expect(mockRestClient.get(url, AddressResultsDto.class, OutputFormat.JSON)).andReturn(null);
EasyMock.replay(mockRestClient);
AddressParserClient service = new AddressParserClient(){
@Override
protected IRestClient getRestClient() {
return mockRestClient;
}
@Override
protected String getUrl(AddressQuery query) {
return url;
}
};
AddressQuery query =new AddressQuery("rawAddress", "US");
service.execute(query);
EasyMock.verify(mockRestClient);
}
@Test
public void executeAndSerialize(){
final String url = "URL";
final OutputStream outputStream = new ByteArrayOutputStream();
final IRestClient mockRestClient = EasyMock.createMock(IRestClient.class);
mockRestClient.get(url, outputStream,OutputFormat.JSON);
EasyMock.replay(mockRestClient);
AddressParserClient service = new AddressParserClient(){
@Override
protected IRestClient getRestClient() {
return mockRestClient;
}
@Override
protected String getUrl(AddressQuery query) {
return url;
}
};
AddressQuery query =new AddressQuery("rawAddress", "US");
service.executeAndSerialize(query,outputStream);
EasyMock.verify(mockRestClient);
}
@Test
public void executeToString(){
final String url = "URL";
final IRestClient mockRestClient = EasyMock.createMock(IRestClient.class);
mockRestClient.get((String)EasyMock.anyObject(), (OutputStream)EasyMock.anyObject(),(OutputFormat)EasyMock.anyObject());
EasyMock.replay(mockRestClient);
AddressParserClient service = new AddressParserClient(){
@Override
protected IRestClient getRestClient() {
return mockRestClient;
}
@Override
protected String getUrl(AddressQuery query) {
return url;
}
};
AddressQuery query =new AddressQuery("rawAddress", "US");
service.executeToString(query);
EasyMock.verify(mockRestClient);
}
@Test(expected=AddressParserException.class)
public void executeWithNullQuery(){
AddressParserClient service = new AddressParserClient();
service.execute(null);
}
@Test(expected=AddressParserException.class)
public void executeAndSerializeWithNullQuery(){
AddressParserClient service = new AddressParserClient();
service.executeAndSerialize(null,new ByteArrayOutputStream());
}
@Test(expected=AddressParserException.class)
public void executeAndSerializeWithNullOutputStream(){
AddressParserClient service = new AddressParserClient();
service.executeAndSerialize(new AddressQuery("rawAddress", "us"),null);
}
@Test(expected=AddressParserException.class)
public void executeToStringWithNullQuery(){
AddressParserClient service = new AddressParserClient();
service.executeToString(null);
}
@Test
public void integrationtest(){
AddressParserClient addressParserClient =new AddressParserClient();
AddressQuery addressQuery = new AddressQuery("Wacholderweg 52a 26133 Oldenburg","de");
AddressResultsDto results = addressParserClient.execute(addressQuery);
Assert.assertNotNull(results);
Assert.assertEquals(1, results.getResult().size());
Address address= results.getResult().get(0);
Assert.assertEquals("Wacholderweg", address.getStreetName() );
Assert.assertEquals("52a", address.getHouseNumber() );
Assert.assertEquals("26133", address.getZipCode() );
Assert.assertEquals("Oldenburg", address.getCity() );
System.out.println(BeanHelper.toString(address));
}
}