// Path: src/main/java/co/omise/models/Forex.java
// public class Forex extends Model {
//     private String base;
//     private String location;
//     private String quote;
//     private Double rate;
// 
//     public String getBase() {
//         return this.base;
//     }
// 
//     public void setBase(String base) {
//         this.base = base;
//     }
// 
//     public String getLocation() {
//         return this.location;
//     }
// 
//     public void setLocation(String location) {
//         this.location = location;
//     }
// 
//     public String getQuote() {
//         return this.quote;
//     }
// 
//     public void setQuote(String quote) {
//         this.quote = quote;
//     }
// 
//     public Double getRate() {
//         return this.rate;
//     }
// 
//     public void setRate(Double rate) {
//         this.rate = rate;
//     }
// 
//     public static class GetRequestBuilder extends RequestBuilder<Forex> {
//         private String currency;
//         public GetRequestBuilder(String currency) {
//             this.currency = currency;
//         }
// 
//         @Override
//         protected String method() {
//             return GET;
//         }
// 
//         @Override
//         protected HttpUrl path() {
//             return buildUrl(Endpoint.API, "forex", currency);
//         }
// 
//         @Override
//         protected ResponseType<Forex> type() {
//             return new ResponseType<>(Forex.class);
//         }
//     }
// }
// 
// Path: src/main/java/co/omise/requests/Request.java
// public class Request<T extends OmiseObjectBase> {
//     private final String method;
//     private final HttpUrl path;
//     private final String contentType;
//     private final RequestBody payload;
//     private final ResponseType<T> type;
// 
//     /**
//      * Constructor for a new Request
//      *
//      * @param method      The HTTP method to use
//      * @param path        The {@link HttpUrl} for the url path of the HTTP request
//      * @param contentType The content type of HTTP request
//      * @param payload     Additional params passed as OkHttp {@link RequestBody} to the HTTP request
//      */
//     Request(String method, HttpUrl path, String contentType, RequestBody payload, ResponseType<T> type) {
//         this.method = method;
//         this.path = path;
//         this.contentType = contentType;
//         this.payload = payload;
//         this.type = type;
//     }
// 
//     /**
//      * Gets the HTTP method.
//      *
//      * @return the HTTP method
//      */
//     public String getMethod() {
//         return method;
//     }
// 
//     /**
//      * Gets url path for the specific API in the request.
//      *
//      * @return the url path as {@link HttpUrl}
//      */
//     public HttpUrl getPath() {
//         return path;
//     }
// 
//     /**
//      * Gets HTTP request content type.
//      *
//      * @return the content type as a String
//      */
//     public String getContentType() {
//         return contentType;
//     }
// 
//     /**
//      * Gets payload (request params).
//      *
//      * @return the payload as a {@link RequestBody}
//      */
//     public RequestBody getPayload() {
//         return payload;
//     }
// 
//     public ResponseType<T> getType() {
//         return type;
//     }
// }


import co.omise.models.Forex;
import co.omise.requests.Request;
import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.*;
package co.omise.live;



public class LiveForexRequestTest extends BaseLiveTest {

    @Test
    @Ignore("only hit when test on live.")
    public void TestGetForex() throws Exception {
        Request<Forex> request = new Forex.GetRequestBuilder("usd")
                .build();

        Forex forex = getLiveClient().sendRequest(request);

        assertNotNull(forex);
        assertEquals("USD", forex.getBase());
        assertEquals("THB", forex.getQuote());
// Path: src/main/java/co/omise/models/Forex.java
// public class Forex extends Model {
//     private String base;
//     private String location;
//     private String quote;
//     private Double rate;
// 
//     public String getBase() {
//         return this.base;
//     }
// 
//     public void setBase(String base) {
//         this.base = base;
//     }
// 
//     public String getLocation() {
//         return this.location;
//     }
// 
//     public void setLocation(String location) {
//         this.location = location;
//     }
// 
//     public String getQuote() {
//         return this.quote;
//     }
// 
//     public void setQuote(String quote) {
//         this.quote = quote;
//     }
// 
//     public Double getRate() {
//         return this.rate;
//     }
// 
//     public void setRate(Double rate) {
//         this.rate = rate;
//     }
// 
//     public static class GetRequestBuilder extends RequestBuilder<Forex> {
//         private String currency;
//         public GetRequestBuilder(String currency) {
//             this.currency = currency;
//         }
// 
//         @Override
//         protected String method() {
//             return GET;
//         }
// 
//         @Override
//         protected HttpUrl path() {
//             return buildUrl(Endpoint.API, "forex", currency);
//         }
// 
//         @Override
//         protected ResponseType<Forex> type() {
//             return new ResponseType<>(Forex.class);
//         }
//     }
// }
// 
// Path: src/main/java/co/omise/requests/Request.java
// public class Request<T extends OmiseObjectBase> {
//     private final String method;
//     private final HttpUrl path;
//     private final String contentType;
//     private final RequestBody payload;
//     private final ResponseType<T> type;
// 
//     /**
//      * Constructor for a new Request
//      *
//      * @param method      The HTTP method to use
//      * @param path        The {@link HttpUrl} for the url path of the HTTP request
//      * @param contentType The content type of HTTP request
//      * @param payload     Additional params passed as OkHttp {@link RequestBody} to the HTTP request
//      */
//     Request(String method, HttpUrl path, String contentType, RequestBody payload, ResponseType<T> type) {
//         this.method = method;
//         this.path = path;
//         this.contentType = contentType;
//         this.payload = payload;
//         this.type = type;
//     }
// 
//     /**
//      * Gets the HTTP method.
//      *
//      * @return the HTTP method
//      */
//     public String getMethod() {
//         return method;
//     }
// 
//     /**
//      * Gets url path for the specific API in the request.
//      *
//      * @return the url path as {@link HttpUrl}
//      */
//     public HttpUrl getPath() {
//         return path;
//     }
// 
//     /**
//      * Gets HTTP request content type.
//      *
//      * @return the content type as a String
//      */
//     public String getContentType() {
//         return contentType;
//     }
// 
//     /**
//      * Gets payload (request params).
//      *
//      * @return the payload as a {@link RequestBody}
//      */
//     public RequestBody getPayload() {
//         return payload;
//     }
// 
//     public ResponseType<T> getType() {
//         return type;
//     }
// }


// Path: src/test/java/co/omise/live/LiveForexRequestTest.java
import co.omise.models.Forex;
import co.omise.requests.Request;
import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.*;

package co.omise.live;



public class LiveForexRequestTest extends BaseLiveTest {

    @Test
    @Ignore("only hit when test on live.")
    public void TestGetForex() throws Exception {
        Request<Forex> request = new Forex.GetRequestBuilder("usd")
                .build();

        Forex forex = getLiveClient().sendRequest(request);

        assertNotNull(forex);
        assertEquals("USD", forex.getBase());
        assertEquals("THB", forex.getQuote());
        assertTrue(forex.getRate() > 0);