// Path: consumer/app/src/main/java/au/com/dius/pactconsumer/data/model/Animal.java
// public class Animal {
// 
//   @Json(name = "name")
//   private final String name;
// 
//   @Json(name = "image")
//   private final String image;
// 
//   public Animal(@NonNull String name, @NonNull String image) {
//     this.name = name;
//     this.image = image;
//   }
// 
//   @NonNull
//   public String getName() {
//     return name;
//   }
// 
//   @NonNull
//   public String getType() {
//     return image;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (o == null || getClass() != o.getClass()) return false;
// 
//     Animal animal = (Animal) o;
// 
//     if (name != null ? !name.equals(animal.name) : animal.name != null) return false;
//     return image != null ? image.equals(animal.image) : animal.image == null;
// 
//   }
// 
//   @Override
//   public int hashCode() {
//     int result = name != null ? name.hashCode() : 0;
//     result = 31 * result + (image != null ? image.hashCode() : 0);
//     return result;
//   }
// 
//   @Override
//   public String toString() {
//     return "Animal{" +
//         "name='" + name + '\'' +
//         ", image='" + image + '\'' +
//         '}';
//   }
// 
//   public static Animal create(@NonNull String name, @NonNull String image) {
//     return new Animal(name, image);
//   }
// }
// 
// Path: consumer/app/src/main/java/au/com/dius/pactconsumer/data/model/ServiceResponse.java
// public class ServiceResponse {
// 
//   @Json(name = "valid_date")
//   private final DateTime validDate;
// 
//   @Json(name = "animals")
//   private final List<Animal> animals;
// 
//   public ServiceResponse(@Nullable DateTime validDate,
//                          @NonNull List<Animal> animals) {
//     this.validDate = validDate;
//     this.animals = animals;
//   }
// 
//   @Nullable
//   public DateTime getValidDate() {
//     return validDate;
//   }
// 
//   @NonNull
//   public List<Animal> getAnimals() {
//     return animals;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (o == null || getClass() != o.getClass()) return false;
// 
//     ServiceResponse that = (ServiceResponse) o;
// 
//     long millis = validDate != null ? validDate.getMillis() : -1;
//     long thatMillis = that.validDate != null ? that.validDate.getMillis() : -1;
//     if (millis != thatMillis)
//       return false;
// 
//     return animals != null ? animals.equals(that.animals) : that.animals == null;
//   }
// 
//   @Override
//   public int hashCode() {
//     int result = validDate != null ? validDate.hashCode() : 0;
//     result = 31 * result + (animals != null ? animals.hashCode() : 0);
//     return result;
//   }
// 
//   @Override
//   public String toString() {
//     return "ServiceResponse{" +
//         "validDate=" + validDate +
//         ", animals=" + animals +
//         '}';
//   }
// 
//   public static ServiceResponse create(@NonNull DateTime validDate, @NonNull List<Animal> animals) {
//     return new ServiceResponse(validDate, animals);
//   }
// }


import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import java.util.Collections;
import au.com.dius.pactconsumer.data.model.Animal;
import au.com.dius.pactconsumer.data.model.ServiceResponse;
import io.reactivex.Single;
import io.reactivex.observers.TestObserver;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
package au.com.dius.pactconsumer.data;





public class ServiceTest {

  Service.Api api;
  Service service;

  @Before
  public void setup() {
    api = mock(Service.Api.class);
    service = new Service(api);
  }

  @Test
  public void should_process_json_payload_from_provider() {
    // given
// Path: consumer/app/src/main/java/au/com/dius/pactconsumer/data/model/Animal.java
// public class Animal {
// 
//   @Json(name = "name")
//   private final String name;
// 
//   @Json(name = "image")
//   private final String image;
// 
//   public Animal(@NonNull String name, @NonNull String image) {
//     this.name = name;
//     this.image = image;
//   }
// 
//   @NonNull
//   public String getName() {
//     return name;
//   }
// 
//   @NonNull
//   public String getType() {
//     return image;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (o == null || getClass() != o.getClass()) return false;
// 
//     Animal animal = (Animal) o;
// 
//     if (name != null ? !name.equals(animal.name) : animal.name != null) return false;
//     return image != null ? image.equals(animal.image) : animal.image == null;
// 
//   }
// 
//   @Override
//   public int hashCode() {
//     int result = name != null ? name.hashCode() : 0;
//     result = 31 * result + (image != null ? image.hashCode() : 0);
//     return result;
//   }
// 
//   @Override
//   public String toString() {
//     return "Animal{" +
//         "name='" + name + '\'' +
//         ", image='" + image + '\'' +
//         '}';
//   }
// 
//   public static Animal create(@NonNull String name, @NonNull String image) {
//     return new Animal(name, image);
//   }
// }
// 
// Path: consumer/app/src/main/java/au/com/dius/pactconsumer/data/model/ServiceResponse.java
// public class ServiceResponse {
// 
//   @Json(name = "valid_date")
//   private final DateTime validDate;
// 
//   @Json(name = "animals")
//   private final List<Animal> animals;
// 
//   public ServiceResponse(@Nullable DateTime validDate,
//                          @NonNull List<Animal> animals) {
//     this.validDate = validDate;
//     this.animals = animals;
//   }
// 
//   @Nullable
//   public DateTime getValidDate() {
//     return validDate;
//   }
// 
//   @NonNull
//   public List<Animal> getAnimals() {
//     return animals;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (o == null || getClass() != o.getClass()) return false;
// 
//     ServiceResponse that = (ServiceResponse) o;
// 
//     long millis = validDate != null ? validDate.getMillis() : -1;
//     long thatMillis = that.validDate != null ? that.validDate.getMillis() : -1;
//     if (millis != thatMillis)
//       return false;
// 
//     return animals != null ? animals.equals(that.animals) : that.animals == null;
//   }
// 
//   @Override
//   public int hashCode() {
//     int result = validDate != null ? validDate.hashCode() : 0;
//     result = 31 * result + (animals != null ? animals.hashCode() : 0);
//     return result;
//   }
// 
//   @Override
//   public String toString() {
//     return "ServiceResponse{" +
//         "validDate=" + validDate +
//         ", animals=" + animals +
//         '}';
//   }
// 
//   public static ServiceResponse create(@NonNull DateTime validDate, @NonNull List<Animal> animals) {
//     return new ServiceResponse(validDate, animals);
//   }
// }


// Path: consumer/app/src/test/java/au/com/dius/pactconsumer/data/ServiceTest.java
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import java.util.Collections;
import au.com.dius.pactconsumer.data.model.Animal;
import au.com.dius.pactconsumer.data.model.ServiceResponse;
import io.reactivex.Single;
import io.reactivex.observers.TestObserver;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

package au.com.dius.pactconsumer.data;





public class ServiceTest {

  Service.Api api;
  Service service;

  @Before
  public void setup() {
    api = mock(Service.Api.class);
    service = new Service(api);
  }

  @Test
  public void should_process_json_payload_from_provider() {
    // given
    ServiceResponse response = ServiceResponse.create(DateTime.now(), Collections.singletonList(Animal.create("Doggy", "dog")));