package com.chriszou.auttutorial.test.groupshare;
import com.chriszou.auttutorial.groupshare.CheckoutModel;
import com.chriszou.auttutorial.groupshare.NetworkCallback;
import com.chriszou.auttutorial.groupshare.PaymentApi;
import com.chriszou.auttutorial.test.groupshare.JSpec;
import com.squareup.otto.Bus;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import java.util.HashMap;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
/**
* Created by xiaochuang on 4/25/16.
*/
public class CheckoutModelTest {
private CheckoutModel model;
private PaymentApi paymentApi;
private Bus bus;
@Before
public void setup() {
paymentApi = mock(PaymentApi.class);
bus = mock(Bus.class);
model = new CheckoutModel(paymentApi, bus);
}
@Test
@JSpec(desc = "should loadCheckoutData call Api.get")
public void testLoadCheckoutData() {
model.loadCheckoutData("some payment id");
//verify mApi.get is called
}
@Test
@JSpec(desc = "should loadCheckoutData call Bus.post with succesful result")
public void testLoadCheckoutData2() {
// mock mApi to call callback's onSuccess when its get method is called
Mockito.doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
NetworkCallback networkCallback = (NetworkCallback) invocation.getArguments()[2];
networkCallback.onSuccess("success");
return "Sucess";
}
}).when(paymentApi).get(eq("some url"), any(HashMap.class), any(NetworkCallback.class));
model.loadCheckoutData("some payment id");
//verify mBus.post is called with expected arguments
}
@Test
@JSpec(desc = "should loadCheckoutData call Bus.post with failure result")
public void testLoadCheckoutData3() {
// mock mApi to call callback's onFailure when its get method is called
Mockito.doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
NetworkCallback networkCallback = (NetworkCallback) invocation.getArguments()[2];
networkCallback.onFailure(500, "Server error");
return "Server error";
}
}).when(paymentApi).get(eq("some url"), any(HashMap.class), any(NetworkCallback.class));
model.loadCheckoutData("some payment id");
//verify mBus.post is called with expected arguments
}
}