Skip to content

Commit

Permalink
DaVinciDemoTest: Add different types of start pages (#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
johan12345 committed Sep 4, 2016
1 parent c696a76 commit 89f08d1
Show file tree
Hide file tree
Showing 6 changed files with 474 additions and 20 deletions.
44 changes: 27 additions & 17 deletions parser/src/main/java/me/vertretungsplan/parser/DaVinciParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -154,46 +154,56 @@ public SubstitutionSchedule getSubstitutionSchedule() throws IOException, JSONEx

String url = scheduleData.getData().getString("url");
Document doc = Jsoup.parse(httpGet(url, ENCODING));
List<String> dayUrls = getDayUrls(url, doc);
for (String dayUrl : dayUrls) {
Document dayDoc;
if (dayUrl.equals(url)) {
dayDoc = doc;
} else {
dayDoc = Jsoup.parse(httpGet(dayUrl, ENCODING));
}
schedule.addDay(parseDay(dayDoc));
}

schedule.setWebsite(url);
schedule.setClasses(getAllClasses());
schedule.setTeachers(getAllTeachers());

return schedule;
}

@NotNull
static List<String> getDayUrls(String url, Document doc)
throws IOException {
List<String> dayUrls = new ArrayList<>();
if (doc.select("ul.classes").size() > 0) {
// List of classes
Elements classes = doc.select("ul.classes li a");
for (Element klasse : classes) {
String classUrl = new URL(new URL(url), klasse.attr("href")).toString();
Document classDoc = Jsoup.parse(httpGet(classUrl, ENCODING));
schedule.addDay(parseDay(classDoc));
dayUrls.add(new URL(new URL(url), klasse.attr("href")).toString());
}
} else if (doc.select("ul.month").size() > 0) {
// List of days in calendar view
Elements days = doc.select("ul.month li input[onclick]");
for (Element day : days) {
String urlFromOnclick = urlFromOnclick(day.attr("onclick"));
if (urlFromOnclick == null) continue;
String dayUrl = new URL(new URL(url), urlFromOnclick).toString();
Document dayDoc = Jsoup.parse(httpGet(dayUrl, ENCODING));
schedule.addDay(parseDay(dayDoc));
dayUrls.add(new URL(new URL(url), urlFromOnclick).toString());
}
} else if (doc.select("ul.day-index").size() > 0) {
// List of days in list view
Elements days = doc.select("ul.day-index li a");
for (Element day : days) {
String dayUrl = new URL(new URL(url), day.attr("href")).toString();
Document dayDoc = Jsoup.parse(httpGet(dayUrl, ENCODING));
schedule.addDay(parseDay(dayDoc));
dayUrls.add(new URL(new URL(url), day.attr("href")).toString());
}
} else {
// Single day
schedule.addDay(parseDay(doc));
dayUrls.add(url);
}

schedule.setWebsite(url);
schedule.setClasses(getAllClasses());
schedule.setTeachers(getAllTeachers());

return schedule;
return dayUrls;
}

private String urlFromOnclick(String onclick) {
private static String urlFromOnclick(String onclick) {
Pattern pattern = Pattern.compile("window\\.location\\.href='([^']+)'");
Matcher matcher = pattern.matcher(onclick);
if (matcher.find()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,35 @@
import org.junit.Test;

import java.io.IOException;
import java.util.List;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

public class DaVinciDemoTest extends BaseDemoTest {
private String html;
private static final String EXAMPLE_URL = "http://example.com";

private String htmlSingle;
private String htmlDayIndex;
private String htmlMonth;
private String htmlClasses;

private DaVinciParser parser;

@Before
public void setUp() throws JSONException {
html = readResource("/davinci/davinci.html");
htmlSingle = readResource("/davinci/single.html");
htmlDayIndex = readResource("/davinci/dayIndex.html");
htmlMonth = readResource("/davinci/month.html");
htmlClasses = readResource("/davinci/classes.html");
SubstitutionScheduleData scheduleData = new SubstitutionScheduleData();
scheduleData.setData(new JSONObject());
parser = new DaVinciParser(scheduleData, null);
}

@Test
public void demoTest() throws IOException, JSONException {
SubstitutionScheduleDay day = parser.parseDay(Jsoup.parse(html));
SubstitutionScheduleDay day = parser.parseDay(Jsoup.parse(htmlSingle));
assertEquals(new LocalDate(2016, 9, 5), day.getDate());
assertEquals(new LocalDateTime(2016, 9, 2, 13, 32), day.getLastChange());
assertEquals(23, day.getSubstitutions().size());
Expand All @@ -56,5 +66,37 @@ public void demoTest() throws IOException, JSONException {
}
}

@Test
public void testSingle() throws IOException {
List<String> urls = DaVinciParser.getDayUrls(EXAMPLE_URL, Jsoup.parse(htmlSingle));
assertEquals(1, urls.size());
assertEquals(EXAMPLE_URL, urls.get(0));
}

@Test
public void testDayIndex() throws IOException {
List<String> urls = DaVinciParser.getDayUrls(EXAMPLE_URL, Jsoup.parse(htmlDayIndex));
assertEquals(7, urls.size());
for (int i = 0; i < urls.size(); i++) {
assertEquals(EXAMPLE_URL + "/V_DC_00" + String.valueOf(i + 1) + ".html", urls.get(i));
}
}

@Test
public void testMonth() throws IOException {
List<String> urls = DaVinciParser.getDayUrls(EXAMPLE_URL, Jsoup.parse(htmlMonth));
assertEquals(1, urls.size());
assertEquals(EXAMPLE_URL + "/V_DC_001.html", urls.get(0));
}

@Test
public void testClasses() throws IOException {
List<String> urls = DaVinciParser.getDayUrls(EXAMPLE_URL, Jsoup.parse(htmlClasses));
assertEquals(5, urls.size());
assertEquals(EXAMPLE_URL + "/V_CL_58575B54-F93E-4A92-B10A-B3BF19A08F69.html", urls.get(0));
assertEquals(EXAMPLE_URL + "/V_CL_261DEB89-5010-44D1-90C3-1EE56337146E.html", urls.get(1));
assertEquals(EXAMPLE_URL + "/V_CL_09331E7C-4830-4B3F-B1F3-9F76A5735685.html", urls.get(2));
assertEquals(EXAMPLE_URL + "/V_CL_96110190-1050-41A6-AD43-C5F97CC664E9.html", urls.get(3));
assertEquals(EXAMPLE_URL + "/V_CL_FAA7DDCA-574B-4A1F-BEA8-A13CF1BC2C7C.html", urls.get(4));
}
}
94 changes: 94 additions & 0 deletions parser/src/test/resources/davinci/classes.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<!DOCTYPE html>
<!-- Common DAVINCI index template -->
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>DAVINCI</title>
<meta name="description" content="timetable">
<meta name="GENERATOR" content="DAVINCI 6">
<meta name="Author" content="">
<meta name="Keywords" content="DAVINCI,timetable,timetabler,Stundenplanprogramm,Stundenplansoftware,Stundenplan">
<meta http-equiv="expires" content="0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="page-topic" content="daVinci Stundenplan">
<meta name="language" content="de, deutsch, at, ch, german">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="http://www.stueber.de/assets/davinci/css/bootstrap.min.css">
<!-- DAVINCI core CSS -->
<link rel="stylesheet" href="http://www.stueber.de/assets/davinci/sandbox/buttons.css">
<link rel="stylesheet" href="http://www.stueber.de/assets/davinci/css/davinci.index.main.css">
</head>
<body>

<!-- Fixed navbar -->
<div class="navbar navbar-default" role="navigation">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="#">STÜBER SYSTEMS </a>
</div>
</div>
</div>

<div class="container-fluid">
<aside>
<nav>
<ul class="buttons">
<li>
<form><input type="button" class="home-button iconize black" title="zur Startseite"
onClick="window.location.href='http://www.stueber.de'"></form>
</li>
</ul>
</nav>
</aside>
</div>

<div class="container main">
<div class="row">
<div class="col-xs-12 col-sm-12 col-lg-12">
<h1>
Unterrichtsvertretung
</h1>
<ul class="index">
<li>
<ul class="index-group classes">
<li>
<a href="V_CL_58575B54-F93E-4A92-B10A-B3BF19A08F69.html">III KEH 41.1</a>
</li>
<li>
<a href="V_CL_261DEB89-5010-44D1-90C3-1EE56337146E.html">III KEH 41.2</a>
</li>
<li>
<a href="V_CL_09331E7C-4830-4B3F-B1F3-9F76A5735685.html">III VKÄ 51</a>
</li>
<li>
<a href="V_CL_96110190-1050-41A6-AD43-C5F97CC664E9.html">TZ SFA 51</a>
</li>
<li>
<a href="V_CL_FAA7DDCA-574B-4A1F-BEA8-A13CF1BC2C7C.html">VZ FGW 51</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div class="row copyright">
<div class="col-xs-12 col-sm-12 col-lg-12">02-09-2016 12:09 | <a href="http://www.stueber.de" target=_blank>CREATED
BY DAVINCI</a></div>
</div>

</div>

<div class="container">
<div class="row">
<div class="col-xs-12 col-sm-12 col-lg-12">
<hr>
<footer>Copyright 2016 <a href="http://www.stueber.de">STÜBER SYSTEMS </a></footer>
</div>
</div>
</div>

</body>
</html>
98 changes: 98 additions & 0 deletions parser/src/test/resources/davinci/dayIndex.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
<!DOCTYPE html>
<!-- Common DAVINCI index template -->
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>DAVINCI</title>
<meta name="description" content="timetable">
<meta name="GENERATOR" content="DAVINCI 6">
<meta name="Author" content="">
<meta name="Keywords" content="DAVINCI,timetable,timetabler,Stundenplanprogramm,Stundenplansoftware,Stundenplan">
<meta http-equiv="expires" content="0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="page-topic" content="daVinci Stundenplan">
<meta name="language" content="de, deutsch, at, ch, german">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="http://www.stueber.de/assets/davinci/css/bootstrap.min.css">
<!-- DAVINCI core CSS -->
<link rel="stylesheet" href="http://www.stueber.de/assets/davinci/sandbox/buttons.css">
<link rel="stylesheet" href="http://www.stueber.de/assets/davinci/css/davinci.index.main.css">
</head>
<body>

<!-- Fixed navbar -->
<div class="navbar navbar-default" role="navigation">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="#">STÜBER SYSTEMS </a>
</div>
</div>
</div>

<div class="container-fluid">
<aside>
<nav>
<ul class="buttons">
<li>
<form><input type="button" class="home-button iconize black" title="zur Startseite"
onClick="window.location.href=''"></form>
</li>
</ul>
</nav>
</aside>
</div>

<div class="container main">
<div class="schedule-container">
<div class="row">
<div class="col-xs-12 col-sm-12 col-lg-12">
<h1>
Übersicht
</h1>
<ul class="day-index">
<li>
<a href="V_DC_001.html">01.09.2016 Donnerstag</a>
</li>
<li>
<a href="V_DC_002.html">02.09.2016 Freitag</a>
</li>
<li>
<a href="V_DC_003.html">05.09.2016 Montag</a>
</li>
<li>
<a href="V_DC_004.html">06.09.2016 Dienstag</a>
</li>
<li>
<a href="V_DC_005.html">07.09.2016 Mittwoch</a>
</li>
<li>
<a href="V_DC_006.html">08.09.2016 Donnerstag</a>
</li>
<li>
<a href="V_DC_007.html">09.09.2016 Freitag</a>
</li>
</ul>
</div>
</div>
<div class="row copyright">
<div class="col-xs-12 col-sm-12 col-lg-12">01-09-2016 09:44 | <a href="http://www.stueber.de" target=_blank>CREATED
BY DAVINCI</a></div>
</div>
</div>

</div>

<div class="container">
<div class="row">
<div class="col-xs-12 col-sm-12 col-lg-12">
<hr>
<footer>Copyright 2016 <a href="http://www.stueber.de">STÜBER SYSTEMS </a></footer>
</div>
</div>
</div>

</body>
</html>
Loading

0 comments on commit 89f08d1

Please sign in to comment.