From 678a97f1403881544c2fe1529b94cff9710cd12c Mon Sep 17 00:00:00 2001 From: Seil0 Date: Tue, 3 Mar 2020 19:31:12 +0100 Subject: [PATCH] fix MensaParser & update spring boot, kotlin * fixed the MensaParser(), it should now work more reliable * updated spring boot 2.2.4 -> 2.2.5 * updated kotlin 1.3.61 -> 1.3.70 * clean up MensaParserTest --- build.gradle | 6 +- .../mosad/thecitadelofricks/APIController.kt | 2 +- .../hsoparser/MensaParser.kt | 6 +- .../hsoparser/MensaParserTest.kt | 16 +- .../hsoparser/TimetableParserTest.kt | 6 +- .../resources/expected/Mensa_empty-week.txt | 1 + .../resources/expected/Mensa_normal-week.txt | 1 + ..._expected.txt => Timetable_empty-week.txt} | 0 ...expected.txt => Timetable_normal-week.txt} | 0 .../resources/html/Mensa_normal-week.html | 483 +++++++++--------- 10 files changed, 256 insertions(+), 265 deletions(-) create mode 100644 src/test/resources/expected/Mensa_empty-week.txt create mode 100644 src/test/resources/expected/Mensa_normal-week.txt rename src/test/resources/expected/{Timetable_empty-week_expected.txt => Timetable_empty-week.txt} (100%) rename src/test/resources/expected/{Timetable_normal-week_expected.txt => Timetable_normal-week.txt} (100%) diff --git a/build.gradle b/build.gradle index f7bbc41..57fcdf9 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ plugins { - id 'org.jetbrains.kotlin.jvm' version '1.3.61' - id 'org.jetbrains.kotlin.plugin.spring' version '1.3.61' - id 'org.springframework.boot' version '2.2.4.RELEASE' + id 'org.jetbrains.kotlin.jvm' version '1.3.70' + id 'org.jetbrains.kotlin.plugin.spring' version '1.3.70' + id 'org.springframework.boot' version '2.2.5.RELEASE' id 'io.spring.dependency-management' version '1.0.9.RELEASE' } diff --git a/src/main/kotlin/org/mosad/thecitadelofricks/APIController.kt b/src/main/kotlin/org/mosad/thecitadelofricks/APIController.kt index d5fe255..8cf0420 100644 --- a/src/main/kotlin/org/mosad/thecitadelofricks/APIController.kt +++ b/src/main/kotlin/org/mosad/thecitadelofricks/APIController.kt @@ -48,7 +48,7 @@ class APIController { companion object { const val apiVersion = "1.1.4" - const val softwareVersion = "1.2.1" + const val softwareVersion = "1.2.2" val startTime = System.currentTimeMillis() / 1000 } diff --git a/src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/MensaParser.kt b/src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/MensaParser.kt index 4ff1c7d..ee323c4 100644 --- a/src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/MensaParser.kt +++ b/src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/MensaParser.kt @@ -63,9 +63,9 @@ class MensaParser { .forEachIndexed { dayIndex, day -> val strDay = day.select("h3").text() - day.select("div.menu-info").forEachIndexed { mealIndex, meal -> - val heading = day.select("h4")[mealIndex].text() - val parts = ArrayList(meal.html().substringBefore("
\n").replace("\n", "").split("
")) + day.select("div.row").forEachIndexed { mealIndex, meal -> + val heading = meal.select("h4.menu-header").text() + val parts = ArrayList(meal.select("div.menu-info").html().substringBefore("
")) val additives = meal.select("span.show-with-allergenes").text() parts.removeIf { x -> x.isEmpty() || x.isBlank() } diff --git a/src/test/kotlin/org/mosad/thecitadelofricks/hsoparser/MensaParserTest.kt b/src/test/kotlin/org/mosad/thecitadelofricks/hsoparser/MensaParserTest.kt index 55a4394..673017e 100644 --- a/src/test/kotlin/org/mosad/thecitadelofricks/hsoparser/MensaParserTest.kt +++ b/src/test/kotlin/org/mosad/thecitadelofricks/hsoparser/MensaParserTest.kt @@ -1,7 +1,7 @@ /** * TheCitadelofRicks * - * Copyright 2019 + * Copyright 2019-2020 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,13 +35,9 @@ internal class MensaParserTest { val htmlFile = File(MensaParserTest::class.java.getResource("/html/Mensa_normal-week.html").path) val htmlDoc = Jsoup.parse(htmlFile,"UTF-8", "https://www.swfr.de/") val mensaWeek = MensaParser().parseMensaMenu(htmlDoc) + val expectedOutput = MensaParserTest::class.java.getResource("/expected/Mensa_normal-week.txt").readText() - // maybe we can find another way for the comparison - Assertions.assertEquals( - "MensaWeek(days=[Meals(meals=[Meal(day=Montag 03.07., heading=Essen 1, parts=[Gemüseauflauf , Frischkäse-Paprikasauce , Blattsalat Kennzeichnungen/Zusatzstoffe: 9 Kennzeichnungen/Zusatzstoffe: 9, enthält Allergene: Ei,ML,Lak], additives=Kennzeichnungen/Zusatzstoffe: 9 enthält Allergene: Ei,ML,Lak), Meal(day=Montag 03.07., heading=Essen 2, parts=[Schweinesteak , Pfeffer-Rahmsauce , Country Potatoes , Blattsalat Kennzeichnungen/Zusatzstoffe: 1,5 Kennzeichnungen/Zusatzstoffe: 1,5, enthält Allergene: Gl,GlW,GlG,ML,Lak], additives=Kennzeichnungen/Zusatzstoffe: 1,5 enthält Allergene: Gl,GlW,GlG,ML,Lak), Meal(day=Montag 03.07., heading=Buffet, parts=[Grill und Salatbar , Asiatisches aus dem Wok , Fleisch- und Fischspezialitäten , Pasta-, Reis und Kartoffelvariationen , Gemüse], additives=)]), Meals(meals=[Meal(day=Dienstag 04.07., heading=Essen 1, parts=[Riesenrösti , Rahmchampignons , Blattsalat enthält Allergene: Gl,GlW,GlG,ML,Lak], additives=enthält Allergene: Gl,GlW,GlG,ML,Lak), Meal(day=Dienstag 04.07., heading=Essen 2, parts=[Spaghetti , Sauce Bolognese , Geriebener Hartkäse , Blattsalat Kennzeichnungen/Zusatzstoffe: 15 Kennzeichnungen/Zusatzstoffe: 15, enthält Allergene: Ei,Se,Gl,GlW,ML], additives=Kennzeichnungen/Zusatzstoffe: 15 enthält Allergene: Ei,Se,Gl,GlW,ML), Meal(day=Dienstag 04.07., heading=Buffet, parts=[Grill und Salatbar , Asiatisches aus dem Wok , Fleisch- und Fischspezialitäten , Pasta-, Reis und Kartoffelvariationen , Gemüse], additives=)]), Meals(meals=[Meal(day=Mittwoch 05.07., heading=Essen 1, parts=[Frühlingsrollen , Feuriger Chilidip , Patnareis , Wokgemüsepfanne Kennzeichnungen/Zusatzstoffe: 9 Kennzeichnungen/Zusatzstoffe: 9, enthält Allergene: Ei,So,Sn,Se,Sf,Gl,GlW,ML,Lak], additives=Kennzeichnungen/Zusatzstoffe: 9 enthält Allergene: Ei,So,Sn,Se,Sf,Gl,GlW,ML,Lak), Meal(day=Mittwoch 05.07., heading=Essen 2, parts=[Bratwurstschnecke , Bratenjus , Kartoffelbrei , Karottengemüse Kennzeichnungen/Zusatzstoffe: 1,8 Kennzeichnungen/Zusatzstoffe: 1,8, enthält Allergene: Sn,Se,Gl,GlW,GlG,ML,Lak], additives=Kennzeichnungen/Zusatzstoffe: 1,8 enthält Allergene: Sn,Se,Gl,GlW,GlG,ML,Lak), Meal(day=Mittwoch 05.07., heading=Buffet, parts=[Grill und Salatbar , Asiatisches aus dem Wok , Fleisch- und Fischspezialitäten , Pasta-, Reis und Kartoffelvariationen , Gemüse], additives=)]), Meals(meals=[Meal(day=Donnerstag 06.07., heading=Essen 1, parts=[Farfalle tricolore , Gorgonzola-Spinatsauce , Endiviensalat enthält Allergene: Gl,GlW,ML], additives=enthält Allergene: Gl,GlW,ML), Meal(day=Donnerstag 06.07., heading=Essen 2, parts=[Paniertes Seelachsfilet MSC , Remouladensauce , Salzkartoffeln , Brokkoligemüse Kennzeichnungen/Zusatzstoffe: 9,MSC Kennzeichnungen/Zusatzstoffe: 9,MSC, enthält Allergene: Ei,Sn,Fi,Gl,GlW,ML,Lak], additives=Kennzeichnungen/Zusatzstoffe: 9,MSC enthält Allergene: Ei,Sn,Fi,Gl,GlW,ML,Lak), Meal(day=Donnerstag 06.07., heading=Buffet, parts=[Grill und Salatbar , Asiatisches aus dem Wok , Fleisch- und Fischspezialitäten , Pasta-, Reis und Kartoffelvariationen , Gemüse], additives=)]), Meals(meals=[Meal(day=Freitag 07.07., heading=Essen 1, parts=[Italienischer Nudelauflauf mit Gemüse , Tomatenragout , Blattsalat enthält Allergene: Gl,GlW,ML,Lak], additives=enthält Allergene: Gl,GlW,ML,Lak), Meal(day=Freitag 07.07., heading=Essen 2, parts=[Hähnchen-Saté-Spieß , Erdnusssauce , Langkornreis , Karotten-Erbsengemüse enthält Allergene: Er,So,Kr,Fi,We,Gl,GlW,ML,Lak], additives=enthält Allergene: Er,So,Kr,Fi,We,Gl,GlW,ML,Lak), Meal(day=Freitag 07.07., heading=Buffet, parts=[Grill und Salatbar , Asiatisches aus dem Wok , Fleisch- und Fischspezialitäten , Pasta-, Reis und Kartoffelvariationen , Gemüse], additives=)]), Meals(meals=[]), Meals(meals=[])])", - mensaWeek.toString() - ) - + Assertions.assertEquals(expectedOutput, mensaWeek.toString()) } @Test @@ -49,11 +45,9 @@ internal class MensaParserTest { val htmlFile = File(MensaParserTest::class.java.getResource("/html/Mensa_empty-week.html").path) val htmlDoc = Jsoup.parse(htmlFile,"UTF-8", "https://www.swfr.de/") val mensaWeek = MensaParser().parseMensaMenu(htmlDoc) + val expectedOutput = MensaParserTest::class.java.getResource("/expected/Mensa_empty-week.txt").readText() - Assertions.assertEquals( - "MensaWeek(days=[Meals(meals=[]), Meals(meals=[]), Meals(meals=[]), Meals(meals=[]), Meals(meals=[]), Meals(meals=[]), Meals(meals=[])])", - mensaWeek.toString() - ) + Assertions.assertEquals(expectedOutput, mensaWeek.toString()) } // TODO add test for special days ie. public holiday diff --git a/src/test/kotlin/org/mosad/thecitadelofricks/hsoparser/TimetableParserTest.kt b/src/test/kotlin/org/mosad/thecitadelofricks/hsoparser/TimetableParserTest.kt index 1a0f356..9bc7bde 100644 --- a/src/test/kotlin/org/mosad/thecitadelofricks/hsoparser/TimetableParserTest.kt +++ b/src/test/kotlin/org/mosad/thecitadelofricks/hsoparser/TimetableParserTest.kt @@ -1,7 +1,7 @@ /** * TheCitadelofRicks * - * Copyright 2019 + * Copyright 2019-2020 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,7 +34,7 @@ class TimetableParserTest { val htmlFile = File(TimetableParserTest::class.java.getResource("/html/Timetable_normal-week.html").path) val htmlDoc = Jsoup.parse(htmlFile,"UTF-8", "https://www.hs-offenburg.de/") val actualTimetable = TimetableParser().parseTimeTable(htmlDoc).toString().trim() - val expectedTimetable = File(TimetableParserTest::class.java.getResource("/expected/Timetable_normal-week_expected.txt").toURI()).readText().trim() + val expectedTimetable = TimetableParserTest::class.java.getResource("/expected/Timetable_normal-week.txt").readText().trim() Assertions.assertEquals(expectedTimetable, actualTimetable) } @@ -44,7 +44,7 @@ class TimetableParserTest { val htmlFile = File(TimetableParserTest::class.java.getResource("/html/Timetable_empty-week.html").path) val htmlDoc = Jsoup.parse(htmlFile,"UTF-8", "https://www.hs-offenburg.de/") val actualTimetable = TimetableParser().parseTimeTable(htmlDoc).toString().trim() - val expectedTimetable = File(TimetableParserTest::class.java.getResource("/expected/Timetable_empty-week_expected.txt").toURI()).readText().trim() + val expectedTimetable = TimetableParserTest::class.java.getResource("/expected/Timetable_empty-week.txt").readText().trim() Assertions.assertEquals(expectedTimetable, actualTimetable) } diff --git a/src/test/resources/expected/Mensa_empty-week.txt b/src/test/resources/expected/Mensa_empty-week.txt new file mode 100644 index 0000000..1f734ca --- /dev/null +++ b/src/test/resources/expected/Mensa_empty-week.txt @@ -0,0 +1 @@ +MensaWeek(days=[Meals(meals=[Meal(day=Montag 12.08., heading=, parts=[], additives=)]), Meals(meals=[Meal(day=Dienstag 13.08., heading=, parts=[], additives=)]), Meals(meals=[Meal(day=Mittwoch 14.08., heading=, parts=[], additives=)]), Meals(meals=[Meal(day=Donnerstag 15.08., heading=, parts=[], additives=)]), Meals(meals=[Meal(day=Freitag 16.08., heading=, parts=[], additives=)]), Meals(meals=[Meal(day=Samstag 17.08., heading=, parts=[], additives=)]), Meals(meals=[])]) \ No newline at end of file diff --git a/src/test/resources/expected/Mensa_normal-week.txt b/src/test/resources/expected/Mensa_normal-week.txt new file mode 100644 index 0000000..945337d --- /dev/null +++ b/src/test/resources/expected/Mensa_normal-week.txt @@ -0,0 +1 @@ +MensaWeek(days=[Meals(meals=[Meal(day=Montag 09.03., heading=Essen 1, parts=[Kartoffel-Frischkäsebratling , Gemüseragout Toskana , Beilagensalat ], additives=enthält Allergene: Se,Gl,GlW,ML), Meal(day=Montag 09.03., heading=Essen 2, parts=[Schweineschnitzel Wiener Art , Bratensauce , Pommes frites , Mixsalat ], additives=Kennzeichnungen/Zusatzstoffe: sch enthält Allergene: Gl,GlW,GlG), Meal(day=Montag 09.03., heading=Buffet, parts=[Grill und Salatbar , Asiatisches aus dem Wok , Fleisch- und Fischspezialitäten , Pasta-, Reis und Kartoffelvariationen , Gemüse ], additives=)]), Meals(meals=[Meal(day=Dienstag 10.03., heading=Essen 1, parts=[Tortellini mit Gemüsefüllung , Tomatensauce , Geriebener Hartkäse , Beilagensalat ], additives=Kennzeichnungen/Zusatzstoffe: 6 enthält Allergene: Ei,Se,Gl,GlW,ML), Meal(day=Dienstag 10.03., heading=Essen 2, parts=[Frikadelle , Champignon-Rahmsauce , Bauernspätzle , Blattsalat ], additives=Kennzeichnungen/Zusatzstoffe: sch,ri enthält Allergene: Ei,Gl,GlW,GlG,ML), Meal(day=Dienstag 10.03., heading=Buffet, parts=[Grill und Salatbar , Asiatisches aus dem Wok , Fleisch- und Fischspezialitäten , Pasta-, Reis und Kartoffelvariationen , Gemüse ], additives=)]), Meals(meals=[Meal(day=Mittwoch 11.03., heading=Essen 1, parts=[Gebratener Gemüsereis Nasi Goreng , Raita , Mixsalat ], additives=Kennzeichnungen/Zusatzstoffe: 5 enthält Allergene: So,Sn,Se,Gl,GlW,ML), Meal(day=Mittwoch 11.03., heading=Essen 2, parts=[Kalbsbratwurst , Bratensauce , Kartoffelbrei , Apfelrotkraut ], additives=Kennzeichnungen/Zusatzstoffe: sch,5,6,8,ri enthält Allergene: Sn,Se,Sf,Gl,GlW,GlG,ML), Meal(day=Mittwoch 11.03., heading=Buffet, parts=[Grill und Salatbar , Asiatisches aus dem Wok , Fleisch- und Fischspezialitäten , Pasta-, Reis und Kartoffelvariationen , Gemüse ], additives=)]), Meals(meals=[Meal(day=Donnerstag 12.03., heading=Essen 1, parts=[Spaghetti , Chinagemüse , Sauce süß-sauer , Geriebener Hartkäse , Mixsalat ], additives=Kennzeichnungen/Zusatzstoffe: 5,6 enthält Allergene: Ei,Sn,Se,Sf,Gl,GlW,GlG,ML), Meal(day=Donnerstag 12.03., heading=Essen 2, parts=[Paniertes Seelachsfilet , Sesam-Mayonnaise , Salzkartoffeln , Karottenmix mit Brokkoli und Bohnen ], additives=Kennzeichnungen/Zusatzstoffe: nF enthält Allergene: Ei,Sn,Fi,Sa,Gl,GlW), Meal(day=Donnerstag 12.03., heading=Buffet, parts=[Grill und Salatbar , Asiatisches aus dem Wok , Fleisch- und Fischspezialitäten , Pasta-, Reis und Kartoffelvariationen , Gemüse ], additives=)]), Meals(meals=[Meal(day=Freitag 13.03., heading=Essen 1, parts=[Kartoffel-Gorgonzolagratin , Brokkoligemüse , Beilagensalat ], additives=enthält Allergene: ML), Meal(day=Freitag 13.03., heading=Essen 2, parts=[Hähnchenbrustfilet , Apfel-Rahmsauce , Mandelreis , Karottengemüse ], additives=Kennzeichnungen/Zusatzstoffe: 5 enthält Allergene: Gl,GlW,GlG,Nu,NM,ML), Meal(day=Freitag 13.03., heading=Buffet, parts=[Grill und Salatbar , Asiatisches aus dem Wok , Fleisch- und Fischspezialitäten , Pasta-, Reis und Kartoffelvariationen , Gemüse ], additives=)]), Meals(meals=[Meal(day=Samstag 14.03., heading=, parts=[], additives=)]), Meals(meals=[])]) \ No newline at end of file diff --git a/src/test/resources/expected/Timetable_empty-week_expected.txt b/src/test/resources/expected/Timetable_empty-week.txt similarity index 100% rename from src/test/resources/expected/Timetable_empty-week_expected.txt rename to src/test/resources/expected/Timetable_empty-week.txt diff --git a/src/test/resources/expected/Timetable_normal-week_expected.txt b/src/test/resources/expected/Timetable_normal-week.txt similarity index 100% rename from src/test/resources/expected/Timetable_normal-week_expected.txt rename to src/test/resources/expected/Timetable_normal-week.txt diff --git a/src/test/resources/html/Mensa_normal-week.html b/src/test/resources/html/Mensa_normal-week.html index 9aa17f3..69c10a0 100644 --- a/src/test/resources/html/Mensa_normal-week.html +++ b/src/test/resources/html/Mensa_normal-week.html @@ -1,28 +1,23 @@
-