package net.pterodactylus.sone.core;
import static net.pterodactylus.sone.fcp.FcpInterface.FullAccessRequired.ALWAYS;
import static net.pterodactylus.sone.fcp.FcpInterface.FullAccessRequired.NO;
import static net.pterodactylus.sone.fcp.FcpInterface.FullAccessRequired.WRITING;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import net.pterodactylus.sone.core.event.InsertionDelayChangedEvent;
import net.pterodactylus.sone.fcp.FcpInterface.FullAccessRequired;
import net.pterodactylus.sone.fcp.event.FcpInterfaceActivatedEvent;
import net.pterodactylus.sone.fcp.event.FcpInterfaceDeactivatedEvent;
import net.pterodactylus.sone.fcp.event.FullAccessRequiredChanged;
import com.google.common.eventbus.EventBus;
import org.junit.After;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
/**
* Unit test for {@link Preferences}.
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
public class PreferencesTest {
private final EventBus eventBus = mock(EventBus.class);
private final Preferences preferences = new Preferences(eventBus);
@After
public void tearDown() {
verifyNoMoreInteractions(eventBus);
}
@Test
public void preferencesRetainInsertionDelay() {
preferences.setInsertionDelay(15);
assertThat(preferences.getInsertionDelay(), is(15));
verify(eventBus).post(any(InsertionDelayChangedEvent.class));
}
@Test(expected = IllegalArgumentException.class)
public void invalidInsertionDelayIsRejected() {
preferences.setInsertionDelay(-15);
}
@Test
public void preferencesReturnDefaultValueWhenInsertionDelayIsSetToNull() {
preferences.setInsertionDelay(null);
assertThat(preferences.getInsertionDelay(), is(60));
verify(eventBus).post(any(InsertionDelayChangedEvent.class));
}
@Test
public void preferencesStartWithInsertionDelayDefaultValue() {
assertThat(preferences.getInsertionDelay(), is(60));
}
@Test
public void preferencesRetainPostsPerPage() {
preferences.setPostsPerPage(15);
assertThat(preferences.getPostsPerPage(), is(15));
}
@Test(expected = IllegalArgumentException.class)
public void invalidPostsPerPageIsRejected() {
preferences.setPostsPerPage(-15);
}
@Test
public void preferencesReturnDefaultValueWhenPostsPerPageIsSetToNull() {
preferences.setPostsPerPage(null);
assertThat(preferences.getPostsPerPage(), is(10));
}
@Test
public void preferencesStartWithPostsPerPageDefaultValue() {
assertThat(preferences.getPostsPerPage(), is(10));
}
@Test
public void preferencesRetainImagesPerPage() {
preferences.setImagesPerPage(15);
assertThat(preferences.getImagesPerPage(), is(15));
}
@Test(expected = IllegalArgumentException.class)
public void invalidImagesPerPageIsRejected() {
preferences.setImagesPerPage(-15);
}
@Test
public void preferencesReturnDefaultValueWhenImagesPerPageIsSetToNull() {
preferences.setImagesPerPage(null);
assertThat(preferences.getImagesPerPage(), is(9));
}
@Test
public void preferencesStartWithImagesPerPageDefaultValue() {
assertThat(preferences.getImagesPerPage(), is(9));
}
@Test
public void preferencesRetainCharactersPerPost() {
preferences.setCharactersPerPost(150);
assertThat(preferences.getCharactersPerPost(), is(150));
}
@Test(expected = IllegalArgumentException.class)
public void invalidCharactersPerPostIsRejected() {
preferences.setCharactersPerPost(-15);
}
@Test
public void preferencesReturnDefaultValueWhenCharactersPerPostIsSetToNull() {
preferences.setCharactersPerPost(null);
assertThat(preferences.getCharactersPerPost(), is(400));
}
@Test
public void preferencesStartWithCharactersPerPostDefaultValue() {
assertThat(preferences.getCharactersPerPost(), is(400));
}
@Test
public void preferencesRetainPostCutOffLength() {
preferences.setPostCutOffLength(150);
assertThat(preferences.getPostCutOffLength(), is(150));
}
@Test(expected = IllegalArgumentException.class)
public void invalidPostCutOffLengthIsRejected() {
preferences.setPostCutOffLength(-15);
}
@Test(expected = IllegalArgumentException.class)
public void cutOffLengthOfMinusOneIsNotAllowed() {
preferences.setPostCutOffLength(-1);
}
@Test
public void preferencesReturnDefaultValueWhenPostCutOffLengthIsSetToNull() {
preferences.setPostCutOffLength(null);
assertThat(preferences.getPostCutOffLength(), is(200));
}
@Test
public void preferencesStartWithPostCutOffLengthDefaultValue() {
assertThat(preferences.getPostCutOffLength(), is(200));
}
@Test
public void preferencesRetainRequireFullAccessOfTrue() {
preferences.setRequireFullAccess(true);
assertThat(preferences.isRequireFullAccess(), is(true));
}
@Test
public void preferencesRetainRequireFullAccessOfFalse() {
preferences.setRequireFullAccess(false);
assertThat(preferences.isRequireFullAccess(), is(false));
}
@Test
public void preferencesReturnDefaultValueWhenRequireFullAccessIsSetToNull() {
preferences.setRequireFullAccess(null);
assertThat(preferences.isRequireFullAccess(), is(false));
}
@Test
public void preferencesStartWithRequireFullAccessDefaultValue() {
assertThat(preferences.isRequireFullAccess(), is(false));
}
@Test
public void preferencesRetainPositiveTrust() {
preferences.setPositiveTrust(15);
assertThat(preferences.getPositiveTrust(), is(15));
}
@Test(expected = IllegalArgumentException.class)
public void invalidPositiveTrustIsRejected() {
preferences.setPositiveTrust(-15);
}
@Test
public void preferencesReturnDefaultValueWhenPositiveTrustIsSetToNull() {
preferences.setPositiveTrust(null);
assertThat(preferences.getPositiveTrust(), is(75));
}
@Test
public void preferencesStartWithPositiveTrustDefaultValue() {
assertThat(preferences.getPositiveTrust(), is(75));
}
@Test
public void preferencesRetainNegativeTrust() {
preferences.setNegativeTrust(-15);
assertThat(preferences.getNegativeTrust(), is(-15));
}
@Test(expected = IllegalArgumentException.class)
public void invalidNegativeTrustIsRejected() {
preferences.setNegativeTrust(150);
}
@Test
public void preferencesReturnDefaultValueWhenNegativeTrustIsSetToNull() {
preferences.setNegativeTrust(null);
assertThat(preferences.getNegativeTrust(), is(-25));
}
@Test
public void preferencesStartWithNegativeTrustDefaultValue() {
assertThat(preferences.getNegativeTrust(), is(-25));
}
@Test
public void preferencesRetainTrustComment() {
preferences.setTrustComment("Trust");
assertThat(preferences.getTrustComment(), is("Trust"));
}
@Test
public void preferencesReturnDefaultValueWhenTrustCommentIsSetToNull() {
preferences.setTrustComment(null);
assertThat(preferences.getTrustComment(),
is("Set from Sone Web Interface"));
}
@Test
public void preferencesStartWithTrustCommentDefaultValue() {
assertThat(preferences.getTrustComment(),
is("Set from Sone Web Interface"));
}
@Test
public void preferencesRetainFcpInterfaceActiveOfTrue() {
preferences.setFcpInterfaceActive(true);
assertThat(preferences.isFcpInterfaceActive(), is(true));
verify(eventBus).post(any(FcpInterfaceActivatedEvent.class));
}
@Test
public void preferencesRetainFcpInterfaceActiveOfFalse() {
preferences.setFcpInterfaceActive(false);
assertThat(preferences.isFcpInterfaceActive(), is(false));
verify(eventBus).post(any(FcpInterfaceDeactivatedEvent.class));
}
@Test
public void preferencesReturnDefaultValueWhenFcpInterfaceActiveIsSetToNull() {
preferences.setFcpInterfaceActive(null);
assertThat(preferences.isFcpInterfaceActive(), is(false));
verify(eventBus).post(any(FcpInterfaceDeactivatedEvent.class));
}
@Test
public void preferencesStartWithFcpInterfaceActiveDefaultValue() {
assertThat(preferences.isFcpInterfaceActive(), is(false));
}
@Test
public void preferencesRetainFcpFullAccessRequiredOfNo() {
preferences.setFcpFullAccessRequired(NO);
assertThat(preferences.getFcpFullAccessRequired(), is(NO));
verifyFullAccessRequiredChangedEvent(NO);
}
private void verifyFullAccessRequiredChangedEvent(
FullAccessRequired fullAccessRequired) {
ArgumentCaptor<FullAccessRequiredChanged> fullAccessRequiredCaptor =
ArgumentCaptor.forClass(FullAccessRequiredChanged.class);
verify(eventBus).post(fullAccessRequiredCaptor.capture());
assertThat(
fullAccessRequiredCaptor.getValue().getFullAccessRequired(),
is(fullAccessRequired));
}
@Test
public void preferencesRetainFcpFullAccessRequiredOfWriting() {
preferences.setFcpFullAccessRequired(WRITING);
assertThat(preferences.getFcpFullAccessRequired(), is(WRITING));
verifyFullAccessRequiredChangedEvent(WRITING);
}
@Test
public void preferencesRetainFcpFullAccessRequiredOfAlways() {
preferences.setFcpFullAccessRequired(ALWAYS);
assertThat(preferences.getFcpFullAccessRequired(), is(ALWAYS));
verifyFullAccessRequiredChangedEvent(ALWAYS);
}
@Test
public void preferencesReturnDefaultValueWhenFcpFullAccessRequiredIsSetToNull() {
preferences.setFcpFullAccessRequired(null);
assertThat(preferences.getFcpFullAccessRequired(), is(ALWAYS));
verifyFullAccessRequiredChangedEvent(ALWAYS);
}
@Test
public void preferencesStartWithFcpFullAccessRequiredDefaultValue() {
assertThat(preferences.getFcpFullAccessRequired(), is(ALWAYS));
}
}