diff --git a/src/test/java/hse/java/restcountries/RestCounties.java b/src/test/java/hse/java/restcountries/RestCounties.java new file mode 100644 index 0000000..b2e3cff --- /dev/null +++ b/src/test/java/hse/java/restcountries/RestCounties.java @@ -0,0 +1,117 @@ +package hse.java.restcountries; + +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +class RestCountries { + + static final String BASE_URL = "https://restcountries.com/v3.1"; + static HttpClient client; + + @BeforeAll + static void setUp() { + client = HttpClient.newHttpClient(); + } + + // 1. + @Test + void getAllReturns200AndNotEmpty() throws Exception { + var request = HttpRequest.newBuilder() + .uri(URI.create(BASE_URL + "/all?fields=name")) + .build(); + var response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + assertEquals(200, response.statusCode()); + assertFalse(response.body().isEmpty()); + } + + // 2 + @Test + void russiaHasCapitalMoscow() throws Exception { + var request = HttpRequest.newBuilder() + .uri(URI.create(BASE_URL + "/name/russia")) + .build(); + var response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + assertEquals(200, response.statusCode()); + assertTrue(response.body().contains("Moscow")); + } + + // 3. + @Test + void alphaDeReturnsGermany() throws Exception { + var request = HttpRequest.newBuilder() + .uri(URI.create(BASE_URL + "/alpha/de")) + .build(); + var response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + assertEquals(200, response.statusCode()); + assertTrue(response.body().contains("Germany")); + } + + // 4. + @Test + void nonExistentCountryReturns404() throws Exception { + var request = HttpRequest.newBuilder() + .uri(URI.create(BASE_URL + "/name/nonexistentcountryxyz")) + .build(); + var response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + assertEquals(404, response.statusCode()); + } + + // 5 + @Test + void allCountriesHaveValidPopulation() throws Exception { + var request = HttpRequest.newBuilder() + .uri(URI.create(BASE_URL + "/all?fields=name,population")) + .build(); + var response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + assertEquals(200, response.statusCode()); + + ObjectMapper mapper = new ObjectMapper(); + JsonNode countries = mapper.readTree(response.body()); + + for (JsonNode country : countries) { + long population = country.path("population").asLong(); + assertTrue(population >= 0, "Expect >= 0"); + } + } + + // 6. + @Test + void countriesWithUsdCurrencyNotEmpty() throws Exception { + var request = HttpRequest.newBuilder() + .uri(URI.create(BASE_URL + "/currency/usd")) + .build(); + var response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + assertEquals(200, response.statusCode()); + assertFalse(response.body().isEmpty()); + } + + // 7. + @Test + void alphaFrReturnsFranceInEurope() throws Exception { + var request = HttpRequest.newBuilder() + .uri(URI.create(BASE_URL + "/alpha/fr")) + .build(); + var response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + assertEquals(200, response.statusCode()); + assertTrue(response.body().contains("France")); + assertTrue(response.body().contains("Europe")); + } +}