/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.weather;
import org.apache.camel.component.weather.geolocation.GeoLocation;
import org.apache.camel.component.weather.geolocation.GeoLocationProvider;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class WeatherQueryTest {
private static final String LONGITUDE = "4.13";
private static final String LATITUDE = "51.98";
private static final String APPID = "9162755b2efa555823cfe0451d7fff38";
@Mock
private GeoLocationProvider geoLocationProvider;
@Mock
private GeoLocationProvider exceptionThrowingGeoLocationProvider;
@Before
public void setup() throws Exception {
GeoLocation location = new GeoLocation(LONGITUDE, LATITUDE);
when(geoLocationProvider.getCurrentGeoLocation()).thenReturn(location);
when(exceptionThrowingGeoLocationProvider.getCurrentGeoLocation()).thenThrow(new IllegalStateException("Error in getting current location"));
}
@Test
public void testBoxedQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setLon("4");
weatherConfiguration.setLat("52");
weatherConfiguration.setRightLon("6");
weatherConfiguration.setTopLat("54");
weatherConfiguration.setZoom(8);
weatherConfiguration.setUnits(WeatherUnits.METRIC);
weatherConfiguration.setAppid(APPID);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/box/city?bbox=4,52,6,54,8&cluster=yes&lang=en&units=metric&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testBoxedStationQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setLon("4");
weatherConfiguration.setLat("52");
weatherConfiguration.setRightLon("6");
weatherConfiguration.setTopLat("54");
weatherConfiguration.setZoom(8);
weatherConfiguration.setUnits(WeatherUnits.METRIC);
weatherConfiguration.setAppid(APPID);
weatherConfiguration.setWeatherApi(WeatherApi.Station);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/box/station?bbox=4,52,6,54,8&cluster=yes&lang=en&units=metric&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testLatLonQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setLon("4");
weatherConfiguration.setLat("52");
weatherConfiguration.setMode(WeatherMode.XML);
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setAppid(APPID);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/weather?lat=52&lon=4&lang=nl&mode=xml&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testZipQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setZip("2493CJ,nl");
weatherConfiguration.setMode(WeatherMode.XML);
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setAppid(APPID);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/weather?zip=2493CJ,nl&lang=nl&mode=xml&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testSingleIdQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setIds("524901");
weatherConfiguration.setMode(WeatherMode.XML);
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setAppid(APPID);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/weather?id=524901&lang=nl&mode=xml&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testSingleIdDailyForecastQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setIds("524901");
weatherConfiguration.setMode(WeatherMode.XML);
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setAppid(APPID);
weatherConfiguration.setPeriod("20");
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/forecast/daily?id=524901&lang=nl&cnt=20&mode=xml&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testSingleIdHourlyForecastQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setIds("524901");
weatherConfiguration.setMode(WeatherMode.XML);
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setAppid(APPID);
weatherConfiguration.setWeatherApi(WeatherApi.Hourly);
weatherConfiguration.setPeriod("20");
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/forecast?id=524901&lang=nl&cnt=20&mode=xml&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testSingleIdStationQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setIds("52");
weatherConfiguration.setMode(WeatherMode.JSON);
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setAppid(APPID);
weatherConfiguration.setWeatherApi(WeatherApi.Station);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/station?id=52&lang=nl&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testMultiIdQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setIds("524901,703448");
weatherConfiguration.setMode(WeatherMode.JSON);
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setAppid(APPID);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/group?id=524901,703448&lang=nl&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testFindInCircleQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setLat(LATITUDE);
weatherConfiguration.setLon(LONGITUDE);
weatherConfiguration.setCnt(25);
weatherConfiguration.setMode(WeatherMode.JSON);
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setAppid(APPID);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/find?lat=51.98&lon=4.13&lang=nl&cnt=25&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testFindStationInCircleQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setLat(LATITUDE);
weatherConfiguration.setLon(LONGITUDE);
weatherConfiguration.setCnt(25);
weatherConfiguration.setMode(WeatherMode.JSON);
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setAppid(APPID);
weatherConfiguration.setWeatherApi(WeatherApi.Station);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/station/find?lat=51.98&lon=4.13&lang=nl&cnt=25&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testCurrentLocationQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setMode(WeatherMode.XML);
weatherConfiguration.setPeriod("3");
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setUnits(WeatherUnits.IMPERIAL);
weatherConfiguration.setAppid(APPID);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/forecast/daily?lat=51.98&lon=4.13&lang=nl&cnt=3&units=imperial&mode=xml&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testCurrentLocationHourlyQuery() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setMode(WeatherMode.XML);
weatherConfiguration.setPeriod("3");
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setUnits(WeatherUnits.IMPERIAL);
weatherConfiguration.setAppid(APPID);
weatherConfiguration.setWeatherApi(WeatherApi.Hourly);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/forecast?lat=51.98&lon=4.13&lang=nl&cnt=3&units=imperial&mode=xml&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testCurrentLocationQuery2() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setMode(WeatherMode.XML);
weatherConfiguration.setLocation("current");
weatherConfiguration.setPeriod("3");
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setUnits(WeatherUnits.IMPERIAL);
weatherConfiguration.setAppid(APPID);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/forecast/daily?lat=51.98&lon=4.13&lang=nl&cnt=3&units=imperial&mode=xml&APPID=9162755b2efa555823cfe0451d7fff38"));
}
@Test
public void testGivenLocation() throws Exception {
WeatherConfiguration weatherConfiguration = new WeatherConfiguration(new WeatherComponent());
weatherConfiguration.setMode(WeatherMode.XML);
weatherConfiguration.setLocation("Scheveningen,NL");
weatherConfiguration.setLanguage(WeatherLanguage.nl);
weatherConfiguration.setUnits(WeatherUnits.IMPERIAL);
weatherConfiguration.setAppid(APPID);
WeatherQuery weatherQuery = new WeatherQuery(weatherConfiguration);
weatherQuery.setGeoLocationProvider(geoLocationProvider);
String query = weatherQuery.getQuery();
assertThat(query, is("http://api.openweathermap.org/data/2.5/weather?q=Scheveningen,NL&lang=nl&units=imperial&mode=xml&APPID=9162755b2efa555823cfe0451d7fff38"));
}
}