// Path: consumer/app/src/main/java/au/com/dius/pactconsumer/data/FakeService.java
// @Singleton
// public class FakeService implements Repository {
// 
//   public static final ServiceResponse RESPONSE;
// 
//   static {
//     RESPONSE = new ServiceResponse(
//         DateTime.now(),
//         Arrays.asList(
//             Animal.create("Doggy", "dog"),
//             Animal.create("Cathy", "cat"),
//             Animal.create("Birdy", "bird")
//         )
//     );
//   }
// 
//   @Inject
//   public FakeService() {
//   }
// 
//   @NonNull
//   @Override
//   public Single<ServiceResponse> fetchResponse(@NonNull DateTime dateTime) {
//     return Single.just(RESPONSE);
//   }
// 
// }
// 
// Path: consumer/app/src/main/java/au/com/dius/pactconsumer/data/Repository.java
// public interface Repository {
// 
//   @NonNull
//   Single<ServiceResponse> fetchResponse(@NonNull DateTime dateTime);
// 
// }
// 
// Path: consumer/app/src/main/java/au/com/dius/pactconsumer/data/exceptions/ServiceException.java
// public class ServiceException extends RuntimeException {
// 
//   public ServiceException() { }
// 
//   public ServiceException(String message, Throwable cause) {
//     super(message, cause);
//   }
// }
// 
// 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/main/java/au/com/dius/pactconsumer/util/Logger.java
// @Singleton
// public class Logger {
// 
//   @Inject
//   public Logger() {
//   }
// 
//   public void d(@NonNull String tag, @NonNull String msg) {
//     Log.d(tag, msg);
//   }
// 
//   public void e(@NonNull String tag, @NonNull String msg, @NonNull Throwable tr) {
//     Log.e(tag, msg, tr);
//   }
// 
// }
// 
// Path: consumer/app/src/test/java/au/com/dius/pactconsumer/util/TestRxBinder.java
// public class TestRxBinder extends RxBinder {
// 
//   @Override
//   public <T> void bind(Observable<T> observable,
//                        Consumer<T> onNext,
//                        Consumer<Exception> onError,
//                        Action onComplete) {
//     observable
//         .subscribeWith(new DisposableObserver<T>() {
// 
//           @Override
//           public void onNext(T o) {
//             try {
//               onNext.accept(o);
//             } catch (Exception e) {
//               e.printStackTrace();
//             }
//           }
// 
//           @Override
//           public void onError(Throwable thr) {
//             if (!(thr instanceof Exception)) {
//               Exceptions.throwIfFatal(thr);
//               return;
//             }
// 
//             try {
//               onError.accept((Exception) thr);
//             } catch (Exception e) {
//               e.printStackTrace();
//             }
//           }
// 
//           @Override
//           public void onComplete() {
//             try {
//               onComplete.run();
//             } catch (Exception e) {
//               e.printStackTrace();
//             }
//           }
//         });
//   }
// }


import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.Mockito;
import java.util.Collections;
import au.com.dius.pactconsumer.R;
import au.com.dius.pactconsumer.data.FakeService;
import au.com.dius.pactconsumer.data.Repository;
import au.com.dius.pactconsumer.data.exceptions.ServiceException;
import au.com.dius.pactconsumer.data.model.ServiceResponse;
import au.com.dius.pactconsumer.util.Logger;
import au.com.dius.pactconsumer.util.TestRxBinder;
import io.reactivex.Single;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
package au.com.dius.pactconsumer.domain;





public class PresenterTest {

  Repository repository;
  Contract.View view;
  Presenter presenter;

  @Before
  public void setUp() {
    repository = mock(Repository.class);
    view = mock(Contract.View.class);
// Path: consumer/app/src/main/java/au/com/dius/pactconsumer/data/FakeService.java
// @Singleton
// public class FakeService implements Repository {
// 
//   public static final ServiceResponse RESPONSE;
// 
//   static {
//     RESPONSE = new ServiceResponse(
//         DateTime.now(),
//         Arrays.asList(
//             Animal.create("Doggy", "dog"),
//             Animal.create("Cathy", "cat"),
//             Animal.create("Birdy", "bird")
//         )
//     );
//   }
// 
//   @Inject
//   public FakeService() {
//   }
// 
//   @NonNull
//   @Override
//   public Single<ServiceResponse> fetchResponse(@NonNull DateTime dateTime) {
//     return Single.just(RESPONSE);
//   }
// 
// }
// 
// Path: consumer/app/src/main/java/au/com/dius/pactconsumer/data/Repository.java
// public interface Repository {
// 
//   @NonNull
//   Single<ServiceResponse> fetchResponse(@NonNull DateTime dateTime);
// 
// }
// 
// Path: consumer/app/src/main/java/au/com/dius/pactconsumer/data/exceptions/ServiceException.java
// public class ServiceException extends RuntimeException {
// 
//   public ServiceException() { }
// 
//   public ServiceException(String message, Throwable cause) {
//     super(message, cause);
//   }
// }
// 
// 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/main/java/au/com/dius/pactconsumer/util/Logger.java
// @Singleton
// public class Logger {
// 
//   @Inject
//   public Logger() {
//   }
// 
//   public void d(@NonNull String tag, @NonNull String msg) {
//     Log.d(tag, msg);
//   }
// 
//   public void e(@NonNull String tag, @NonNull String msg, @NonNull Throwable tr) {
//     Log.e(tag, msg, tr);
//   }
// 
// }
// 
// Path: consumer/app/src/test/java/au/com/dius/pactconsumer/util/TestRxBinder.java
// public class TestRxBinder extends RxBinder {
// 
//   @Override
//   public <T> void bind(Observable<T> observable,
//                        Consumer<T> onNext,
//                        Consumer<Exception> onError,
//                        Action onComplete) {
//     observable
//         .subscribeWith(new DisposableObserver<T>() {
// 
//           @Override
//           public void onNext(T o) {
//             try {
//               onNext.accept(o);
//             } catch (Exception e) {
//               e.printStackTrace();
//             }
//           }
// 
//           @Override
//           public void onError(Throwable thr) {
//             if (!(thr instanceof Exception)) {
//               Exceptions.throwIfFatal(thr);
//               return;
//             }
// 
//             try {
//               onError.accept((Exception) thr);
//             } catch (Exception e) {
//               e.printStackTrace();
//             }
//           }
// 
//           @Override
//           public void onComplete() {
//             try {
//               onComplete.run();
//             } catch (Exception e) {
//               e.printStackTrace();
//             }
//           }
//         });
//   }
// }


// Path: consumer/app/src/test/java/au/com/dius/pactconsumer/domain/PresenterTest.java
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.Mockito;
import java.util.Collections;
import au.com.dius.pactconsumer.R;
import au.com.dius.pactconsumer.data.FakeService;
import au.com.dius.pactconsumer.data.Repository;
import au.com.dius.pactconsumer.data.exceptions.ServiceException;
import au.com.dius.pactconsumer.data.model.ServiceResponse;
import au.com.dius.pactconsumer.util.Logger;
import au.com.dius.pactconsumer.util.TestRxBinder;
import io.reactivex.Single;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

package au.com.dius.pactconsumer.domain;





public class PresenterTest {

  Repository repository;
  Contract.View view;
  Presenter presenter;

  @Before
  public void setUp() {
    repository = mock(Repository.class);
    view = mock(Contract.View.class);
    presenter = new Presenter(repository, view, new TestRxBinder(), mock(Logger.class));