X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FSoneModificationDetectorTest.java;h=d70cc5c2b27e3d1ab072e071830732df278fdb1b;hb=2b47186b72e30460a6710f95a76e4a99c305909a;hp=3e4da708249951228cf7c7cb86a0abd4e60982ec;hpb=2bccc50e24eec9fc0f20df72fd67c6887c1254dd;p=Sone.git diff --git a/src/test/java/net/pterodactylus/sone/core/SoneModificationDetectorTest.java b/src/test/java/net/pterodactylus/sone/core/SoneModificationDetectorTest.java index 3e4da70..d70cc5c 100644 --- a/src/test/java/net/pterodactylus/sone/core/SoneModificationDetectorTest.java +++ b/src/test/java/net/pterodactylus/sone/core/SoneModificationDetectorTest.java @@ -8,9 +8,11 @@ import static org.mockito.Mockito.when; import java.util.concurrent.atomic.AtomicInteger; +import net.pterodactylus.sone.core.SoneModificationDetector.LockableFingerprintProvider; import net.pterodactylus.sone.data.Sone; import com.google.common.base.Ticker; +import org.junit.Before; import org.junit.Test; /** @@ -21,18 +23,22 @@ import org.junit.Test; 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() { - when(sone.getFingerprint()).thenReturn("modified"); + modifySone(""); + } + + private void modifySone(String uniqueValue) { + when(lockableFingerprintProvider.getFingerprint()).thenReturn("modified" + uniqueValue); } private void passTime(int seconds) { @@ -40,13 +46,36 @@ public class SoneModificationDetectorTest { } private void lockSone() { - when(core.isLocked(sone)).thenReturn(true); + when(lockableFingerprintProvider.isLocked()).thenReturn(true); + } + + private void unlockSone() { + when(lockableFingerprintProvider.isLocked()).thenReturn(false); + } + + @Before + public void setupOriginalFingerprint() { + soneModificationDetector.setFingerprint("original"); } @Test - public void modifiedSoneIsEligibleAfter60Seconds() { + public void normalConstructorCanBeCalled() { + new SoneModificationDetector(lockableFingerprintProvider, insertionDelay); + } + + @Test + public void sonesStartOutAsNotEligible() { assertThat(soneModificationDetector.isModified(), is(false)); assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); + } + + @Test + public void originalFingerprintIsRetained() { + assertThat(soneModificationDetector.getOriginalFingerprint(), is("original")); + } + + @Test + public void modifiedSoneIsEligibleAfter60Seconds() { modifySone(); assertThat(soneModificationDetector.isModified(), is(true)); assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); @@ -56,8 +85,24 @@ public class SoneModificationDetectorTest { } @Test - public void modifiedSoneIsNotEligibleAfter30Seconds() { + public void modifiedAndRemodifiedSoneIsEligibleAfter90Seconds() { + modifySone(); + assertThat(soneModificationDetector.isModified(), is(true)); assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); + passTime(30); + modifySone("2"); + assertThat(soneModificationDetector.isModified(), is(true)); + assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); + passTime(61); + assertThat(soneModificationDetector.isModified(), is(true)); + assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); + passTime(91); + assertThat(soneModificationDetector.isModified(), is(true)); + assertThat(soneModificationDetector.isEligibleForInsert(), is(true)); + } + + @Test + public void modifiedSoneIsNotEligibleAfter30Seconds() { modifySone(); passTime(30); assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); @@ -74,8 +119,21 @@ public class SoneModificationDetectorTest { } @Test - public void settingFingerprintWillResetTheEligibility() { + public void lockingAndUnlockingASoneRestartsTheWaitPeriod() { + modifySone(); + lockSone(); + passTime(30); + assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); + unlockSone(); assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); + passTime(60); + assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); + passTime(90); + assertThat(soneModificationDetector.isEligibleForInsert(), is(true)); + } + + @Test + public void settingFingerprintWillResetTheEligibility() { modifySone(); assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); passTime(100); @@ -86,7 +144,6 @@ public class SoneModificationDetectorTest { @Test public void changingInsertionDelayWillInfluenceEligibility() { - assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); modifySone(); assertThat(soneModificationDetector.isEligibleForInsert(), is(false)); passTime(100);