package tv.dyndns.kishibe.qmaclone.server;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.never;
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.packet.RestrictionType;
import tv.dyndns.kishibe.qmaclone.server.database.Database;
import com.google.common.collect.ImmutableSet;
import com.google.gwt.thirdparty.guava.common.collect.Sets;
@RunWith(MockitoJUnitRunner.class)
public class RestrictedUserUtilsTest {
private static final int FAKE_USER_CODE = 12345678;
private static final String FAKE_REMOTE_ADDRESS = "1.2.3.4";
private static final RestrictionType FAKE_RESTRICTION_TYPE = RestrictionType.BBS;
@Mock
private Database mockDatabase;
private RestrictedUserUtils restrictedUserUtils;
@Before
public void setUp() throws Exception {
restrictedUserUtils = new RestrictedUserUtils(mockDatabase);
}
@Test
public void checkAndUpdateRestrictedShouldUserReturnTrueIfUserCodeMatch() throws Exception {
when(mockDatabase.getRestrictedUserCodes(FAKE_RESTRICTION_TYPE)).thenReturn(
ImmutableSet.of(FAKE_USER_CODE));
when(mockDatabase.getRestrictedRemoteAddresses(FAKE_RESTRICTION_TYPE)).thenReturn(
Sets.<String> newHashSet());
restrictedUserUtils.checkAndUpdateRestrictedUser(FAKE_USER_CODE, FAKE_REMOTE_ADDRESS,
FAKE_RESTRICTION_TYPE);
verify(mockDatabase, never()).addRestrictedUserCode(FAKE_USER_CODE, FAKE_RESTRICTION_TYPE);
verify(mockDatabase).addRestrictedRemoteAddress(FAKE_REMOTE_ADDRESS, FAKE_RESTRICTION_TYPE);
}
@Test
public void checkAndUpdateRestrictedUserShouldReturnTrueIfRemoteAddressMatch() throws Exception {
when(mockDatabase.getRestrictedUserCodes(FAKE_RESTRICTION_TYPE)).thenReturn(
ImmutableSet.<Integer> of());
when(mockDatabase.getRestrictedRemoteAddresses(FAKE_RESTRICTION_TYPE)).thenReturn(
ImmutableSet.of(FAKE_REMOTE_ADDRESS));
restrictedUserUtils.checkAndUpdateRestrictedUser(FAKE_USER_CODE, FAKE_REMOTE_ADDRESS,
FAKE_RESTRICTION_TYPE);
verify(mockDatabase).addRestrictedUserCode(FAKE_USER_CODE, FAKE_RESTRICTION_TYPE);
verify(mockDatabase, never()).addRestrictedRemoteAddress(FAKE_REMOTE_ADDRESS,
FAKE_RESTRICTION_TYPE);
}
@Test
public void checkAndUpdateRestrictedUserShouldNotSaveLocalHost() throws Exception {
when(mockDatabase.getRestrictedUserCodes(FAKE_RESTRICTION_TYPE)).thenReturn(
ImmutableSet.of(FAKE_USER_CODE));
when(mockDatabase.getRestrictedRemoteAddresses(FAKE_RESTRICTION_TYPE)).thenReturn(
ImmutableSet.of(FAKE_REMOTE_ADDRESS));
restrictedUserUtils.checkAndUpdateRestrictedUser(FAKE_USER_CODE, "127.0.0.1",
FAKE_RESTRICTION_TYPE);
verify(mockDatabase, never()).addRestrictedUserCode(FAKE_USER_CODE, FAKE_RESTRICTION_TYPE);
verify(mockDatabase, never()).addRestrictedRemoteAddress(anyString(),
any(RestrictionType.class));
}
}