+ private final Ticker ticker = mock(Ticker.class);
+ private final AtomicInteger insertionDelay = new AtomicInteger(60);
+ private final SoneModificationDetector soneModificationDetector;
+ private final LockableFingerprintProvider lockableFingerprintProvider = mock(LockableFingerprintProvider.class);
+
+ public SoneModificationDetectorTest() {
+ when(lockableFingerprintProvider.getFingerprint()).thenReturn("original");
+ when(lockableFingerprintProvider.isLocked()).thenReturn(false);
+ soneModificationDetector = new SoneModificationDetector(ticker, lockableFingerprintProvider, insertionDelay);
+ }
+
+ private void modifySone() {
+ modifySone("");
+ }
+
+ private void modifySone(String uniqueValue) {
+ when(lockableFingerprintProvider.getFingerprint()).thenReturn("modified" + uniqueValue);
+ }
+
+ private void passTime(int seconds) {
+ when(ticker.read()).thenReturn(SECONDS.toNanos(seconds));
+ }
+
+ private void lockSone() {
+ when(lockableFingerprintProvider.isLocked()).thenReturn(true);
+ }
+
+ private void unlockSone() {
+ when(lockableFingerprintProvider.isLocked()).thenReturn(false);
+ }
+
+ @Before
+ public void setupOriginalFingerprint() {
+ soneModificationDetector.setFingerprint("original");
+ }
+
+ @Test
+ 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.getLastInsertFingerprint(), is("original"));
+ }
+