17
17
*/
18
18
package ru .mystamps .web .util .extractor ;
19
19
20
+ import org .jsoup .Jsoup ;
21
+ import org .jsoup .nodes .Document ;
22
+ import org .jsoup .nodes .Element ;
23
+
20
24
import org .junit .Before ;
21
25
import org .junit .Rule ;
22
26
import org .junit .Test ;
27
31
import static io .qala .datagen .RandomShortApi .nullOr ;
28
32
import static io .qala .datagen .RandomShortApi .nullOrBlank ;
29
33
import static io .qala .datagen .RandomValue .between ;
34
+
30
35
import static org .hamcrest .MatcherAssert .assertThat ;
31
36
import static org .hamcrest .Matchers .equalTo ;
32
37
import static org .hamcrest .Matchers .is ;
38
+ import static org .hamcrest .Matchers .nullValue ;
33
39
34
40
public class SiteParserTest {
35
41
@@ -285,6 +291,60 @@ public void toStringShouldReturnName() {
285
291
assertThat (parser .toString (), equalTo (expectedName ));
286
292
}
287
293
294
+ //
295
+ // Tests for extractCategory()
296
+ //
297
+
298
+ @ Test
299
+ public void extractCategoryShouldReturnNullWhenLocatorsAreNotSet () {
300
+ parser .setCategoryLocator (null );
301
+ parser .setShortDescriptionLocator (null );
302
+ Element doc = createEmptyDocument ();
303
+
304
+ String category = parser .extractCategory (doc );
305
+
306
+ assertThat (category , is (nullValue ()));
307
+ }
308
+
309
+ @ Test
310
+ public void extractCategoryShouldReturnNullWhenElementNotFound () {
311
+ parser .setCategoryLocator (Random .jsoupLocator ());
312
+ Element doc = createEmptyDocument ();
313
+
314
+ String category = parser .extractCategory (doc );
315
+
316
+ assertThat (category , is (nullValue ()));
317
+ }
318
+
319
+ @ Test
320
+ public void extractCategoryShouldReturnTextOfCategoryLocator () {
321
+ parser .setCategoryLocator ("#category" );
322
+
323
+ String expectedName = Random .categoryName ();
324
+ String html = String .format ("<div id='category'>%s</div>" , expectedName );
325
+ Element doc = createDocumentFromText (html );
326
+
327
+ String category = parser .extractCategory (doc );
328
+
329
+ String msg = String .format ("couldn't extract a category from '%s'" , doc );
330
+ assertThat (msg , category , equalTo (expectedName ));
331
+ }
332
+
333
+ @ Test
334
+ public void extractCategoryShouldReturnTextOfShortDescriptionLocator () {
335
+ parser .setCategoryLocator (null );
336
+ parser .setShortDescriptionLocator ("#desc" );
337
+
338
+ String expectedName = Random .categoryName ();
339
+ String html = String .format ("<div id='desc'>%s</div>" , expectedName );
340
+ Element doc = createDocumentFromText (html );
341
+
342
+ String category = parser .extractCategory (doc );
343
+
344
+ String msg = String .format ("couldn't extract a category from '%s'" , doc );
345
+ assertThat (msg , category , equalTo (expectedName ));
346
+ }
347
+
288
348
private static String describe (SiteParser parser ) {
289
349
StringBuilder sb = new StringBuilder ();
290
350
sb .append ("SiteParser[name=" )
@@ -307,4 +367,13 @@ private static String describe(SiteParser parser) {
307
367
return sb .toString ();
308
368
}
309
369
370
+ private static Element createDocumentFromText (String html ) {
371
+ Document doc = Jsoup .parseBodyFragment (html );
372
+ return doc .body ();
373
+ }
374
+
375
+ private static Element createEmptyDocument () {
376
+ return createDocumentFromText ("" );
377
+ }
378
+
310
379
}
0 commit comments