001package edu.pdx.cs.joy.airlineweb;
002
003import edu.pdx.cs.joy.ParserException;
004import edu.pdx.cs.joy.web.HttpRequestHelper;
005import org.junit.jupiter.api.Test;
006
007import java.io.IOException;
008import java.io.StringWriter;
009import java.util.Map;
010
011import static org.hamcrest.MatcherAssert.assertThat;
012import static org.hamcrest.Matchers.equalTo;
013import static org.mockito.ArgumentMatchers.eq;
014import static org.mockito.Mockito.mock;
015import static org.mockito.Mockito.when;
016
017/**
018 * A unit test for the REST client that demonstrates using mocks and
019 * dependency injection
020 */
021public class AirlineRestClientTest {
022
023  @Test
024  void getAllDictionaryEntriesPerformsHttpGetWithNoParameters() throws ParserException, IOException {
025    Map<String, String> dictionary = Map.of("One", "1", "Two", "2");
026
027    HttpRequestHelper http = mock(HttpRequestHelper.class);
028    when(http.get(eq(Map.of()))).thenReturn(dictionaryAsText(dictionary));
029    
030    AirlineRestClient client = new AirlineRestClient(http);
031
032    assertThat(client.getAllDictionaryEntries(), equalTo(dictionary));
033  }
034
035  private HttpRequestHelper.Response dictionaryAsText(Map<String, String> dictionary) {
036    StringWriter writer = new StringWriter();
037    new TextDumper(writer).dump(dictionary);
038
039    return new HttpRequestHelper.Response(writer.toString());
040  }
041}