1 package net.pterodactylus.sone.test;
3 import static java.util.UUID.randomUUID;
4 import static org.mockito.ArgumentMatchers.any;
5 import static org.mockito.Mockito.doAnswer;
6 import static org.mockito.Mockito.mock;
7 import static org.mockito.Mockito.when;
9 import java.util.ArrayList;
10 import java.util.List;
12 import net.pterodactylus.sone.data.Album;
13 import net.pterodactylus.sone.data.Album.Modifier;
14 import net.pterodactylus.sone.data.Image;
15 import net.pterodactylus.sone.data.Sone;
16 import net.pterodactylus.sone.database.AlbumBuilder;
18 import org.mockito.invocation.InvocationOnMock;
19 import org.mockito.stubbing.Answer;
22 * {@link AlbumBuilder} that returns a mocked {@link Album}.
24 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
26 public class TestAlbumBuilder implements AlbumBuilder {
28 private final Album album = mock(Album.class);
29 private final List<Album> albums = new ArrayList<Album>();
30 private final List<Image> images = new ArrayList<Image>();
31 private Album parentAlbum;
33 private String description;
34 private String imageId;
36 public TestAlbumBuilder() {
37 when(album.getTitle()).thenAnswer(new Answer<String>() {
39 public String answer(InvocationOnMock invocation) {
43 when(album.getDescription()).thenAnswer(new Answer<String>() {
45 public String answer(InvocationOnMock invocation) {
49 when(album.getAlbums()).thenReturn(albums);
50 when(album.getImages()).thenReturn(images);
51 doAnswer(new Answer<Void>() {
53 public Void answer(InvocationOnMock invocation) {
54 albums.add((Album) invocation.getArguments()[0]);
55 ((Album) invocation.getArguments()[0]).setParent(album);
58 }).when(album).addAlbum(any(Album.class));
59 doAnswer(new Answer<Void>() {
61 public Void answer(InvocationOnMock invocation) {
62 images.add((Image) invocation.getArguments()[0]);
65 }).when(album).addImage(any(Image.class));
66 doAnswer(new Answer<Void>() {
68 public Void answer(InvocationOnMock invocation) {
69 parentAlbum = (Album) invocation.getArguments()[0];
72 }).when(album).setParent(any(Album.class));
73 when(album.getParent()).thenAnswer(new Answer<Album>() {
75 public Album answer(InvocationOnMock invocation) {
79 when(album.modify()).thenReturn(new Modifier() {
81 public Modifier setTitle(String title) {
82 TestAlbumBuilder.this.title = title;
87 public Modifier setDescription(String description) {
88 TestAlbumBuilder.this.description = description;
93 public Album update() throws IllegalStateException {
100 public AlbumBuilder randomId() {
101 when(album.getId()).thenReturn(randomUUID().toString());
106 public AlbumBuilder withId(String id) {
107 when(album.getId()).thenReturn(id);
112 public AlbumBuilder by(Sone sone) {
113 when(album.getSone()).thenReturn(sone);
118 public Album build() throws IllegalStateException {