Commit | Line | Data |
---|---|---|
6cac0e45 NR |
1 | package be.nikiroo.fanfix.test; |
2 | ||
3 | import java.io.File; | |
4 | import java.util.ArrayList; | |
fd25eddc NR |
5 | import java.util.Arrays; |
6 | import java.util.Collections; | |
6cac0e45 NR |
7 | import java.util.List; |
8 | ||
6cac0e45 NR |
9 | import be.nikiroo.fanfix.data.Chapter; |
10 | import be.nikiroo.fanfix.data.MetaData; | |
11 | import be.nikiroo.fanfix.data.Paragraph; | |
12 | import be.nikiroo.fanfix.data.Story; | |
e42573a0 NR |
13 | import be.nikiroo.fanfix.library.BasicLibrary; |
14 | import be.nikiroo.fanfix.library.LocalLibrary; | |
6cac0e45 NR |
15 | import be.nikiroo.fanfix.output.BasicOutput.OutputType; |
16 | import be.nikiroo.utils.IOUtils; | |
17 | import be.nikiroo.utils.test.TestCase; | |
18 | import be.nikiroo.utils.test.TestLauncher; | |
19 | ||
2a25f781 | 20 | class LibraryTest extends TestLauncher { |
68e2c6d2 | 21 | private BasicLibrary lib; |
6cac0e45 NR |
22 | private File tmp; |
23 | ||
24 | public LibraryTest(String[] args) { | |
25 | super("Library", args); | |
26 | ||
27 | final String luid1 = "001"; // A | |
28 | final String luid2 = "002"; // B | |
29 | final String luid3 = "003"; // B then A, then B | |
fd25eddc NR |
30 | final String name1 = "My story 1"; |
31 | final String name2 = "My story 2"; | |
32 | final String name3 = "My story 3"; | |
33 | final String name3ex = "My story 3 [edited]"; | |
6cac0e45 NR |
34 | final String source1 = "Source A"; |
35 | final String source2 = "Source B"; | |
36 | final String author1 = "Unknown author"; | |
37 | final String author2 = "Another other otter author"; | |
38 | ||
fd25eddc NR |
39 | final String errMess = "The resulting stories in the list are not what we expected"; |
40 | ||
6cac0e45 NR |
41 | addSeries(new TestLauncher("Local", args) { |
42 | { | |
43 | addTest(new TestCase("getList") { | |
44 | @Override | |
45 | public void test() throws Exception { | |
ef98466f | 46 | List<MetaData> metas = lib.getList().getMetas(); |
fd25eddc NR |
47 | assertEquals(errMess, Arrays.asList(), |
48 | titlesAsList(metas)); | |
6cac0e45 NR |
49 | } |
50 | }); | |
51 | ||
52 | addTest(new TestCase("save") { | |
53 | @Override | |
54 | public void test() throws Exception { | |
fd25eddc NR |
55 | lib.save(story(luid1, name1, source1, author1), luid1, |
56 | null); | |
6cac0e45 | 57 | |
ef98466f | 58 | List<MetaData> metas = lib.getList().getMetas(); |
fd25eddc NR |
59 | assertEquals(errMess, Arrays.asList(name1), |
60 | titlesAsList(metas)); | |
6cac0e45 NR |
61 | } |
62 | }); | |
63 | ||
64 | addTest(new TestCase("save more") { | |
65 | @Override | |
66 | public void test() throws Exception { | |
67 | List<MetaData> metas = null; | |
68 | ||
fd25eddc NR |
69 | lib.save(story(luid2, name2, source2, author1), luid2, |
70 | null); | |
6cac0e45 | 71 | |
ef98466f | 72 | metas = lib.getList().getMetas(); |
fd25eddc NR |
73 | assertEquals(errMess, Arrays.asList(name1, name2), |
74 | titlesAsList(metas)); | |
6cac0e45 | 75 | |
fd25eddc NR |
76 | lib.save(story(luid3, name3, source2, author1), luid3, |
77 | null); | |
6cac0e45 | 78 | |
ef98466f | 79 | metas = lib.getList().getMetas(); |
fd25eddc NR |
80 | assertEquals(errMess, |
81 | Arrays.asList(name1, name2, name3), | |
82 | titlesAsList(metas)); | |
6cac0e45 NR |
83 | } |
84 | }); | |
85 | ||
86 | addTest(new TestCase("save override luid (change author)") { | |
87 | @Override | |
88 | public void test() throws Exception { | |
89 | // same luid as a previous one | |
fd25eddc NR |
90 | lib.save(story(luid3, name3ex, source2, author2), |
91 | luid3, null); | |
6cac0e45 | 92 | |
ef98466f | 93 | List<MetaData> metas = lib.getList().getMetas(); |
fd25eddc NR |
94 | assertEquals(errMess, |
95 | Arrays.asList(name1, name2, name3ex), | |
96 | titlesAsList(metas)); | |
6cac0e45 NR |
97 | } |
98 | }); | |
99 | ||
100 | addTest(new TestCase("getList with results") { | |
101 | @Override | |
102 | public void test() throws Exception { | |
ef98466f | 103 | List<MetaData> metas = lib.getList().getMetas(); |
6cac0e45 NR |
104 | assertEquals(3, metas.size()); |
105 | } | |
106 | }); | |
107 | ||
108 | addTest(new TestCase("getList by source") { | |
109 | @Override | |
110 | public void test() throws Exception { | |
111 | List<MetaData> metas = null; | |
112 | ||
ef98466f | 113 | metas = lib.getList().filter(source1, null, null); |
6cac0e45 NR |
114 | assertEquals(1, metas.size()); |
115 | ||
ef98466f | 116 | metas = lib.getList().filter(source2, null, null); |
6cac0e45 NR |
117 | assertEquals(2, metas.size()); |
118 | ||
ef98466f | 119 | metas = lib.getList().filter((String)null, null, null); |
6cac0e45 NR |
120 | assertEquals(3, metas.size()); |
121 | } | |
122 | }); | |
123 | ||
124 | addTest(new TestCase("getList by author") { | |
125 | @Override | |
126 | public void test() throws Exception { | |
127 | List<MetaData> metas = null; | |
128 | ||
ef98466f | 129 | metas = lib.getList().filter(null, author1, null); |
6cac0e45 NR |
130 | assertEquals(2, metas.size()); |
131 | ||
ef98466f | 132 | metas = lib.getList().filter(null, author2, null); |
6cac0e45 NR |
133 | assertEquals(1, metas.size()); |
134 | ||
ef98466f | 135 | metas = lib.getList().filter((String)null, null, null); |
6cac0e45 NR |
136 | assertEquals(3, metas.size()); |
137 | } | |
138 | }); | |
139 | ||
140 | addTest(new TestCase("changeType") { | |
141 | @Override | |
142 | public void test() throws Exception { | |
143 | List<MetaData> metas = null; | |
144 | ||
68e2c6d2 | 145 | lib.changeSource(luid3, source1, null); |
6cac0e45 | 146 | |
ef98466f | 147 | metas = lib.getList().filter(source1, null, null); |
6cac0e45 NR |
148 | assertEquals(2, metas.size()); |
149 | ||
ef98466f | 150 | metas = lib.getList().filter(source2, null, null); |
6cac0e45 NR |
151 | assertEquals(1, metas.size()); |
152 | ||
ef98466f | 153 | metas = lib.getList().filter((String)null, null, null); |
6cac0e45 NR |
154 | assertEquals(3, metas.size()); |
155 | } | |
156 | }); | |
157 | ||
158 | addTest(new TestCase("save override luid (change source)") { | |
159 | @Override | |
160 | public void test() throws Exception { | |
161 | List<MetaData> metas = null; | |
162 | ||
163 | // same luid as a previous one | |
164 | lib.save(story(luid3, "My story 3", source2, author2), | |
165 | luid3, null); | |
166 | ||
ef98466f | 167 | metas = lib.getList().filter(source1, null, null); |
6cac0e45 NR |
168 | assertEquals(1, metas.size()); |
169 | ||
ef98466f | 170 | metas = lib.getList().filter(source2, null, null); |
6cac0e45 NR |
171 | assertEquals(2, metas.size()); |
172 | ||
ef98466f | 173 | metas = lib.getList().filter((String)null, null, null); |
6cac0e45 NR |
174 | assertEquals(3, metas.size()); |
175 | } | |
176 | }); | |
177 | } | |
178 | }); | |
179 | } | |
180 | ||
181 | @Override | |
182 | protected void start() throws Exception { | |
183 | tmp = File.createTempFile(".test-fanfix", ".library"); | |
184 | tmp.delete(); | |
185 | tmp.mkdir(); | |
186 | ||
68e2c6d2 | 187 | lib = new LocalLibrary(tmp, OutputType.INFO_TEXT, OutputType.CBZ); |
6cac0e45 NR |
188 | } |
189 | ||
190 | @Override | |
191 | protected void stop() throws Exception { | |
192 | IOUtils.deltree(tmp); | |
193 | } | |
194 | ||
fd25eddc NR |
195 | /** |
196 | * Return the (sorted) list of titles present in this list of | |
197 | * {@link MetaData}s. | |
198 | * | |
199 | * @param metas | |
200 | * the meta | |
201 | * | |
202 | * @return the sorted list | |
203 | */ | |
204 | private List<String> titlesAsList(List<MetaData> metas) { | |
205 | List<String> list = new ArrayList<String>(); | |
206 | for (MetaData meta : metas) { | |
207 | list.add(meta.getTitle()); | |
208 | } | |
209 | ||
210 | Collections.sort(list); | |
211 | return list; | |
212 | } | |
213 | ||
6cac0e45 NR |
214 | private Story story(String luid, String title, String source, String author) { |
215 | Story story = new Story(); | |
216 | ||
217 | MetaData meta = new MetaData(); | |
218 | meta.setLuid(luid); | |
219 | meta.setTitle(title); | |
220 | meta.setSource(source); | |
221 | meta.setAuthor(author); | |
222 | story.setMeta(meta); | |
223 | ||
224 | Chapter resume = chapter(0, "Resume"); | |
225 | meta.setResume(resume); | |
226 | ||
227 | List<Chapter> chapters = new ArrayList<Chapter>(); | |
228 | chapters.add(chapter(1, "Chap 1")); | |
229 | chapters.add(chapter(2, "Chap 2")); | |
230 | story.setChapters(chapters); | |
231 | ||
232 | long words = 0; | |
233 | for (Chapter chap : story.getChapters()) { | |
234 | words += chap.getWords(); | |
235 | } | |
236 | meta.setWords(words); | |
237 | ||
238 | return story; | |
239 | } | |
240 | ||
241 | private Chapter chapter(int number, String name) { | |
242 | Chapter chapter = new Chapter(number, name); | |
243 | ||
244 | List<Paragraph> paragraphs = new ArrayList<Paragraph>(); | |
245 | paragraphs.add(new Paragraph(Paragraph.ParagraphType.NORMAL, | |
246 | "some words in this paragraph please thank you", 8)); | |
247 | ||
248 | chapter.setParagraphs(paragraphs); | |
249 | ||
250 | long words = 0; | |
251 | for (Paragraph para : chapter.getParagraphs()) { | |
252 | words += para.getWords(); | |
253 | } | |
254 | chapter.setWords(words); | |
255 | ||
256 | return chapter; | |
257 | } | |
258 | } |