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)); } }