Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 117 additions & 0 deletions src/test/java/hse/java/restcountries/RestCounties.java
Original file line number Diff line number Diff line change
@@ -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"));
}
}