diff --git a/cli/pom.xml b/cli/pom.xml index 67ad2b9..f42cef2 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -7,7 +7,7 @@ edu.kit.aifb.atks mensascraper - 1.1.4 + 1.1.5 edu.kit.aifb.atks.mensascraper diff --git a/cli/src/main/java/edu/kit/aifb/atks/mensascraper/cli/Main.java b/cli/src/main/java/edu/kit/aifb/atks/mensascraper/cli/Main.java index 7c13d60..cd14fcf 100644 --- a/cli/src/main/java/edu/kit/aifb/atks/mensascraper/cli/Main.java +++ b/cli/src/main/java/edu/kit/aifb/atks/mensascraper/cli/Main.java @@ -11,7 +11,7 @@ public static void main(String[] args) { final var scraper = new KITMensaScraper(); final var day = args.length > 0 ? LocalDate.parse(args[0]) - : LocalDate.now(); + : LocalDate.now(); // TODO: make time-zone aware -> always use "now" for time zone the requested mensa is located in final var meals = scraper.fetchMeals(MensaLocation.ADENAUERRING, day); System.out.println(new Gson().toJson(meals)); } diff --git a/lib/pom.xml b/lib/pom.xml index 9c15374..bd18ebb 100644 --- a/lib/pom.xml +++ b/lib/pom.xml @@ -7,12 +7,12 @@ edu.kit.aifb.atks mensascraper - 1.1.4 + 1.1.5 edu.kit.aifb.atks.mensascraper lib - 1.1.4 + 1.1.5 mensascraper-lib jar diff --git a/lib/src/main/java/edu/kit/aifb/atks/mensascraper/lib/KITMensaScraper.java b/lib/src/main/java/edu/kit/aifb/atks/mensascraper/lib/KITMensaScraper.java index 5b0d71b..e9ad010 100644 --- a/lib/src/main/java/edu/kit/aifb/atks/mensascraper/lib/KITMensaScraper.java +++ b/lib/src/main/java/edu/kit/aifb/atks/mensascraper/lib/KITMensaScraper.java @@ -109,6 +109,8 @@ private static List parseMeals(Element root, LocalDate day) { .parallel() .map(KITMensaScraper::parseSingleLine) .flatMap(Collection::stream) + .filter(m -> m.getPrice() > 0) + .distinct() .collect(Collectors.toList()); } @@ -138,8 +140,9 @@ private static List parseSingleLine(Element el) { if (isNutrition) { // parse nutrition info + // nutrition info always comes second, after the meal entry if (currentMeal == null) { - throw new MensaScraperException("got nutrition table without preceeding meal"); + throw new MensaScraperException("got nutrition table without preceding meal"); } currentMeal.setKcal(parseKcal(mealRow)); currentMeal.setProteins(parseProteins(mealRow)); @@ -150,15 +153,12 @@ private static List parseSingleLine(Element el) { currentMeal.setSalt(parseSalt(mealRow)); } else { // parse meal info - if (currentMeal != null) { - meals.add(currentMeal); - } - currentMeal = new MensaMeal(); currentMeal.setName(parseMealName(mealRow)); currentMeal.setAdditives(parseMealAdditives(mealRow)); currentMeal.setPrice(parseMealPrice(mealRow)); currentMeal.setType(parseMealType(mealRow)); + meals.add(currentMeal); } } diff --git a/lib/src/test/java/edu/kit/aifb/atks/mensascraper/lib/KITMensaScraperIntegrationTest.java b/lib/src/test/java/edu/kit/aifb/atks/mensascraper/lib/KITMensaScraperIntegrationTest.java index 642f583..5e6349b 100644 --- a/lib/src/test/java/edu/kit/aifb/atks/mensascraper/lib/KITMensaScraperIntegrationTest.java +++ b/lib/src/test/java/edu/kit/aifb/atks/mensascraper/lib/KITMensaScraperIntegrationTest.java @@ -5,7 +5,8 @@ import org.junit.jupiter.api.Test; import java.time.DayOfWeek; -import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.time.temporal.TemporalAdjusters; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -28,7 +29,7 @@ void tearDown() { void testFetchMealsLive() { // fetch live data for today, if today is a weekday or next monday otherwise // note: this test will fail when run on days when canteen is closed, but should be acceptable - final var now = LocalDate.now(); + final var now = ZonedDateTime.now(ZoneId.of("Europe/Berlin")).toLocalDate(); final var targetDate = now.getDayOfWeek().getValue() >= DayOfWeek.SATURDAY.getValue() ? now.with(TemporalAdjusters.next(DayOfWeek.MONDAY)) : now; diff --git a/lib/src/test/java/edu/kit/aifb/atks/mensascraper/lib/KITMensaScraperTest.java b/lib/src/test/java/edu/kit/aifb/atks/mensascraper/lib/KITMensaScraperTest.java index ce32437..e384cde 100644 --- a/lib/src/test/java/edu/kit/aifb/atks/mensascraper/lib/KITMensaScraperTest.java +++ b/lib/src/test/java/edu/kit/aifb/atks/mensascraper/lib/KITMensaScraperTest.java @@ -62,16 +62,18 @@ void testFetchMeals() throws IOException, InterruptedException { verify(httpClient, times(2)).send(captor1.capture(), any()); assertEquals("kw=19", captor1.getValue().uri().getQuery()); - assertEquals(23, tuesday.size()); - assertEquals(24, wednesday.size()); + assertEquals(32, tuesday.size()); + assertEquals(32, wednesday.size()); + assertEquals(tuesday.size(), tuesday.stream().distinct().count()); + assertEquals(wednesday.size(), wednesday.stream().distinct().count()); assertEquals("Mini Frühlingsrollen mit Sweet Chili Soße und Mienudeln", tuesday.get(2).getName()); - assertEquals("Hausgemachte Gnocchi in Bechamelsoße mit Chorizo", tuesday.get(5).getName()); // bold + normal font + assertEquals("Hausgemachte Gnocchi in Bechamelsoße mit Chorizo", tuesday.get(6).getName()); // bold + normal font assertEquals(3, tuesday.get(2).getAdditives().size()); assertEquals("Sa", tuesday.get(2).getAdditives().get(0)); assertEquals(3.8f, tuesday.get(2).getPrice()); - assertEquals(3.5f, tuesday.get(5).getPrice()); + assertEquals(3.5f, tuesday.get(6).getPrice()); assertEquals(1147.0f, tuesday.get(2).getKcal()); - assertEquals(1121.0f, tuesday.get(5).getKcal()); + assertEquals(1121.0f, tuesday.get(6).getKcal()); assertEquals(23.0f, tuesday.get(2).getProteins()); assertEquals(MensaLine.LINIE_2, tuesday.get(2).getLine()); assertEquals(MensaMealType.VEGAN, tuesday.get(2).getType()); diff --git a/pom.xml b/pom.xml index 18ccfda..f42966c 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ edu.kit.aifb.atks mensascraper - 1.1.4 + 1.1.5 pom