Merge branch 'release-0.9.7'
[Sone.git] / src / test / java / net / pterodactylus / sone / test / TestAlbumBuilder.java
1 package net.pterodactylus.sone.test;
2
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;
8
9 import java.util.ArrayList;
10 import java.util.List;
11
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;
17
18 import org.mockito.invocation.InvocationOnMock;
19 import org.mockito.stubbing.Answer;
20
21 /**
22  * {@link AlbumBuilder} that returns a mocked {@link Album}.
23  *
24  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
25  */
26 public class TestAlbumBuilder implements AlbumBuilder {
27
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;
32         private String title;
33         private String description;
34         private String imageId;
35
36         public TestAlbumBuilder() {
37                 when(album.getTitle()).thenAnswer(new Answer<String>() {
38                         @Override
39                         public String answer(InvocationOnMock invocation) {
40                                 return title;
41                         }
42                 });
43                 when(album.getDescription()).thenAnswer(new Answer<String>() {
44                         @Override
45                         public String answer(InvocationOnMock invocation) {
46                                 return description;
47                         }
48                 });
49                 when(album.getAlbums()).thenReturn(albums);
50                 when(album.getImages()).thenReturn(images);
51                 doAnswer(new Answer<Void>() {
52                         @Override
53                         public Void answer(InvocationOnMock invocation) {
54                                 albums.add((Album) invocation.getArguments()[0]);
55                                 ((Album) invocation.getArguments()[0]).setParent(album);
56                                 return null;
57                         }
58                 }).when(album).addAlbum(any(Album.class));
59                 doAnswer(new Answer<Void>() {
60                         @Override
61                         public Void answer(InvocationOnMock invocation) {
62                                 images.add((Image) invocation.getArguments()[0]);
63                                 return null;
64                         }
65                 }).when(album).addImage(any(Image.class));
66                 doAnswer(new Answer<Void>() {
67                         @Override
68                         public Void answer(InvocationOnMock invocation) {
69                                 parentAlbum = (Album) invocation.getArguments()[0];
70                                 return null;
71                         }
72                 }).when(album).setParent(any(Album.class));
73                 when(album.getParent()).thenAnswer(new Answer<Album>() {
74                         @Override
75                         public Album answer(InvocationOnMock invocation) {
76                                 return parentAlbum;
77                         }
78                 });
79                 when(album.modify()).thenReturn(new Modifier() {
80                         @Override
81                         public Modifier setTitle(String title) {
82                                 TestAlbumBuilder.this.title = title;
83                                 return this;
84                         }
85
86                         @Override
87                         public Modifier setDescription(String description) {
88                                 TestAlbumBuilder.this.description = description;
89                                 return this;
90                         }
91
92                         @Override
93                         public Album update() throws IllegalStateException {
94                                 return album;
95                         }
96                 });
97         }
98
99         @Override
100         public AlbumBuilder randomId() {
101                 when(album.getId()).thenReturn(randomUUID().toString());
102                 return this;
103         }
104
105         @Override
106         public AlbumBuilder withId(String id) {
107                 when(album.getId()).thenReturn(id);
108                 return this;
109         }
110
111         @Override
112         public AlbumBuilder by(Sone sone) {
113                 when(album.getSone()).thenReturn(sone);
114                 return this;
115         }
116
117         @Override
118         public Album build() throws IllegalStateException {
119                 return album;
120         }
121
122 }