X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FSoneModificationDetectorTest.java;h=1fd52c896c3e741f4f1626e83e59880e540c25d7;hp=9d1cc5955c62afd938fc019d1ae9020fff963c9f;hb=62573c314957b1851f4fbe693b8746686caa940a;hpb=e46a5f6ff2861bd37d515bfb1f8e7241c6ae8618 diff --git a/src/test/java/net/pterodactylus/sone/core/SoneModificationDetectorTest.java b/src/test/java/net/pterodactylus/sone/core/SoneModificationDetectorTest.java index 9d1cc59..1fd52c8 100644 --- a/src/test/java/net/pterodactylus/sone/core/SoneModificationDetectorTest.java +++ b/src/test/java/net/pterodactylus/sone/core/SoneModificationDetectorTest.java @@ -8,27 +8,26 @@ import static org.mockito.Mockito.when; import java.util.concurrent.atomic.AtomicInteger; -import net.pterodactylus.sone.data.Sone; +import net.pterodactylus.sone.core.SoneModificationDetector.LockableFingerprintProvider; import com.google.common.base.Ticker; +import org.junit.Before; import org.junit.Test; /** * Unit test for {@link SoneModificationDetector}. - * - * @author David ‘Bombe’ Roden */ public class SoneModificationDetectorTest { private final Ticker ticker = mock(Ticker.class); - private final Sone sone = mock(Sone.class); - private final Core core = mock(Core.class); private final AtomicInteger insertionDelay = new AtomicInteger(60); private final SoneModificationDetector soneModificationDetector; + private final LockableFingerprintProvider lockableFingerprintProvider = mock(LockableFingerprintProvider.class); public SoneModificationDetectorTest() { - when(sone.getFingerprint()).thenReturn("original"); - soneModificationDetector = new SoneModificationDetector(ticker, core, sone, insertionDelay); + when(lockableFingerprintProvider.getFingerprint()).thenReturn("original"); + when(lockableFingerprintProvider.isLocked()).thenReturn(false); + soneModificationDetector = new SoneModificationDetector(ticker, lockableFingerprintProvider, insertionDelay); } private void modifySone() { @@ -36,7 +35,7 @@ public class SoneModificationDetectorTest { } private void modifySone(String uniqueValue) { - when(sone.getFingerprint()).thenReturn("modified" + uniqueValue); + when(lockableFingerprintProvider.getFingerprint()).thenReturn("modified" + uniqueValue); } private void passTime(int seconds) { @@ -44,11 +43,21 @@ public class SoneModificationDetectorTest { } private void lockSone() { - when(core.isLocked(sone)).thenReturn(true); + when(lockableFingerprintProvider.isLocked()).thenReturn(true); } private void unlockSone() { - when(core.isLocked(sone)).thenReturn(false); + when(lockableFingerprintProvider.isLocked()).thenReturn(false); + } + + @Before + public void setupOriginalFingerprint() { + soneModificationDetector.setFingerprint("original"); + } + + @Test + public void normalConstructorCanBeCalled() { + new SoneModificationDetector(lockableFingerprintProvider, insertionDelay); } @Test @@ -58,6 +67,11 @@ public class SoneModificationDetectorTest { } @Test + public void originalFingerprintIsRetained() { + assertThat(soneModificationDetector.getLastInsertFingerprint(), is("original")); + } + + @Test public void modifiedSoneIsEligibleAfter60Seconds() { modifySone(); assertThat(soneModificationDetector.isModified(), is(true)); @@ -135,4 +149,34 @@ public class SoneModificationDetectorTest { assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); } + @Test + public void soneWithoutOriginalFingerprintIsNotEligibleAfter59Seconds() { + SoneModificationDetector soneModificationDetector = createDetectorWithoutOriginalFingerprint(); + assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); + passTime(59); + assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); + } + + private SoneModificationDetector createDetectorWithoutOriginalFingerprint() { + return new SoneModificationDetector(ticker, new LockableFingerprintProvider() { + @Override + public boolean isLocked() { + return false; + } + + @Override + public String getFingerprint() { + return "changed"; + } + }, insertionDelay); + } + + @Test + public void soneWithoutOriginalFingerprintIsEligibleAfter60Seconds() { + SoneModificationDetector soneModificationDetector = createDetectorWithoutOriginalFingerprint(); + assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); + passTime(60); + assertThat(soneModificationDetector.isEligibleForInsert(), is(true)); + } + }