package net.pterodactylus.sone.core;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import net.pterodactylus.sone.core.FreenetInterface.InsertToken;
import net.pterodactylus.sone.data.Image;
import net.pterodactylus.sone.data.TemporaryImage;
import com.google.common.base.Function;
import org.junit.Test;
/**
* Unit test for {@link ImageInserter}.
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
public class ImageInserterTest {
private final TemporaryImage temporaryImage = when(mock(TemporaryImage.class).getId()).thenReturn("image-id").getMock();
private final Image image = when(mock(Image.class).getId()).thenReturn("image-id").getMock();
private final FreenetInterface freenetInterface = mock(FreenetInterface.class);
private final InsertToken insertToken = mock(InsertToken.class);
private final Function<Image, InsertToken> insertTokenSupplier = when(mock(Function.class).apply(any(Image.class))).thenReturn(insertToken).getMock();
private final ImageInserter imageInserter = new ImageInserter(freenetInterface, insertTokenSupplier);
@Test
public void inserterInsertsImage() throws SoneException {
imageInserter.insertImage(temporaryImage, image);
verify(freenetInterface).insertImage(eq(temporaryImage), eq(image), any(InsertToken.class));
}
@Test
public void exceptionWhenInsertingImageIsIgnored() throws SoneException {
doThrow(SoneException.class).when(freenetInterface).insertImage(eq(temporaryImage), eq(image), any(InsertToken.class));
imageInserter.insertImage(temporaryImage, image);
verify(freenetInterface).insertImage(eq(temporaryImage), eq(image), any(InsertToken.class));
}
@Test
public void cancellingImageInsertThatIsNotRunningDoesNothing() {
imageInserter.cancelImageInsert(image);
verify(insertToken, never()).cancel();
}
@Test
public void cancellingImage() {
imageInserter.insertImage(temporaryImage, image);
imageInserter.cancelImageInsert(image);
verify(insertToken).cancel();
}
}