diff --git a/tests/data/html/detroit-style-pepperoni-pizza.html b/tests/data/html/detroit-style-pepperoni-pizza.html new file mode 100644 index 000000000000..f876161d8a9b --- /dev/null +++ b/tests/data/html/detroit-style-pepperoni-pizza.html @@ -0,0 +1,937 @@ +Detroit-Style Pepperoni Pizza Recipe | Bon Appétit + + + + +
Skip to main content

Detroit-Style Pepperoni Pizza

detroitstyle pan pizza
Photo by Emma Fishman, Food Styling by D'mytrek Brown

So you want to make pizza, but it’s your first time. This Detroit-style pizza from Bryan Ford, which uses a half-batch of his Master Bread Dough, is perfect for beginners because you don’t have to shape the dough or wrangle a hot pizza stone. If you don’t have a Detroit pizza pan (its deep sides and black anodized aluminum help achieve a crust that’s fluffy on the inside but crisp all around), that’s okay: Use a 13x9" baking pan or two 8x8" baking pans.

All products featured on Bon Appétit are independently selected by our editors. However, when you buy something through the retail links below, we earn an affiliate commission.

Ingredients

Makes 1 large or 2 small

Extra-virgin olive oil (for pan)

Bread flour (for surface)

½

batch (360 g) Master Bread Dough

8

oz. low-moisture mozzarella or brick cheese

¾

cup store-bought marinara sauce

4

oz. pepperoni, sliced

½

tsp. dried oregano

½

cup (lightly packed) basil leaves

Steps

1.

To make this recipe, start by preparing a half-batch of the Master Bread Dough.

2.

Lightly brush Detroit-style pizza pan, 13x9" baking pan, or two 8x8" pans with extra-virgin olive oil. Lightly flour work surface with bread flour and turn ½ batch (360 g) Master Bread Dough out onto surface. If using a Detroit-style pizza pan or a 13x9" pan, pull edges of dough into the center, then turn over and hold opposite sides of the dough with your hands so the sides of your pinkies are touching the surface and rotate dough, gently working it into a round as you go. If using two 8x8" pans, divide dough in half and form using the same method as above. Gently transfer dough to prepared pan. Rub dough with oil and cover with a kitchen towel. Let rise in a warm, draft-free spot until dough expands a bit and is smooth and more pliable, about 1 hour.

3.

Meanwhile, cut 8 oz. low-moisture mozzarella or brick cheese into small cubes. You should have 2 heaping cups.

4.

Place a rack in middle of oven; preheat to 450°. Dimple dough with your fingers, gently pushing out to edges of pan. Scatter cheese evenly over dough all the way to the edges. Spoon ¾ cup store-bought marinara sauce over pizza in three even rows. Next, distribute 4 oz. pepperoni, sliced, evenly over sauce. Sprinkle with ½ tsp. dried oregano.

5.

Bake pizza until crust is deep golden brown, 35–40 minutes. (You can also check doneness with an instant-read thermometer. It should register 190° when inserted into a thick part of the crust.) Remove from oven and top with ½ cup (lightly packed) basil leaves. Let cool in pan 5 minutes before slicing.

\ No newline at end of file diff --git a/tests/data/html/jam-roly-poly-with-custard.html b/tests/data/html/jam-roly-poly-with-custard.html new file mode 100644 index 000000000000..cb28c8b7ad12 --- /dev/null +++ b/tests/data/html/jam-roly-poly-with-custard.html @@ -0,0 +1,3030 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Jam Roly Poly Recipe - Great British Chefs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ + + + + + + + + +
+
+ + + + + + + + +
+
+ + + + + + + +
+ + + +
+ + +
+ + + + +
+
+
+
+ + + + + + + + + + + + + + +
+ + +
+
+ +
+
+ +
+

Jam roly poly with custard

+
+ +
+
by
+ + + +
+
+
+ +
+
+ + +
+
+ + +
+
+ + + + + +
+ + + +
+ + + + + + +
+
+ +
+
+ +
+ +
+
+ + +
+ +
+

PT50M

+

+
+ +
+ +
+ + +
+
+ +
+
+ + +
+ +
+
+
Share recipe
+ + + +
+
+
+ +
+
+ + + +
+
+ +
+ +
+
+ + + +
+
+
+ + +
+
+ + +
+
+
+ + + +
+
+
+ + + +
+
+
+
+
+ + +
+
+ + + +
+
+ + + +
+
+ +
+ + + + +
+
+

At the risk of sounding like a well-known chef from Gloucestershire, jam roly poly is a ‘proper’ old school dessert and will brighten up anyone’s day, especially when served on a cold and grey one. Traditionally, roly polies are wrapped in muslin or foil and steamed, but this recipe does without that extra faff by going straight down the baking route. Admittedly, the resulting roly poly doesn’t come out as uniform as you might expect but you do get the bonus of a nice crispy, sugary crust to crack your spoon into.

The added extra of course is drowning this pud in easy-to-make custard. All very simple, all very quick and you will be going for a second helping of this jammy treat in no time at all.

+
+
+ + +
+ + +
+
+
+
+
+

Ingredients

+
+ +
+
+
+ + + + + + + + + + + + +
+
+

Metric

+
+
+
+
+

Imperial

+
+
+
+
+ + + + +
+ +
+
+
+

Roly poly

+
+
    +
  • + 225g of self-raising flour +
  • +
  • + + 115g of + + suet
  • +
  • + 8 tbsp of water +
  • +
  • + 4 tbsp of raspberry jam, warmed through to loosen +
  • +
  • + + 1 + + egg, beaten with a dash of milk, to glaze
  • +
  • + caster sugar +
  • +
  • + butter for greasing +
  • +
+
+

Custard

+
+
    +
  • + 600ml of whole milk +
  • +
  • + + 6 + + egg yolks
  • +
  • + 70g of caster sugar +
  • +
  • + 1 tsp vanilla extract +
  • +
+
+
+
+ + +
+
+ +
+
+ +
+
+
+ +
+ + + + + + +
+
+ + + + + + +
+
+
+ +
+
+
+
+ + +
+
+ + +
+
+
+ + + +
+
+
+ + + +
+
+ + +
+
+
+
+
+

Method

+
+ +
+ + + + + + + +
+
+
+ +
+
+
+
+ 1 +
+
+ Preheat the oven to 200°C/gas mark 6 and lightly grease a large roasting tin with butter +
+
+ +
+ +
+ + + + + + + + +
+ +
+
+
+
+
+ 2 +
+
+ Sift the flour into a bowl and add a pinch of salt, the suet, a few sploshes of water and mix all together. The aim is to get a soft dough that is not sticky so add the water sparingly at first +
+
+ +
+ +
+ + + + + + + + +
+ +
+
+
+
+
+ 3 +
+
+ Turn out onto a floured surface and roll with a floured rolling pin into a rectangle, roughly 20cm x 30cm. Spread the jam evenly across the surface, making sure you leave a border all around the edge +
+
+ +
+ +
+ + + + + + + + +
+ +
+
+
+
+
+ 4 +
+
+ Starting with the long side closest to you, roll the border over the jam, then continue to roll up the dough around the jam like a swiss roll. Press the edge and ends together gently to seal. Place the roly poly in the buttered roasting tin and brush with the egg mix to glaze +
+
+ +
+ +
+ + + + + + + + +
+ +
+
+ + +
+
+
+ + + +
+
+
+ + + +
+
+ + +
+
+
+ + + +
+
+
+ + + +
+
+
+
+
+ 5 +
+
+ Sprinkling all over with a healthy amount of caster sugar, then place in the centre of the oven and bake for 35–40 minutes until golden brown +
+
+ +
+ +
+ + + + + + + + +
+ +
+
+
+
+
+ 6 +
+
+ Meanwhile, make the custard by beating the egg yolks and sugar together in a bowl until creamy. Add the milk and vanilla extract to a pan over a medium heat and bring to the boil +
+
+ +
+ +
+ + + + + + + + +
+ +
+
+
+
+
+ 7 +
+
+ Place the bowl with the egg yolk mixture over another pan with a small amount of simmering water, making sure the bowl doesn't touch the water. Slowly pour the hot vanilla milk over the egg yolks, whisking continuously until smooth and thickened +
+
+ +
+ +
+ + + + + + + + +
+ +
+
+
+
+
+ 8 +
+
+ To test if the custard is ready, dip a wooden spoon into the mixture, if it sticks to the back of the spoon and a line remains when you draw through it with your finger, then it's ready +
+
+ +
+ +
+ + + + + + + + +
+ +
+
+
+
+
+ 9 +
+
+ To serve, slice the cooked roly poly into generous pieces and pour over the warm custard +
+
+ +
+ +
+ + + + + + + + +
+ +
+ + +
+
+
+ + +
+ + + + +
+ + +
+
+ +
+
+ + +
+
+ + +
+ +
+
+
Share recipe
+ + + +
+ + + +
+ + +
+
+
+ + + +
+
+
+ + +
+ +
+
+ +
+ +
+
+
+ + + +
+
+ + +
+
+
+ + + +
+
+
+ + + +
+
+ +
+
+ +
+ + +
+ +
+ + +
+
+
+ +
+
+
+ + + +
+ + + +
+
+
+
+ +
+
+
+
+ + + +
+
+ + +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/html/schinken-kase-waffeln-ohne-viel-schnickschnack.html b/tests/data/html/schinken-kase-waffeln-ohne-viel-schnickschnack.html new file mode 100644 index 000000000000..47315239087c --- /dev/null +++ b/tests/data/html/schinken-kase-waffeln-ohne-viel-schnickschnack.html @@ -0,0 +1,2192 @@ + + + + + + + + Schinken-Käse Waffeln ohne viel Schnickschnack von Animilly. Ein Thermomix ® Rezept aus der Kategorie Backen herzhaft auf www.rezeptwelt.de, der Thermomix ® Community. + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+
+ + +
+
+ +
+
+
+ +
+
+
+
+

+ +
+ +

+
+
+
+
+ 2 + Backen herzhaft + Rezepte +
+
+
+
+ + + + +
+
+
+
+
+
+
+
+
+
+ 3 +
+
    + +
  • + thumbnail image 1 +
  • + +
  • + thumbnail image 2 +
  • +
+ + +
+ +
+
+
+
+ +
+
+
+
+
+ + + Druckversion + + +
+
+ [X] +

Druckversion

+

Schinken-Käse Waffeln ohne viel Schnickschnack

+
+
+
+
+ + Drucken: + +
+
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+ 4 +

Zutaten

12 Portion/en +

  • 200 g Schinken
  • 1,5 gestr. TL Salz
  • 4 Eier
  • 200 g Sahne
  • 200 g Milch
  • 300 g Käse (Gouda)
  • 120 g Mehl

+ Schinken-Käse Waffeln ohne viel Schnickschnack +

+ +
+ +
+
+
    +
  • +
    +
    + 6 +
    +
    + +
    +
    +
    15min
    +
    Zubereitung + + + + 15min + +
    +
    Backen/Kochen + + + +
    +
    +
    +
    +
  • +
  • +
    +
    + 7 +
    +
    + +
    +
    +
    einfach
    +
    + Zubereitung +
    +
    +
    +
    +
  • +
  • +
    +
    + 8 +
    +
      +
    • +
      + Appliance TM5 image +
      +
      + + Rezept erstellt für + +
      TM5
      +
      +
      + Bitte beachten Sie, dass der Mixtopf des TM5 ein größeres Fassungsvermögen hat als der des TM31 (Fassungsvermögen von 2,2 Litern anstelle von 2,0 Litern beim TM31). Aus Sicherheitsgründen müssen Sie daher die Mengen entsprechend anpassen, wenn Sie Rezepte für den Thermomix TM5 mit einem Thermomix TM31 kochen möchten. Verbrühungsgefahr durch heiße Flüssigkeiten: Die maximale Füllmenge darf nicht überschritten werden. Beachten Sie die Füllstandsmarkierungen am Mixtopf! + +
    • +
    +
    +
    +
  • +
  • + +
  • +
+
+
+
+
+
+
+
+ 5 +

Zubereitung

    Waffelteig
  1. 1. Käse in Stücken in Mixtopf geschlossen 10-12 Sek/Stufe 5

    +(ich habe alternativ Streukäse/Pizzakäse verwendet, der noch im Kühlschrank vorhanden war)

    +2. Schinken in feine Stückchen schneiden und in Mixtopf geschlossen geben

    +3.Eier, Sahne, Milch, Mehl und Salz in den Mixtopf geschlossen dazu geben und ca. 2 min/Stufe 3 zu einem Teig verrühren

    +Sollte der Teig noch zu fest sein, noch etwas Milch hinzufügen



    +Anschließend den Teig portionsweise im Waffeleisen ausbacken und genießen.

    +Falls noch Waffeln übrig bleiben, so schmecken diese auch kalt noch sehr lecker 😉
+
+
+
+
+ 10 +

Hilfsmittel, die du benötigst

+
+
+
    + +
  • +
    +
    + Spatel +
    +
    +
    Spatel
    + jetzt kaufen! +
    +
    +
  • +
+
+
+
+
+
+
+
+ 11 +

Tipp

+

Wer möchte, kann die Waffeln auch noch mit frischen Kräutern verfeinern. Da aber unsere Tochter kein Kräuterfan ist, habe ich hierauf verzichtet 🙂

+
+
+
+
+ +
+ +
+
+
+ +
+
+
+

Dieses Rezept wurde dir von einer/m Thermomix-Kundin/en zur Verfügung gestellt und daher nicht von Vorwerk Thermomix getestet. Vorwerk Thermomix übernimmt keinerlei Haftung, insbesondere im Hinblick auf Mengenangaben und Gelingen. Bitte beachte stets die Anwendungs- und Sicherheitshinweise in unserer Gebrauchsanleitung. +

+
+
+ + +
+
+
+

Anderen Benutzern gefiel auch...

+ +
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+
+ +
+
+
+
+
+

+ Kommentare +

+ + Kommentieren + +
+ + +
    +
  • +
    +
    + + + +
    +
    +
    +
    + +
    +
    +
    + +

    + Mega lecker 😋 ... +

    + +
    + Verfasst von + Franzi28789 + am 8. August 2021 - 11:10. +
    +
    +
    +

    + Mega lecker 😋
    +
    +Hab die Waffeln heute zum ersten Mal gemacht, war aber ganz sicher nicht das letzte Mal.
    +Hat allen sehr gut geschmeckt. +

    +
    + +
    + Melde dich an oder + registriere dich um Kommentare schreiben zu können +
    +
  • +
  • +
    +
    + + + +
    +
    +
    +
    + +
    +
    +
    + +

    + Ich habe sie heute zum ersten Mal gemacht und fand... +

    + +
    + Verfasst von + Janine1981 + am 17. Juli 2020 - 20:42. +
    +
    +
    +

    + Ich habe sie heute zum ersten Mal gemacht und fand sie prima! Ich habe mich an dein Rezept gehalten und Schnittlauch dazu gegeben.
    +Wirklich einfach und bestimmt super wandelbar mit Salami, Paprika, Speck,.. oder was der Kühlschrank so her gibt 😃 +

    +
    + +
    + Melde dich an oder + registriere dich um Kommentare schreiben zu können +
    +
  • +
  • +
    +
    + + + +
    +
    +
    +
    + +
    +
    +
    + +

    + Die Waffeln schmecken total lecker!! Da ich nur... +

    + +
    + Verfasst von + Andrew12 + am 4. August 2019 - 14:27. +
    +
    +
    +

    + Die Waffeln schmecken total lecker!! Da ich nur Lachsschinken hatte, habe ich nur eine Prise Salz dazu gegeben. Und noch mit Pfeffer und Paprika gewürzt. Werde ich auf alle Fälle wieder machen. Könnte mir vorstellen das es mit einer Zwiebel auch gut schmeckt. Ich werde es ausprobieren +

    +
    + +
    + Melde dich an oder + registriere dich um Kommentare schreiben zu können +
    +
  • +
  • +
    +
    + + + +
    +
    +
    +
    + +
    +
    +
    + +

    + Überraschend gut.... +

    + +
    + Verfasst von + Alexa0685 + am 26. Mai 2019 - 20:47. +
    +
    +
    +

    + Überraschend gut.
    +Da es die morgen Mittag geben soll, ich mir aber den Geschmack nicht vorstellen konnte, musste ich heute Abend eine Probe-Waffel backen.
    +
    +Und wie waren positiv überrascht. Mal sehen was die Kinder morgen Mittag dazu sagen...... +

    +
    + +
    + Melde dich an oder + registriere dich um Kommentare schreiben zu können +
    +
  • +
  • +
    +
    + + + +
    +
    +
    +
    + +
    +
    +
    + +

    + Klasse, das freut mich +

    + +
    + Verfasst von + Animilly + am 22. November 2016 - 19:16. +
    +
    +
    +

    + Klasse, das freut mich +

    +
    + +
    + Melde dich an oder + registriere dich um Kommentare schreiben zu können +
    +
  • +
  • +
    +
    + + + +
    +
    +
    +
    + +
    +
    +
    + +

    + Super Idee und war sehr lecker, hat auch kalt am... +

    + +
    + Verfasst von + Rokki + am 21. November 2016 - 14:04. +
    +
    +
    +

    + Super Idee und war sehr lecker, hat auch kalt am nächsten Tag gut geschmeckt.
    +
    +Die Menge geht problemlos auch im TM 31 +

    +
    + +
    + Melde dich an oder + registriere dich um Kommentare schreiben zu können +
    +
  • + + +
+
+ + +
+
+
+
+
+
+
+ + +
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/html/sous-vide-shrimp.html b/tests/data/html/sous-vide-shrimp.html new file mode 100644 index 000000000000..daabbf31d3c5 --- /dev/null +++ b/tests/data/html/sous-vide-shrimp.html @@ -0,0 +1,742 @@ + + + + + Sous Vide Shrimp + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+
+
+ + + +
+
+
+
+ +
+

+ Sous Vide Shrimp

+
+ + (1083) +
+
+
+
+
+
+
+
+
+ +
+
+
+ +

J. Kenji López-Alt is the Managing Culinary Director of Serious Eats, author of the James Beard Award-nominated column The Food Lab, and a columnist for Cooking Light. He lives in San Francisco. A New York native, Kenji cut his cooking chops the old-fashioned way by wo ...

+
+ +
+
+
+
+
+
+
+
    +
  • + + Rate This + + +
  • +
+ +
+
+
+
+
+
+
Shrimp cooked by traditional methods can be fantastic, but nailing the perfect temperature requires precision. Let them cook just a few seconds too long—whether poaching, searing, or grilling—and they go from tender and plump to rubbery and tough. With a sous vide cooker, you don't have this issue because that short window of time between perfect and overcooked stretches out to a good half hour or so.
+
Read More
+
+
+
+
+

+ Ingredients for 4 +

  • 1 1/2 pounds large peeled shrimp (about 700g)

  • Kosher salt

  • 1/2 teaspoon baking soda

  • Extra virgin olive oil or butter (optional)

  • Aromatics such as garlic, shallots, tarragon, or parsley (optional)

+

Directions

+
  • + +
    +
    Step 1
    +

    + Set Anova Sous Vide Precision Cooker to desired temp. Multiple options available to choose from in drop down menu.

    +
    +
  • +
  • + +
    +
    Step 2
    +

    + In a large bowl, toss shrimp with 1/2 teaspoon kosher salt and the baking soda. Place shrimp in a heavy duty zipper-lock bag or a vacuum bag. If desired, add 1 to 2 tablespoons (15 to 30ml) olive oil or butter and aromatics. Remove all air from bag using the water displacement method or a vacuum sealer. Press shrimp into a single layer.

    +
    +
  • +
  • + +
    +
    Step 3
    +

    + Add bagged shrimp to preheated water bath and cook for at least 15 minutes and up to 1 hour (the texture should show very little variation within this time frame).

    +
    +
  • +
+
+
      +
    • +

      + Finishing Steps

      +
    • + +
      +
      Step 0
      +

      + Remove shrimp from bag to a paper towel-lined plates. Serve hot, or chill and serve cold.

      +
      +
    • +
    +
+
+ +
+

Latest Comments

+
+
+
+
+
+
+
+
+
+
+ + 130 F / 54.4 C + Recipe Temp +
+
+ + Recipe Time +
+
+ + Prep Time +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/tests/data/html/sous-vide-smoked-beef-ribs.html b/tests/data/html/sous-vide-smoked-beef-ribs.html new file mode 100644 index 000000000000..076110b2498f --- /dev/null +++ b/tests/data/html/sous-vide-smoked-beef-ribs.html @@ -0,0 +1,1125 @@ + + + + Sous-vide Smoked Beef Ribs Recipe by jason williams - Cookpad + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+ +
+ + + + + +
+
+
+
+ Edit +
+ +
+ +
+ +
+ +
+
+
+
+ + +
+
+ + +
+
+
+ +
+ Share + + + + + +
+ + + + +
+ + + + + + +
+
+
+
+
+ + +
+
+ + + + + + + +
+
+ + + + +
+ +

+ Sous-vide Smoked Beef Ribs +

+ + + + +
+
+

+
+
+ +
+ +
+
+ +
+ + +28 Hours + +
+ +
+
+

Ingredients

+
+
+
+ +4 servings +
+
+ +
+
+ +
+
    +
  1. +
    + 2 slabs Beef Ribs + +
    +
  2. +
  3. +
    + 5 tbsp Brown Sugar + +
    +
  4. +
  5. +
    + 4 tbsp Kosher Salt + +
    +
  6. +
  7. +
    + 3 tbsp Chinese Five Spice Powder + +
    +
  8. +
  9. +
    + 1 tbsp Onion Powder + +
    +
  10. +
  11. +
    + 1 cup Chinese Style Bbq Sauce *see my recipe* + +
    +
  12. +
  13. +
    + 4 BPA free gallon sized bags + +
    +
  14. + +
+
+
+ +
+ +
+
+
+

Steps

+
+ +
    +
  1. +
    +
    +
    +

    Get the sous-vide water bath warming up to 165° F

    + +
    +
    + +
    + + Sous-vide Smoked Beef Ribs recipe step 1 photo + + +
    +
    +
  2. +
  3. +
    +
    +
    +

    Make the Chinese style rib rub. Combine the brown sugar, Chinese five spice, salt and onion powder into a jar and mix together thoroughly.

    + +
    +
    + +
    + +
    +
    +
  4. +
  5. +
    +
    +
    +

    Trim the excess fat from the ribs and cut in half.

    + +
    +
    + +
    + +
    +
    +
  6. +
  7. +
    +
    +
    +

    Coat ribs with the rub and let rest until the water bath reaches temperature.

    + +
    +
    + +
    + + Sous-vide Smoked Beef Ribs recipe step 4 photo + + +
    +
    +
  8. +
  9. +
    +
    +
    +

    When the water is to temp place the ribs into the bags and submerge into the water.

    + +
    +
    + +
    + +
    +
    +
  10. +
  11. +
    +
    +
    +

    I use an oven cooling rack across the top of the bath to clip the top of the bags too to keep the zipper from going into the water. I've never fully trusted them to not leak when counting on them.

    + +
    +
    + +
    + +
    +
    +
  12. +
  13. +
    +
    +
    +

    Cover the top with plastic wrap to hold in the heat. The cooling rack helps support this too.

    + +
    +
    + +
    + + Sous-vide Smoked Beef Ribs recipe step 7 photo + + +
    +
    +
  14. +
  15. +
    +
    +
    +

    Let cook in the water bath for 24 hours.

    + +
    +
    + +
    + +
    +
    +
  16. +
  17. +
    +
    +
    +

    After the 24 hours place the ribs on a smoker preheated to 250°F. I use pecan wood.

    + +
    +
    + +
    + + Sous-vide Smoked Beef Ribs recipe step 9 photo + + +
    +
    +
  18. +
  19. +
    +
    +
    +

    Let them smoke for 2 hours, then brush with the Chinese style bbq sauce and cook for another hour then sauce again.

    + +
    +
    + +
    + + Sous-vide Smoked Beef Ribs recipe step 10 photo + + +
    +
    +
  20. +
  21. +
    +
    +
    +

    Check after another hour and if to desired doneness remove from heat.

    + +
    +
    + +
    + + Sous-vide Smoked Beef Ribs recipe step 11 photo + + +
    +
    +
  22. +
  23. +
    +
    +
    +

    Let rest for about an hour then grab some napkins and dive in!

    + +
    +
    + +
    + +
    +
    +
  24. + +
+ + +
+ + + + +
+
+
+
+
+ + jason williams + +
Published by
+ + + jason williams + +
on
+ +
+ I have always been in love with flavor combinations even before I was allowed to use the stove by myself. I would come home from school and test out what was on hand with what I could maybe cook in the microwave. Little did I know I was starting down a life long journey of exploring flavors and recipes that I love and share with the people I care the most about. +https://theeclecticcook.blog +https://www.instagram.com/theeclecticcook/ +https://pin.it/vuncaiso65qrkl + +
+
+ +
+ +
+
+
+
+
+
+
+ +
+
+ +
+
+
+ +
+ +
    +
  • + +
    + +
  • + +
+ +
+ + +
+
+ +Cooksnaps + +
+ + +
+
+

Did you make this recipe? Share a picture of your creation!

+
+ +
+
+
+ + + +
+ + +
+
+
+
+ +Comments + +
+ + + + +
+ +
+
+ +
+
+ Guest + + +
+
+ + + + +
+ +
+ +
+
+
+ + + + + + + + + +
+
+ + + + + +
+ + +
+ + + + +
+
+ Unlock new features with a free cookpad account + Join now +
+ + + + + + +
+
+ +
+ +
+ + + +
+ +
+ + + + + + + + + + + \ No newline at end of file diff --git a/tests/data/html/taiwanese-three-cup-chicken-san-bei-gi-recipe.html b/tests/data/html/taiwanese-three-cup-chicken-san-bei-gi-recipe.html new file mode 100644 index 000000000000..7761886cca62 --- /dev/null +++ b/tests/data/html/taiwanese-three-cup-chicken-san-bei-gi-recipe.html @@ -0,0 +1,3311 @@ + + + + + + + + + + + + + + + + + + + + + + +Taiwanese Three Cup Chicken (San Bei Ji) Recipe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ +
+
+
+ +
+

Taiwanese Three Cup Chicken (San Bei Ji) Recipe

+
+ +
+
+
+
+
+
A bowl of Taiwanese three cup chicken.
Tender chicken is braised with garlic and ginger in a sweet and savory sauce.

Serious Eats / Cathy Erway

+
+ +
+
+
+

+Cooked in soy sauce, rice wine, and sesame oil, and loaded with heaps of whole garlic cloves, slices of ginger, and fresh Thai basil, this classic Taiwanese chicken dish is a perfect reminder of just how good an over-abundance of flavor can be. +

+
+

+Why this recipe works: +

+
+
    +
  • The bold and flavorful cooking liquid is incredibly easy, made from equal parts soy sauce, sesame oil, and rice wine.
  • By cooking the garlic and ginger in the oil first, then adding the chicken and cooking liquid, the entire dish can be made quickly in just one skillet or wok.
  • Two options for cutting up the chicken allow you to choose between a more traditional version (with the chicken cut into 3-inch, bone-in pieces), or a more home-cook-friendly version (with the drumsticks left whole and the thighs cut in half along—but not through—the bone).
  • +
+
+

+Note: If buying chicken from a butcher, ask for pieces to be chopped to 3-inch pieces with the bones in and skin on. +

+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+Recipe Facts +

+ +
+
+
+
+ +Active: +25 mins + +
+
+ +Total: +30 mins + +
+
+
+
+ +Serves: +4 +to 6 servings + +
+
+
+
+

+Rate & Comment +

+
+
+
+
+
+
+

Ingredients

+
+
+
    +
  • +

    1/4 cup Asian sesame oil

    +
  • +
  • +

    One (1-inch) piece fresh ginger, peeled and thinly sliced into rounds

    +
  • +
  • +

    12-15 medium garlic cloves, peeled

    +
  • +
  • +

    1-2 fresh Thai red chiles, stemmed and halved

    +
  • +
  • +

    2 pounds skin-on chicken drumsticks, thighs, and/or wings, either chopped into 3-inch, bone-in pieces, or thighs halved along along the bone, wings split at the joint, and drumsticks left whole

    +
  • +
  • +

    1/2 cup rice wine

    +
  • +
  • +

    1/4 cup soy sauce

    +
  • +
  • +

    1 tablespoon sugar

    +
  • +
  • +

    2 cups fresh Thai basil leaves (from 1 large bunch)

    +
  • +
  • +

    Steamed white rice, for serving

    +
  • +
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Directions

+
+
+
    +
  1. +

    +Heat sesame oil in a large skillet or wok over medium-high heat until shimmering. Add ginger, garlic, and chilis and cook until very fragrant, about 1 minute. +

    +
    +
  2. +
  3. +

    +Add chicken pieces to the skillet in a single layer and cook, tilting the pan if necessary to submerge all pieces in the oil, for 1 minute. Flip chicken pieces and cook for 1 minute longer. +

    +
    +
  4. +
  5. +

    +Add rice wine, soy sauce, and sugar and bring to a boil, stirring to dissolve the sugar. Reduce heat to a simmer. Partially cover the skillet to prevent splashes of oil and cook, turning the chicken pieces every few minutes, until the chicken is cooked through, about 15 minutes. Stir in Thai basil and remove from heat. Serve immediately with rice. +

    +
    +
  6. +
+

Special equipment

+

+Large wok or deep skillet +

+
+

This Recipe Appears In

+ +
+
+
+
+
+
+
+ + +
+
+ +
+
+ + + + + + + +
+ + diff --git a/tests/integration_tests/user_recipe_tests/test_recipe_crud.py b/tests/integration_tests/user_recipe_tests/test_recipe_crud.py index f4cffdd36d00..02743e7ef694 100644 --- a/tests/integration_tests/user_recipe_tests/test_recipe_crud.py +++ b/tests/integration_tests/user_recipe_tests/test_recipe_crud.py @@ -1,9 +1,17 @@ import json +from pathlib import Path +from typing import Optional, Tuple, Union import pytest +from bs4 import BeautifulSoup from fastapi.testclient import TestClient +from pytest import MonkeyPatch +from recipe_scrapers._abstract import AbstractScraper +from recipe_scrapers._schemaorg import SchemaOrg from slugify import slugify +from mealie.services.scraper import scraper +from mealie.services.scraper.scraper_strategies import RecipeScraperOpenGraph from tests.utils.app_routes import AppRoutes from tests.utils.fixture_schemas import TestUser from tests.utils.recipe_data import RecipeSiteTestCase, get_recipe_test_cases @@ -11,10 +19,65 @@ from tests.utils.recipe_data import RecipeSiteTestCase, get_recipe_test_cases recipe_test_data = get_recipe_test_cases() +def get_init(html_path: Path): + """ + Override the init method of the abstract scraper to return a bootstrapped init function that + serves the html from the given path instead of calling the url. + """ + + def init_override( + self, + url, + proxies: Optional[str] = None, + timeout: Optional[Union[float, Tuple, None]] = None, + wild_mode: Optional[bool] = False, + **_, + ): + page_data = html_path.read_bytes() + url = "https://test.example.com/" + + self.wild_mode = wild_mode + self.soup = BeautifulSoup(page_data, "html.parser") + self.url = url + self.schema = SchemaOrg(page_data) + + return init_override + + +def open_graph_override(html: str): + def get_html(self) -> str: + return html + + return get_html + + @pytest.mark.parametrize("recipe_data", recipe_test_data) def test_create_by_url( - api_client: TestClient, api_routes: AppRoutes, recipe_data: RecipeSiteTestCase, unique_user: TestUser + api_client: TestClient, + api_routes: AppRoutes, + recipe_data: RecipeSiteTestCase, + unique_user: TestUser, + monkeypatch: MonkeyPatch, ): + # Override init function for AbstractScraper to use the test html instead of calling the url + monkeypatch.setattr( + AbstractScraper, + "__init__", + get_init(recipe_data.html_file), + ) + # Override the get_html method of the RecipeScraperOpenGraph to return the test html + monkeypatch.setattr( + RecipeScraperOpenGraph, + "get_html", + open_graph_override(recipe_data.html_file.read_text()), + ) + # Skip image downloader + monkeypatch.setattr( + scraper, + "download_image_for_recipe", + lambda *_: "TEST_IMAGE", + ) + api_client.delete(api_routes.recipes_recipe_slug(recipe_data.expected_slug), headers=unique_user.token) response = api_client.post(api_routes.recipes_create_url, json={"url": recipe_data.url}, headers=unique_user.token) diff --git a/tests/pre_test.py b/tests/pre_test.py index 714d48412cce..9520976780b0 100644 --- a/tests/pre_test.py +++ b/tests/pre_test.py @@ -1,6 +1,10 @@ +import os + from mealie.core.config import get_app_dirs, get_app_settings from mealie.core.settings.db_providers import SQLiteProvider +os.environ["PRODUCTION"] = "True" + settings = get_app_settings() app_dirs = get_app_dirs() settings.DB_PROVIDER = SQLiteProvider(data_dir=app_dirs.DATA_DIR, prefix="test_") diff --git a/tests/test_config.py b/tests/test_config.py index bbbc19ef799d..1f040f1bc9eb 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -14,7 +14,4 @@ TEST_RAW_RECIPES = TEST_DATA.joinpath("scraper", "recipes-raw") TEST_CHOWDOWN_DIR = TEST_DATA.joinpath("migrations", "chowdown") TEST_NEXTCLOUD_DIR = TEST_DATA.joinpath("migrations", "nextcloud") -# Routes - -if __name__ == "__main__": - pass +TEST_HTML_DIR = TEST_DATA.joinpath("html") diff --git a/tests/unit_tests/test_cleaner.py b/tests/unit_tests/test_cleaner.py index accbddecb084..dce8143960d0 100644 --- a/tests/unit_tests/test_cleaner.py +++ b/tests/unit_tests/test_cleaner.py @@ -5,7 +5,7 @@ from datetime import timedelta import pytest from mealie.services.scraper import cleaner -from mealie.services.scraper.scraper import open_graph +from mealie.services.scraper.scraper_strategies import RecipeScraperOpenGraph from tests.test_config import TEST_RAW_HTML, TEST_RAW_RECIPES # https://github.com/django/django/blob/stable/1.3.x/django/core/validators.py#L45 @@ -100,7 +100,10 @@ def test_cleaner_instructions(instructions): def test_html_with_recipe_data(): path = TEST_RAW_HTML.joinpath("healthy_pasta_bake_60759.html") url = "https://www.bbc.co.uk/food/recipes/healthy_pasta_bake_60759" - recipe_data = open_graph.basic_recipe_from_opengraph(path.read_text(), url) + + open_graph_strategy = RecipeScraperOpenGraph(url) + + recipe_data = open_graph_strategy.get_recipe_fields(path.read_text()) assert len(recipe_data["name"]) > 10 assert len(recipe_data["slug"]) > 10 diff --git a/tests/utils/recipe_data.py b/tests/utils/recipe_data.py index 4cdf402dccc2..43d5f9caaea3 100644 --- a/tests/utils/recipe_data.py +++ b/tests/utils/recipe_data.py @@ -1,48 +1,62 @@ from dataclasses import dataclass +from pathlib import Path + +from tests.test_config import TEST_HTML_DIR @dataclass class RecipeSiteTestCase: url: str + html: str expected_slug: str num_ingredients: int num_steps: int + @property + def html_file(self) -> Path: + return TEST_HTML_DIR / self.html + def get_recipe_test_cases(): return [ RecipeSiteTestCase( url="https://www.seriouseats.com/taiwanese-three-cup-chicken-san-bei-gi-recipe", + html="taiwanese-three-cup-chicken-san-bei-gi-recipe.html", expected_slug="taiwanese-three-cup-chicken-san-bei-ji-recipe", num_ingredients=10, num_steps=3, ), RecipeSiteTestCase( url="https://www.rezeptwelt.de/backen-herzhaft-rezepte/schinken-kaese-waffeln-ohne-viel-schnickschnack/4j0bkiig-94d4d-106529-cfcd2-is97x2ml", + html="schinken-kase-waffeln-ohne-viel-schnickschnack.html", expected_slug="schinken-kase-waffeln-ohne-viel-schnickschnack", num_ingredients=7, num_steps=1, # Malformed JSON Data, can't parse steps just get one string ), RecipeSiteTestCase( url="https://cookpad.com/us/recipes/5544853-sous-vide-smoked-beef-ribs", + html="sous-vide-smoked-beef-ribs.html", expected_slug="sous-vide-smoked-beef-ribs", num_ingredients=7, num_steps=12, ), RecipeSiteTestCase( url="https://www.greatbritishchefs.com/recipes/jam-roly-poly-recipe", + html="jam-roly-poly-with-custard.html", expected_slug="jam-roly-poly-with-custard", num_ingredients=13, num_steps=9, ), RecipeSiteTestCase( url="https://recipes.anovaculinary.com/recipe/sous-vide-shrimp", + html="sous-vide-shrimp.html", expected_slug="sous-vide-shrimp", num_ingredients=5, num_steps=0, ), RecipeSiteTestCase( url="https://www.bonappetit.com/recipe/detroit-style-pepperoni-pizza", + html="detroit-style-pepperoni-pizza.html", expected_slug="detroit-style-pepperoni-pizza", num_ingredients=8, num_steps=5,