Browse Source

added junit test for MensaParser

* updated kotlin 1.3.31 -> 1.3.41
* updated spring boot 2.1.5 -> 2.1.7
* updated coroutines 1.2.1 -> 1.2.2
* reworked MensaParser to make it testable
pull/18/head
Jannik 3 years ago
parent
commit
a0fceccc2f
Signed by: Seil0
GPG Key ID: E8459F3723C52C24
  1. 12
      build.gradle
  2. 35
      src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/MensaParser.kt
  3. 44
      src/test/kotlin/org/mosad/thecitadelofricks/hsoparser/MensaParserTest.kt
  4. 134
      src/test/resources/html/Mensa_empty-week.html
  5. 518
      src/test/resources/html/Mensa_normal-week.html

12
build.gradle

@ -1,7 +1,7 @@
buildscript {
ext.kotlin_version = '1.3.31'
ext.spring_boot_version = '2.1.5.RELEASE'
ext.kotlin_version = '1.3.41'
ext.spring_boot_version = '2.1.7.RELEASE'
repositories {
jcenter()
@ -19,15 +19,21 @@ apply plugin: 'kotlin-spring'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
test {
useJUnitPlatform()
}
repositories {
jcenter()
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.2.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.2.2"
implementation 'org.jsoup:jsoup:1.12.1'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation("org.junit.jupiter:junit-jupiter:5.5.1")
}
compileKotlin {

35
src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/MensaParser.kt

@ -23,6 +23,7 @@
package org.mosad.thecitadelofricks.hsoparser
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.mosad.thecitadelofricks.Meal
import org.mosad.thecitadelofricks.MensaWeek
import org.slf4j.LoggerFactory
@ -33,16 +34,33 @@ class MensaParser {
var logger: org.slf4j.Logger = LoggerFactory.getLogger(MensaParser::class.java)
/**
* returns the mensa menu for a week
* returns the mensa's menu for a week
* @param mensaMenuURL the url to a mensa menu (swfr)
* @return the menu plan found at menuURL or null if the request was not successful
* @return the mensa's menu as MensaWeek found at menuURL or null if the request was not successful
*/
fun getMensaMenu(mensaMenuURL: String): MensaWeek? {
val mealWeekList = MensaWeek()
try {
return try {
val menuHTML = Jsoup.connect(mensaMenuURL).timeout(15000).get()
parseMensaMenu(menuHTML)
} catch (ex: SocketTimeoutException) {
logger.warn("timeout from $mensaMenuURL, updating on next attempt!")
null
} catch (gex: Exception) {
logger.error("general MensaParser error", gex)
null
}
}
/**
* parse the mensa's menu from the html document
* @param htmlDoc the html document containing the menu
* @return the mensa's menu as MensaWeek
*/
fun parseMensaMenu(htmlDoc: Document): MensaWeek? {
val mealWeekList = MensaWeek()
menuHTML.select("#speiseplan-tabs").select("div.tab-content").select("div.menu-tagesplan")
try {
htmlDoc.select("#speiseplan-tabs").select("div.tab-content").select("div.menu-tagesplan")
.forEachIndexed { dayIndex, day ->
val strDay = day.select("h3").text()
@ -56,11 +74,8 @@ class MensaParser {
}
}
} catch (ex: SocketTimeoutException) {
logger.warn("timeout from $mensaMenuURL, updating on next attempt!")
return null
} catch (gex: Exception) {
logger.error("general MensaParser error", gex)
} catch (pex: Exception) {
logger.error("error while parsing the html file", pex)
return null
}

44
src/test/kotlin/org/mosad/thecitadelofricks/hsoparser/MensaParserTest.kt

@ -0,0 +1,44 @@
package org.mosad.thecitadelofricks.hsoparser
import org.jsoup.Jsoup
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import java.io.File
internal class MensaParserTest {
private val mensaMenuURL = "https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/"
@Test
fun parseMensaMenuNormalWeek() {
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)
// 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 <span class=\"zusatzsstoffe hide-with-allergenes\">Kennzeichnungen/Zusatzstoffe: 9</span> <span class=\"zusatzsstoffe show-with-allergenes\">Kennzeichnungen/Zusatzstoffe: 9, enthält Allergene: Ei,ML,Lak</span>], 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 <span class=\"zusatzsstoffe hide-with-allergenes\">Kennzeichnungen/Zusatzstoffe: 1,5</span> <span class=\"zusatzsstoffe show-with-allergenes\">Kennzeichnungen/Zusatzstoffe: 1,5, enthält Allergene: Gl,GlW,GlG,ML,Lak</span>], 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 <span class=\"zusatzsstoffe show-with-allergenes\">enthält Allergene: Gl,GlW,GlG,ML,Lak</span>], 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 <span class=\"zusatzsstoffe hide-with-allergenes\">Kennzeichnungen/Zusatzstoffe: 15</span> <span class=\"zusatzsstoffe show-with-allergenes\">Kennzeichnungen/Zusatzstoffe: 15, enthält Allergene: Ei,Se,Gl,GlW,ML</span>], 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 <span class=\"zusatzsstoffe hide-with-allergenes\">Kennzeichnungen/Zusatzstoffe: 9</span> <span class=\"zusatzsstoffe show-with-allergenes\">Kennzeichnungen/Zusatzstoffe: 9, enthält Allergene: Ei,So,Sn,Se,Sf,Gl,GlW,ML,Lak</span>], 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 <span class=\"zusatzsstoffe hide-with-allergenes\">Kennzeichnungen/Zusatzstoffe: 1,8</span> <span class=\"zusatzsstoffe show-with-allergenes\">Kennzeichnungen/Zusatzstoffe: 1,8, enthält Allergene: Sn,Se,Gl,GlW,GlG,ML,Lak</span>], 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 <span class=\"zusatzsstoffe show-with-allergenes\">enthält Allergene: Gl,GlW,ML</span>], additives=enthält Allergene: Gl,GlW,ML), Meal(day=Donnerstag 06.07., heading=Essen 2, parts=[Paniertes Seelachsfilet MSC , Remouladensauce , Salzkartoffeln , Brokkoligemüse <span class=\"zusatzsstoffe hide-with-allergenes\">Kennzeichnungen/Zusatzstoffe: 9,MSC</span> <span class=\"zusatzsstoffe show-with-allergenes\">Kennzeichnungen/Zusatzstoffe: 9,MSC, enthält Allergene: Ei,Sn,Fi,Gl,GlW,ML,Lak</span>], 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 <span class=\"zusatzsstoffe show-with-allergenes\">enthält Allergene: Gl,GlW,ML,Lak</span>], 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 <span class=\"zusatzsstoffe show-with-allergenes\">enthält Allergene: Er,So,Kr,Fi,We,Gl,GlW,ML,Lak</span>], 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()
)
}
@Test
fun parseMensaMenuEmptyWeek() {
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)
Assertions.assertEquals(
"MensaWeek(days=[Meals(meals=[]), Meals(meals=[]), Meals(meals=[]), Meals(meals=[]), Meals(meals=[]), Meals(meals=[]), Meals(meals=[])])",
mensaWeek.toString()
)
}
// TODO add test for special days ie. public holiday
@Test
fun getMenuLinkNextWeek() {
val urlNextWeek = MensaParser().getMenuLinkNextWeek(mensaMenuURL) // this need a connection to the swfr server
Assertions.assertNotNull(urlNextWeek)
}
}

134
src/test/resources/html/Mensa_empty-week.html

@ -0,0 +1,134 @@
<div id="speiseplan-tabs">
<div id="tab-menu-container" class="row">
<div class="col-md-1 col-xs-6"></div>
<div class="col-md-10">
<ul class="nav classic-tabs tabs-primary" role="tablist">
<li class="col-md-2"><a href="#tab-mon" class="nav-link" data-toggle="tab" role="tab">Mo 12.08.</a></li>
<li class="col-md-2"><a href="#tab-tue" class="nav-link" data-toggle="tab" role="tab">Di 13.08.</a></li>
<li class="col-md-2"><a href="#tab-wed" class="nav-link" data-toggle="tab" role="tab">Mi 14.08.</a></li>
<li class="col-md-2"><a href="#tab-thu" class="nav-link" data-toggle="tab" role="tab">Do 15.08.</a></li>
<li class="col-md-2"><a href="#tab-fri" class="nav-link active show" data-toggle="tab" role="tab">Fr
16.08.</a></li>
<li class="col-md-2"><a href="#tab-sat" class="nav-link" data-toggle="tab" role="tab">Sa 17.08.</a></li>
</ul>
</div>
<div class="col-md-1 col-xs-6 pull-right">
<a class="next-week text-right" title="eine Woche weiter"
href="https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/?tx_swfrspeiseplan_pi1%5BweekToShow%5D=1&amp;tx_swfrspeiseplan_pi1%5Baction%5D=show&amp;tx_swfrspeiseplan_pi1%5Bcontroller%5D=Speiseplan&amp;cHash=fab2e8b1bae3cdd249ace0e5d67c1c7e"><span
class="d-inline d-sm-none">nächste Woche</span><img
src="Mensa_empty-week-Dateien/keil-grau-rechts.png" alt="" width="16" height="16"></a>
</div>
</div>
<div class="row">
<div class="col-sm-4">
<table class="table legende">
<tbody>
<tr>
<td class="vegetarisch legend"></td>
<td class="legend-info">vegetarisch</td>
</tr>
<tr>
<td class="vegan legend"></td>
<td class="legend-info">vegan</td>
</tr>
<tr>
<td class="wunsch-vegan legend"></td>
<td class="legend-info">auf Wunsch vegan</td>
</tr>
</tbody>
</table>
</div>
<div class="col-sm-4 pt-3">
<div class="hide-with-allergenes">
<p><a download="_KW_33-2019.pdf" title="Wochenplan in Farbe herunterladen" target="_blank"
href="https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/?type=99&amp;tx_swfrspeiseplan_pi1%5BweekToShow%5D=0&amp;tx_swfrspeiseplan_pi1%5Bcolored%5D=1&amp;tx_swfrspeiseplan_pi1%5Bort%5D=651&amp;tx_swfrspeiseplan_pi1%5Baction%5D=buildPdf&amp;tx_swfrspeiseplan_pi1%5Bcontroller%5D=Speiseplan&amp;cHash=9c8a69897ba4f187d21b350d48473425"><i
class="fas fa-file-download" aria-hidden="true"></i> Wochenplan farbig</a></p>
<p><a download="_KW_33-2019.pdf" title="Wochenplan in schwarz-weiß herunterladen" target="_blank"
href="https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/?type=99&amp;tx_swfrspeiseplan_pi1%5BweekToShow%5D=0&amp;tx_swfrspeiseplan_pi1%5Bcolored%5D=0&amp;tx_swfrspeiseplan_pi1%5Bort%5D=651&amp;tx_swfrspeiseplan_pi1%5Baction%5D=buildPdf&amp;tx_swfrspeiseplan_pi1%5Bcontroller%5D=Speiseplan&amp;cHash=3e887f29d8cf2a15bd54620c56f43e02"><i
class="fas fa-file-download" aria-hidden="true"></i> Wochenplan s/w</a></p>
</div>
<div class="show-with-allergenes">
<p><a download="_KW_33-2019.pdf" title="Wochenplan in Farbe herunterladen" target="_blank"
href="https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/?type=99&amp;tx_swfrspeiseplan_pi1%5BweekToShow%5D=0&amp;tx_swfrspeiseplan_pi1%5Bcolored%5D=1&amp;tx_swfrspeiseplan_pi1%5Bort%5D=651&amp;tx_swfrspeiseplan_pi1%5Baction%5D=buildPdfAllergenes&amp;tx_swfrspeiseplan_pi1%5Bcontroller%5D=Speiseplan&amp;cHash=e5c36a88733c75c5eded775acad35bc6"><i
class="fas fa-file-download" aria-hidden="true"></i> Wochenplan farbig</a></p>
<p><a download="_KW_33-2019.pdf" title="Wochenplan in schwarz-weiß herunterladen" target="_blank"
href="https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/?type=99&amp;tx_swfrspeiseplan_pi1%5BweekToShow%5D=0&amp;tx_swfrspeiseplan_pi1%5Bcolored%5D=0&amp;tx_swfrspeiseplan_pi1%5Bort%5D=651&amp;tx_swfrspeiseplan_pi1%5Baction%5D=buildPdfAllergenes&amp;tx_swfrspeiseplan_pi1%5Bcontroller%5D=Speiseplan&amp;cHash=b0d4e30323a2010310bbb6cad8b55fe9"><i
class="fas fa-file-download" aria-hidden="true"></i> Wochenplan s/w</a></p>
</div>
</div>
<div class="col-sm-4 pt-3">
<p class="hide-with-allergenes"><a href="#" data-toggle="modal" data-target="#allergenesModal"><i
class="fas fa-redo-alt"></i> Allergiehinweise anzeigen</a></p>
<p class="show-with-allergenes"><a href="#" class="btn-hide-allergenes"><i class="fas fa-undo-alt"></i>
Allergiehinweise verbergen</a></p>
</div>
</div>
<div class="tab-content">
<div id="tab-mon" class="menu-tagesplan tab-pane fade">
<h3>Montag 12.08.</h3>
<div class="row row-narrow row-buffer row-table">
<div class="col-md-1 bg-beige-hell zusatzangaben">
<i class="glyphicons glyphicons-circle-info"></i>
</div>
<div class="col-md-11 border-beige-hell">
<h4>heute keine Essensausgabe</h4>
</div>
</div>
</div>
<div id="tab-tue" class="menu-tagesplan tab-pane fade">
<h3>Dienstag 13.08.</h3>
<div class="row row-narrow row-buffer row-table">
<div class="col-md-1 bg-beige-hell zusatzangaben">
<i class="glyphicons glyphicons-circle-info"></i>
</div>
<div class="col-md-11 border-beige-hell">
<h4>heute keine Essensausgabe</h4>
</div>
</div>
</div>
<div id="tab-wed" class="menu-tagesplan tab-pane fade">
<h3>Mittwoch 14.08.</h3>
<div class="row row-narrow row-buffer row-table">
<div class="col-md-1 bg-beige-hell zusatzangaben">
<i class="glyphicons glyphicons-circle-info"></i>
</div>
<div class="col-md-11 border-beige-hell">
<h4>heute keine Essensausgabe</h4>
</div>
</div>
</div>
<div id="tab-thu" class="menu-tagesplan tab-pane fade">
<h3>Donnerstag 15.08.</h3>
<div class="row row-narrow row-buffer row-table">
<div class="col-md-1 bg-beige-hell zusatzangaben">
<i class="glyphicons glyphicons-circle-info"></i>
</div>
<div class="col-md-11 border-beige-hell">
<h4>heute keine Essensausgabe</h4>
</div>
</div>
</div>
<div id="tab-fri" class="menu-tagesplan tab-pane fade in show active">
<h3>Freitag 16.08.</h3>
<div class="row row-narrow row-buffer row-table">
<div class="col-md-1 bg-beige-hell zusatzangaben">
<i class="glyphicons glyphicons-circle-info"></i>
</div>
<div class="col-md-11 border-beige-hell">
<h4>heute keine Essensausgabe</h4>
</div>
</div>
</div>
<div id="tab-sat" class="menu-tagesplan tab-pane fade">
<h3>Samstag 17.08.</h3>
<div class="row row-narrow row-buffer row-table">
<div class="col-md-1 bg-beige-hell zusatzangaben">
<i class="glyphicons glyphicons-circle-info"></i>
</div>
<div class="col-md-11 border-beige-hell">
<h4>heute keine Essensausgabe</h4>
</div>
</div>
</div>
</div>
</div>

518
src/test/resources/html/Mensa_normal-week.html

@ -0,0 +1,518 @@
<div id="speiseplan-tabs">
<div id="tab-menu-container" class="row">
<div class="col-md-1 col-xs-6"></div>
<div class="col-md-10">
<ul class="nav classic-tabs tabs-primary" role="tablist">
<li class="col-md-2"><a href="#tab-mon" class="nav-link" data-toggle="tab" role="tab">Mo 12.08.</a></li>
<li class="col-md-2"><a href="#tab-tue" class="nav-link" data-toggle="tab" role="tab">Di 13.08.</a></li>
<li class="col-md-2"><a href="#tab-wed" class="nav-link" data-toggle="tab" role="tab">Mi 14.08.</a></li>
<li class="col-md-2"><a href="#tab-thu" class="nav-link" data-toggle="tab" role="tab">Do 15.08.</a></li>
<li class="col-md-2"><a href="#tab-fri" class="nav-link active show" data-toggle="tab" role="tab">Fr
16.08.</a></li>
<li class="col-md-2"><a href="#tab-sat" class="nav-link" data-toggle="tab" role="tab">Sa 17.08.</a></li>
</ul>
</div>
<div class="col-md-1 col-xs-6 pull-right">
<a class="next-week text-right" title="eine Woche weiter"
href="https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/?tx_swfrspeiseplan_pi1%5BweekToShow%5D=1&amp;tx_swfrspeiseplan_pi1%5Baction%5D=show&amp;tx_swfrspeiseplan_pi1%5Bcontroller%5D=Speiseplan&amp;cHash=fab2e8b1bae3cdd249ace0e5d67c1c7e"><span
class="d-inline d-sm-none">nächste Woche</span><img
src="Mensa_empty-week-Dateien/keil-grau-rechts.png" alt="" width="16" height="16"></a>
</div>
</div>
<div class="row">
<div class="col-sm-4">
<table class="table legende">
<tbody>
<tr>
<td class="vegetarisch legend"></td>
<td class="legend-info">vegetarisch</td>
</tr>
<tr>
<td class="vegan legend"></td>
<td class="legend-info">vegan</td>
</tr>
<tr>
<td class="wunsch-vegan legend"></td>
<td class="legend-info">auf Wunsch vegan</td>
</tr>
</tbody>
</table>
</div>
<div class="col-sm-4 pt-3">
<div class="hide-with-allergenes">
<p><a download="_KW_33-2019.pdf" title="Wochenplan in Farbe herunterladen" target="_blank"
href="https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/?type=99&amp;tx_swfrspeiseplan_pi1%5BweekToShow%5D=0&amp;tx_swfrspeiseplan_pi1%5Bcolored%5D=1&amp;tx_swfrspeiseplan_pi1%5Bort%5D=651&amp;tx_swfrspeiseplan_pi1%5Baction%5D=buildPdf&amp;tx_swfrspeiseplan_pi1%5Bcontroller%5D=Speiseplan&amp;cHash=9c8a69897ba4f187d21b350d48473425"><i
class="fas fa-file-download" aria-hidden="true"></i> Wochenplan farbig</a></p>
<p><a download="_KW_33-2019.pdf" title="Wochenplan in schwarz-weiß herunterladen" target="_blank"
href="https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/?type=99&amp;tx_swfrspeiseplan_pi1%5BweekToShow%5D=0&amp;tx_swfrspeiseplan_pi1%5Bcolored%5D=0&amp;tx_swfrspeiseplan_pi1%5Bort%5D=651&amp;tx_swfrspeiseplan_pi1%5Baction%5D=buildPdf&amp;tx_swfrspeiseplan_pi1%5Bcontroller%5D=Speiseplan&amp;cHash=3e887f29d8cf2a15bd54620c56f43e02"><i
class="fas fa-file-download" aria-hidden="true"></i> Wochenplan s/w</a></p>
</div>
<div class="show-with-allergenes">
<p><a download="_KW_33-2019.pdf" title="Wochenplan in Farbe herunterladen" target="_blank"
href="https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/?type=99&amp;tx_swfrspeiseplan_pi1%5BweekToShow%5D=0&amp;tx_swfrspeiseplan_pi1%5Bcolored%5D=1&amp;tx_swfrspeiseplan_pi1%5Bort%5D=651&amp;tx_swfrspeiseplan_pi1%5Baction%5D=buildPdfAllergenes&amp;tx_swfrspeiseplan_pi1%5Bcontroller%5D=Speiseplan&amp;cHash=e5c36a88733c75c5eded775acad35bc6"><i
class="fas fa-file-download" aria-hidden="true"></i> Wochenplan farbig</a></p>
<p><a download="_KW_33-2019.pdf" title="Wochenplan in schwarz-weiß herunterladen" target="_blank"
href="https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/?type=99&amp;tx_swfrspeiseplan_pi1%5BweekToShow%5D=0&amp;tx_swfrspeiseplan_pi1%5Bcolored%5D=0&amp;tx_swfrspeiseplan_pi1%5Bort%5D=651&amp;tx_swfrspeiseplan_pi1%5Baction%5D=buildPdfAllergenes&amp;tx_swfrspeiseplan_pi1%5Bcontroller%5D=Speiseplan&amp;cHash=b0d4e30323a2010310bbb6cad8b55fe9"><i
class="fas fa-file-download" aria-hidden="true"></i> Wochenplan s/w</a></p>
</div>
</div>
<div class="col-sm-4 pt-3">
<p class="hide-with-allergenes"><a href="#" data-toggle="modal" data-target="#allergenesModal"><i
class="fas fa-redo-alt"></i> Allergiehinweise anzeigen</a></p>
<p class="show-with-allergenes"><a href="#" class="btn-hide-allergenes"><i class="fas fa-undo-alt"></i>
Allergiehinweise verbergen</a></p>
</div>
</div>
<div class="tab-content">
<div id="tab-mon" class="menu-tagesplan r-tabs-panel r-tabs-state-active" style="display: block;">
<h3>Montag 03.07.</h3>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Essen 1</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell vegetarisch">
Gemüseauflauf
<br>Frischkäse-Paprikasauce
<br>Blattsalat
<span class="zusatzsstoffe hide-with-allergenes">Kennzeichnungen/Zusatzstoffe: 9</span>
<span class="zusatzsstoffe show-with-allergenes">Kennzeichnungen/Zusatzstoffe: 9<br>enthält Allergene: Ei,ML,Lak</span>
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>2,90 €</td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>3,80 €</td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>5,10 €</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Essen 2</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell ">
Schweinesteak
<br>Pfeffer-Rahmsauce
<br>Country Potatoes
<br>Blattsalat
<span class="zusatzsstoffe hide-with-allergenes">Kennzeichnungen/Zusatzstoffe: 1,5</span>
<span class="zusatzsstoffe show-with-allergenes">Kennzeichnungen/Zusatzstoffe: 1,5<br>enthält Allergene: Gl,GlW,GlG,ML,Lak</span>
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>2,90 €</td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>3,80 €</td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>5,10 €</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Buffet</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell ">
Grill und Salatbar
<br>Asiatisches aus dem Wok
<br>Fleisch- und Fischspezialitäten
<br>Pasta-, Reis und Kartoffelvariationen
<br>Gemüse
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>0,85 €<span class="tara"> / 100g</span></td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>1,00 €<span class="tara"> / 100g</span></td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>1,20 €<span class="tara"> / 100g</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="tab-tue" class="menu-tagesplan r-tabs-panel r-tabs-state-default" style="display: none;">
<h3>Dienstag 04.07.</h3>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Essen 1</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell vegetarisch">
Riesenrösti
<br>Rahmchampignons
<br>Blattsalat
<span class="zusatzsstoffe show-with-allergenes">enthält Allergene: Gl,GlW,GlG,ML,Lak</span>
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>2,90 €</td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>3,80 €</td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>5,10 €</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Essen 2</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell ">
Spaghetti
<br>Sauce Bolognese
<br>Geriebener Hartkäse
<br>Blattsalat
<span class="zusatzsstoffe hide-with-allergenes">Kennzeichnungen/Zusatzstoffe: 15</span>
<span class="zusatzsstoffe show-with-allergenes">Kennzeichnungen/Zusatzstoffe: 15<br>enthält Allergene: Ei,Se,Gl,GlW,ML</span>
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>2,90 €</td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>3,80 €</td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>5,10 €</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Buffet</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell ">
Grill und Salatbar
<br>Asiatisches aus dem Wok
<br>Fleisch- und Fischspezialitäten
<br>Pasta-, Reis und Kartoffelvariationen
<br>Gemüse
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>0,85 €<span class="tara"> / 100g</span></td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>1,00 €<span class="tara"> / 100g</span></td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>1,20 €<span class="tara"> / 100g</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="tab-wed" class="menu-tagesplan r-tabs-panel r-tabs-state-default" style="display: none;">
<h3>Mittwoch 05.07.</h3>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Essen 1</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell vegetarisch">
Frühlingsrollen
<br>Feuriger Chilidip
<br>Patnareis
<br>Wokgemüsepfanne
<span class="zusatzsstoffe hide-with-allergenes">Kennzeichnungen/Zusatzstoffe: 9</span>
<span class="zusatzsstoffe show-with-allergenes">Kennzeichnungen/Zusatzstoffe: 9<br>enthält Allergene: Ei,So,Sn,Se,Sf,Gl,GlW,ML,Lak</span>
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>2,90 €</td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>3,80 €</td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>5,10 €</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Essen 2</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell ">
Bratwurstschnecke
<br>Bratenjus
<br>Kartoffelbrei
<br>Karottengemüse
<span class="zusatzsstoffe hide-with-allergenes">Kennzeichnungen/Zusatzstoffe: 1,8</span>
<span class="zusatzsstoffe show-with-allergenes">Kennzeichnungen/Zusatzstoffe: 1,8<br>enthält Allergene: Sn,Se,Gl,GlW,GlG,ML,Lak</span>
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>2,90 €</td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>3,80 €</td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>5,10 €</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Buffet</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell ">
Grill und Salatbar
<br>Asiatisches aus dem Wok
<br>Fleisch- und Fischspezialitäten
<br>Pasta-, Reis und Kartoffelvariationen
<br>Gemüse
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>0,85 €<span class="tara"> / 100g</span></td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>1,00 €<span class="tara"> / 100g</span></td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>1,20 €<span class="tara"> / 100g</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="tab-thu" class="menu-tagesplan r-tabs-panel r-tabs-state-default" style="display: none;">
<h3>Donnerstag 06.07.</h3>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Essen 1</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell vegetarisch">
Farfalle tricolore
<br>Gorgonzola-Spinatsauce
<br>Endiviensalat
<span class="zusatzsstoffe show-with-allergenes">enthält Allergene: Gl,GlW,ML</span>
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>2,90 €</td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>3,80 €</td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>5,10 €</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Essen 2</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell ">
Paniertes Seelachsfilet MSC
<br>Remouladensauce
<br>Salzkartoffeln
<br>Brokkoligemüse
<span class="zusatzsstoffe hide-with-allergenes">Kennzeichnungen/Zusatzstoffe: 9,MSC</span>
<span class="zusatzsstoffe show-with-allergenes">Kennzeichnungen/Zusatzstoffe: 9,MSC<br>enthält Allergene: Ei,Sn,Fi,Gl,GlW,ML,Lak</span>
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>2,90 €</td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>3,80 €</td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>5,10 €</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Buffet</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell ">
Grill und Salatbar
<br>Asiatisches aus dem Wok
<br>Fleisch- und Fischspezialitäten
<br>Pasta-, Reis und Kartoffelvariationen
<br>Gemüse
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>0,85 €<span class="tara"> / 100g</span></td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>1,00 €<span class="tara"> / 100g</span></td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>1,20 €<span class="tara"> / 100g</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="tab-fri" class="menu-tagesplan r-tabs-panel r-tabs-state-default" style="display: none;">
<h3>Freitag 07.07.</h3>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Essen 1</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell vegetarisch">
Italienischer Nudelauflauf mit Gemüse
<br>Tomatenragout
<br>Blattsalat
<span class="zusatzsstoffe show-with-allergenes">enthält Allergene: Gl,GlW,ML,Lak</span>
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>2,90 €</td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>3,80 €</td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>5,10 €</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Essen 2</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell ">
Hähnchen-Saté-Spieß
<br>Erdnusssauce
<br>Langkornreis
<br>Karotten-Erbsengemüse
<span class="zusatzsstoffe show-with-allergenes">enthält Allergene: Er,So,Kr,Fi,We,Gl,GlW,ML,Lak</span>
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>2,90 €</td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>3,80 €</td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>5,10 €</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row row-narrow row-table">
<h4 class="col-md-3 col-sm-3 menu-header">Buffet</h4>
<div class="col-md-5 col-sm-5 menu-info bg-beige-hell ">
Grill und Salatbar
<br>Asiatisches aus dem Wok
<br>Fleisch- und Fischspezialitäten
<br>Pasta-, Reis und Kartoffelvariationen
<br>Gemüse
</div>
<div class="col-md-4 col-sm-4 menu-price">
<table class="table">
<tbody>
<tr>
<td class="price-studierende">Studierende, Schüler</td>
<td>0,85 €<span class="tara"> / 100g</span></td>
</tr>
<tr>
<td class="price-mitarbeiter">Mitarbeiter</td>
<td>1,00 €<span class="tara"> / 100g</span></td>
</tr>
<tr>
<td class="price-gaeste">Gäste</td>
<td>1,20 €<span class="tara"> / 100g</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="tab-sat" class="menu-tagesplan r-tabs-panel r-tabs-state-default" style="display: none;">
<h3>Samstag 08.07.</h3>
<div class="row row-narrow row-buffer row-table">
<div class="col-md-1 bg-beige-hell zusatzangaben">
<i class="glyphicons glyphicons-circle-info"></i>
</div>
<div class="col-md-11 border-beige-hell">
<h4>heute keine Essensausgabe</h4>
</div>
</div>
</div>
</div>
</div>
</div>
Loading…
Cancel
Save

Du besuchst diese Seite mit einem veralteten IPv4-Internetzugang. Möglicherweise treten in Zukunft Probleme mit der Erreichbarkeit und Performance auf. Bitte frage deinen Internetanbieter oder Netzwerkadministrator nach IPv6-Unterstützung.
You are visiting this site with an outdated IPv4 internet access. You may experience problems with accessibility and performance in the future. Please ask your ISP or network administrator for IPv6 support.
Weitere Infos | More Information
Klicke zum schließen | Click to close