package tv.dyndns.kishibe.qmaclone.client.setting;
import static org.junit.Assert.assertSame;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import tv.dyndns.kishibe.qmaclone.client.ServiceAsync;
import tv.dyndns.kishibe.qmaclone.client.packet.RestrictionType;
import com.google.common.collect.ImmutableSet;
@RunWith(MockitoJUnitRunner.class)
public class PanelSettingRestrictedUserTest {
private static final int FAKE_USER_CODE = 12345678;
private static final RestrictionType FAKE_RESTRICTION_TYPE = RestrictionType.PROBLEM_SUBMITTION;
private static final String FAKE_REMOTE_ADDRESS = "1.2.3.4";
@Mock
private ServiceAsync mockService;
@Mock
private PanelSettingRestrictedUser.View mockView;
private PanelSettingRestrictedUser presenter;
@Before
public void setUp() throws Exception {
presenter = spy(new PanelSettingRestrictedUser(mockService, mockView));
when(mockView.getUserCode()).thenReturn(FAKE_USER_CODE);
when(mockView.getType()).thenReturn(FAKE_RESTRICTION_TYPE);
when(mockView.getRemoteAddress()).thenReturn(FAKE_REMOTE_ADDRESS);
}
@Test
public void setViewShouldHoldViewAndUpdate() {
presenter.setView(mockView);
assertSame(mockView, presenter.view);
verify(presenter).update();
}
@Test
public void onTypeChangedShouldUpdate() {
presenter.onTypeChanged();
verify(presenter).update();
}
@Test
public void updateShouldGetRestricteduserCodes() {
presenter.update();
verify(mockService).getRestrictedUserCodes(FAKE_RESTRICTION_TYPE,
presenter.callbackGetRestrictedUserCodes);
}
@Test
public void callbackGetRestrictedUserCodesShouldGetRestrictedRemoteAddresses() {
presenter.callbackGetRestrictedUserCodes.onSuccess(ImmutableSet.of(FAKE_USER_CODE));
verify(mockView).setUserCodes(ImmutableSet.of(FAKE_USER_CODE));
verify(mockService).getRestrictedRemoteAddresses(FAKE_RESTRICTION_TYPE,
presenter.callbackGetRestrictedRemoteAddresses);
}
@Test
public void callbackGetRestrictedRemoteAddressesShouldSetRemoteAddresses() {
presenter.callbackGetRestrictedRemoteAddresses.onSuccess(ImmutableSet
.of(FAKE_REMOTE_ADDRESS));
verify(mockView).setRemoteAddresses(ImmutableSet.of(FAKE_REMOTE_ADDRESS));
}
@Test
public void onAddUserCodeButtonShouldCallRpc() {
presenter.onAddUserCodeButton();
verify(mockService).addRestrictedUserCode(FAKE_USER_CODE, FAKE_RESTRICTION_TYPE,
presenter.callbackRestrictedUser);
}
@Test
public void onRemoveUserCodeButtonShouldCallRpc() {
presenter.onRemoveUserCodeButton();
verify(mockService).removeRestrictedUserCode(FAKE_USER_CODE, FAKE_RESTRICTION_TYPE,
presenter.callbackRestrictedUser);
}
@Test
public void onClearUserCodesButtonShouldCallRpc() {
presenter.onClearUserCodesButton();
verify(mockService).clearRestrictedUserCodes(FAKE_RESTRICTION_TYPE,
presenter.callbackRestrictedUser);
}
@Test
public void onAddRemoteAddressButtonShouldCallRpc() {
presenter.onAddRemoteAddressButton();
verify(mockService).addRestrictedRemoteAddress(FAKE_REMOTE_ADDRESS, FAKE_RESTRICTION_TYPE,
presenter.callbackRestrictedUser);
}
@Test
public void onRemoveRemoteAddressButtonShouldCallRpc() {
presenter.onRemoveRemoteAddressButton();
verify(mockService).removeRestrictedRemoteAddress(FAKE_REMOTE_ADDRESS,
FAKE_RESTRICTION_TYPE, presenter.callbackRestrictedUser);
}
@Test
public void onClearRemoteAddressesButtonShouldCallRpc() {
presenter.onClearRemoteAddressesButton();
verify(mockService).clearRestrictedRemoteAddresses(FAKE_RESTRICTION_TYPE,
presenter.callbackRestrictedUser);
}
@Test
public void callbackRestrictedUserShouldUpdate() {
presenter.callbackRestrictedUser.onSuccess(null);
verify(mockService).getRestrictedUserCodes(FAKE_RESTRICTION_TYPE,
presenter.callbackGetRestrictedUserCodes);
}
}