public function test_scrape_another_recipe_with_ingredient_groups()
 {
     $recipe = new Recipe();
     $recipe->setDescription('Baked in coarse salt to seal in the juices, these lemon-topped rounds of tender chicken reveal an asparagus-and-Parmesan stuffed center.');
     $recipe->setImage('http://assets.marthastewart.com/styles/wmax-520-highdpi/d27/salt-chicken-0406-mla102006/salt-chicken-0406-mla102006_vert.jpg?itok=12QCyQ1z');
     $recipe->setName('Salt-Baked Chicken Breast Stuffed with Asparagus');
     $recipe->setRecipeIngredients([['title' => 'For The Chicken', 'data' => ['1 large whole chicken (about 7 1/2 pounds)', '2 lemons, very thinly sliced (less than 1/8 inch thick)', '2 large fresh tarragon sprigs']], ['title' => 'For The Filling', 'data' => ['Coarse salt', '2 bunches thin asparagus (about 2 pounds), trimmed', '2 tablespoons olive oil', '1 small leek, white and pale-green parts only, rinsed well and patted dry, finely chopped', '2 garlic cloves, minced', 'Freshly ground pepper', '2 tablespoons heavy cream', '1/3 cup finely grated fresh Parmesan cheese', '1/3 cup fresh breadcrumbs (from crustless bread)', '2 tablespoons fresh lemon juice']], ['title' => 'For The Crust', 'data' => ['6 cups coarse salt', '3 large egg whites', '1 tablespoon fresh tarragon leaves']], ['title' => 'For Serving', 'data' => ['Extra-virgin olive oil', 'Lemon juice', 'Coarse salt', 'Wild Mushrooms with Red Onions and Scallions']]]);
     $recipe->setRecipeInstructions([['title' => '', 'data' => ['Prepare the chicken: Cut all breast meat from bone in one piece, leaving the skin intact. Cut off tenders from breast. Remove enough thigh meat (without skin) to measure about 1/2 pound; cut into 1-inch pieces, and refrigerate until ready to use. Using a sharp knife, butterfly the thickest part of the breast, and fold thin parts down so that breast is of even thickness all over. Cover with plastic wrap, and refrigerate until cold.', 'Meanwhile, make the filling: Bring a large stockpot of water to a boil; add 1 tablespoon salt. Prepare an ice-water bath; set aside. Add asparagus to the boiling water, and cook until asparagus is bright green and tender, 2 to 3 minutes. Plunge asparagus into ice-water bath to stop the cooking. Drain, and pat dry with paper towels; set aside.', 'Heat oil in a medium skillet over medium-low heat. Add leek and garlic; season with salt and pepper. Cook, stirring occasionally, until leek is soft and translucent, about 5 minutes. Remove from heat, and let stand until cool.', 'Transfer the leek mixture to a food processor; pulse until coarsely pureed. Add reserved thigh meat, and pulse to combine. Add the cream and 1 teaspoon salt; pulse. Add the Parmesan cheese, breadcrumbs, and lemon juice, and pulse until filling is fully combined and finely chopped (you should have about 1 cup filling); set filling aside.', 'Preheat oven to 400 degrees. Stuff the chicken: Using your fingers, loosen skin from breast meat. Slide 3 lemon slices and 1 tarragon sprig between skin and meat of each side of breast. Lay breast, skin side down, on a double layer of cheesecloth (about 18 by 24 inches). Spread 3/4 cup reserved filling over center of breast. Arrange about 10 asparagus spears over filling; reserve remaining asparagus for serving. Spread remaining 1/4 cup filling over top of asparagus.', 'Fold both sides of breast toward center to enclose filling; secure with toothpicks. Cover any skinless areas of meat with remaining lemon slices. Wrap chicken tightly in the cheesecloth, and tie up with kitchen twine, forming a log (about 9 inches long and 5 inches in diameter). The chicken can be prepared ahead up to this point and refrigerated, wrapped in plastic, up to 1 day.', 'Make the crust: Using your hands, combine salt, egg whites, and 2 tablespoons water. Stir in tarragon leaves. Using about 1/2 cup of the salt mixture, make a bed in a large baking dish. Place cheesecloth-wrapped chicken, seam side down, on top of salt. Pat remaining salt mixture over chicken, covering it completely with a 1/2-inch-thick layer.', 'Bake the chicken until an instant-read thermometer inserted through the crust into the center of filling registers 155 degrees, about 1 hour 10 minutes (begin checking after 1 hour). Remove chicken from oven; let stand at room temperature until thermometer reaches 165 degrees, about 10 minutes.', 'Break off crust; discard. Let chicken stand for at least 30 minutes before slicing. Remove cheesecloth, and discard. Transfer chicken to a cutting board, and cut into 1/2-inch-thick slices. Drizzle remaining asparagus with oil and lemon juice, and sprinkle with salt. Serve chicken warm or at room temperature with the asparagus. Serve wild mushrooms with red onions and scallions on the side.']]]);
     $recipe->setRecipeYield('8');
     $recipe->setUrl('http://www.marthastewart.com/1160377/salt-baked-chicken-breast-stuffed-asparagus');
     $crawler = $this->client->request('GET', 'http://www.marthastewart.com/1160377/salt-baked-chicken-breast-stuffed-asparagus');
     $scraper = new MarthaStewartCom($crawler);
     $this->assertEquals($recipe, $scraper->scrape());
 }
 public function test_scrape_another_recipe_with_ingredient_groups()
 {
     $recipe = new Recipe();
     $recipe->setAuthor('Taste of Home\'s Fast Family Favorites');
     $recipe->setDescription('If you like pumpkin, you\'ll love these moist muffins. With an appealing streusel topping and tender apple bits throughout, they make a great accompaniment to a meal or a handy breakfast on the run.');
     $recipe->setImage('http://images.media-allrecipes.com/userphotos/250x250/742085.jpg');
     $recipe->setName('Apple Pumpkin Muffins');
     $recipe->setRecipeIngredients([['title' => '', 'data' => ['2 1/2 cups all-purpose flour', '2 cups sugar', '1 tablespoon pumpkin pie spice', '1 teaspoon baking soda', '1/2 teaspoon salt', '2 eggs', '1 cup canned or cooked pumpkin', '1/2 cup vegetable oil', '2 cups finely chopped peeled apples']], ['title' => 'Streusel', 'data' => ['1/4 cup sugar', '2 tablespoons all-purpose flour', '1/2 teaspoon ground cinnamon', '4 teaspoons cold butter or margarine']]]);
     $recipe->setRecipeInstructions([['title' => '', 'data' => ['In a bowl, combine the first five ingredients. In another bowl, combine the eggs, pumpkin and oil; stir into dry ingredients just until moistened. Fold in apples. Fill paper-lined muffin cups two-thirds full. In a small bowl, combine sugar, flour and cinnamon. Cut in butter until crumbly. Sprinkle over batter.', 'Bake at 350 degrees for 35-40 minutes or until golden brown. Cool for 5 minutes before removing from pans to wire racks.']]]);
     $recipe->setRecipeYield('18');
     $recipe->setUrl('http://allrecipes.com/recipe/42273/apple-pumpkin-muffins/');
     $crawler = $this->client->request('GET', 'http://allrecipes.com/recipe/42273/apple-pumpkin-muffins/');
     $scraper = new AllRecipesCom($crawler);
     $this->assertEquals($recipe, $scraper->scrape());
 }
 public function test_scrape_another_recipe_with_ingredient_groups()
 {
     $recipe = new Recipe();
     $recipe->setDescription('Enjoy this yummy red colored cake layered with frosting--a delicious dessert treat.');
     $recipe->setImage('http://images-gmi-pmc.edge-generalmills.com/00f6aa66-61c7-4245-b020-af313d1ad08a.jpg');
     $recipe->setName('Quick Red Velvet Cake');
     $recipe->setPrepTime(new DateInterval('PT40M'));
     $recipe->setRecipeIngredients([['title' => 'Cake', 'data' => ['1 box chocolate cake mix', '1 cup water', '1/2 cup sour cream', '1/4 cup vegetable oil', '3 eggs', '2 tablespoons unsweetened baking cocoa', '1 bottle (1 oz) red food color']], ['title' => 'Frosting', 'data' => ['1/2 cup all-purpose flour', '1 1/2 cups milk', '1 1/2 cups sugar', '1 1/2 cups butter or margarine, softened', '1 tablespoon vanilla']]]);
     $recipe->setRecipeInstructions([['title' => '', 'data' => ['Heat oven to 350 °F (325 °F for dark or nonstick pans). Grease and flour two 9-inch cake pans, or spray with baking spray with flour. In large bowl, beat cake ingredients with electric mixer on low speed 30 seconds, then on medium speed 2 minutes, scraping bowl occasionally. Pour batter into pans.', 'Bake 31 to 36 minutes or until toothpick inserted in center comes out clean. Cool 10 minutes; remove from pans to cooling rack. Cool completely.', 'Meanwhile, in 2-quart saucepan, cook flour and milk over medium heat, stirring constantly, until mixture is very thick. Cover surface with plastic wrap; cool to room temperature.', 'In large bowl, beat sugar and butter with electric mixer on high speed until light and fluffy. Gradually add flour mixture by tablespoonfuls, beating until smooth. Beat in vanilla.', 'Place 1 cake layer, top side down, on serving plate; spread with 1 cup frosting. Top with second layer, top side up. Frost side and top of cake with frosting. Store in refrigerator.']]]);
     $recipe->setRecipeYield('16');
     $recipe->setTotalTime(new DateInterval('PT2H45M'));
     $recipe->setUrl('https://www.pillsbury.com/recipes/quick-red-velvet-cake/d6859094-96b1-4ef9-b1ac-c21990234b82');
     $crawler = $this->client->request('GET', 'https://www.pillsbury.com/recipes/quick-red-velvet-cake/d6859094-96b1-4ef9-b1ac-c21990234b82');
     $scraper = new PillsburyCom($crawler);
     $this->assertEquals($recipe, $scraper->scrape());
 }
 public function test_scrape_a_recipe_with_ingredient_groups()
 {
     $recipe = new Recipe();
     $recipe->setAuthor('Hungry Happenings');
     $recipe->setDescription('Want an over-the-top way to make peach cobbler that won’t take you all day to decorate? This four-layer, cinnamon-infused yellow cake topped with cheesecake filling, caramelized peaches and brown sugar cake crumbles couldn’t be more amazing.');
     $recipe->setImage('http://images-gmi-pmc.edge-generalmills.com/0374ccd2-63a9-4380-a86d-0f4acb02d607.jpg');
     $recipe->setName('Naked Peach Cobbler Cake');
     $recipe->setRecipeIngredients([['title' => 'Cake Layers', 'data' => ['1 box Betty Crocker™ SuperMoist™ cake mix yellow', '1 cup water', '1/2 cup oil', '3 large eggs', '1 teaspoon cinnamon']], ['title' => 'Glazed Peaches', 'data' => ['10 tablespoons butter', '1/2 cup brown sugar', '1/2 cup granulated sugar', '10 peaches, peeled and sliced', '1 teaspoon cinnamon', '1/4 teaspoon nutmeg']], ['title' => 'Cheesecake Layers', 'data' => ['2 8-ounce blocks of cream cheese, softened', '1/4 cup granulated sugar', '7 ounces marshmallow fluff', '8 ounces frozen whipped topping, thawed']], ['title' => 'Brown Sugar Cake Crumbles', 'data' => ['1/3 cup brown sugar', '3/4 cup cake crumbs (from cake layers above)', '1/2 teaspoon cinnamon', '2 tablespoons butter, melted']]]);
     $recipe->setRecipeInstructions([['title' => '', 'data' => ['CAKE LAYERS: Preheat oven to 350 °F. Spray two 8-inch round cake pans with baking spray, then line bottoms of pans with rounds of parchment paper. Make cake mix according to package instructions. Stir in the cinnamon and equally divide batter between cake pans. Bake for 28-34 minutes until a toothpick inserted in the center comes out clean. Remove from oven and let cool in pan for 10 minutes, then un-mold onto a cooling rack and allow to cool completely.', 'GLAZED PEACHES: Heat butter in a skillet set over medium-high heat. Once melted, stir in both sugars and allow to dissolve. Toss in peach slices, cinnamon and nutmeg. Bring to a boil, then reduce heat to medium-low and cook until peaches are tender, 10-16 minutes. Remove from heat and allow to cool completely.', 'CHEESECAKE FILLING: Beat cream cheese using an electric mixer or food processor until light and fluffy. Add sugar and marshmallow fluff and beat until well incorporated. Beat in whipped topping just until combined.', 'BROWN SUGAR CAKE CRUMBLES: Preheat oven to 350 °F. Cut off the domed portion of each cake and crumble the tops into very small pieces. Measure out 3/4 cup crumbs and mix with brown sugar, cinnamon and melted butter. Spread out into a thin layer on a baking sheet. Bake for 10 minutes, then remove and stir. Bake an additional 6-10 minutes until fragrant and deep golden brown. Remove and allow to cool completely.', 'To assemble cake: Cut each cake into 2 even layers. Set one layer on a cake plate. Spread 1/4th of the cheesecake filling over top. Spoon 1/4 of the glazed peaches on top. Sprinkle on 1/4 of the brown sugar cake crumbles over the peaches. Repeat this process, adding the remaining 3 cake layers and topping them with cheesecake filling, peaches, and cake crumbles. Refrigerate until ready to serve. Will keep in the refrigerator up to 5 days.']]]);
     $recipe->setRecipeYield('12');
     $recipe->setTotalTime(new DateInterval('PT3H'));
     $recipe->setUrl('http://www.tablespoon.com/recipes/naked-peach-cobbler-cake/5155d33e-558b-4414-964c-a23518caded7');
     $crawler = $this->client->request('GET', 'http://www.tablespoon.com/recipes/naked-peach-cobbler-cake/5155d33e-558b-4414-964c-a23518caded7');
     $scraper = new TablespoonCom($crawler);
     $this->assertEquals($recipe, $scraper->scrape());
 }
 public function test_scrape_another_recipe_with_ingredient_groups()
 {
     $recipe = new Recipe();
     $recipe->setDescription('You\'ll fall in love with these pumpkin bars! They have a light texture, are full of cinnamon, ginger, raisins and nuts and are topped with cream cheese frosting.');
     $recipe->setImage('http://images-gmi-pmc.edge-generalmills.com/d1d62d2c-5cd2-42e2-811f-902aa914464a.jpg');
     $recipe->setName('Harvest Pumpkin-Spice Bars');
     $recipe->setPrepTime(new DateInterval('PT15M'));
     $recipe->setRecipeIngredients([['title' => 'Bars', 'data' => ['4 eggs', '2 cups granulated sugar', '1 cup vegetable oil', '1 can (15 oz) pumpkin (not pumpkin pie mix)', '2 cups Gold Medal™ all-purpose flour', '2 teaspoons baking powder', '2 teaspoons ground cinnamon', '1 teaspoon baking soda', '1/2 teaspoon salt', '1/2 teaspoon ground ginger', '1/4 teaspoon ground cloves', '1 cup raisins, if desired']], ['title' => 'Cream Cheese Frosting', 'data' => ['1 package (3 oz) cream cheese, softened', '1/3 cup butter or margarine, softened', '1 teaspoon vanilla', '2 cups powdered sugar', '1/2 cup chopped walnuts, if desired']]]);
     $recipe->setRecipeInstructions([['title' => '', 'data' => ['Heat oven to 350 °F. Lightly grease bottom and sides of 15x10x1-inch pan with shortening. In large bowl, beat eggs, granulated sugar, oil and pumpkin until smooth. Stir in flour, baking powder, cinnamon, baking soda, salt, ginger and cloves. Stir in raisins. Spread in pan.', 'Bake 25 to 30 minutes or until light brown. Cool completely in pan on cooling rack, about 2 hours.', 'In medium bowl, beat cream cheese, butter and vanilla with electric mixer on low speed until smooth. Gradually beat in powdered sugar, 1 cup at a time, on low speed until smooth and spreadable. Spread frosting over bars. Sprinkle with walnuts. For bars, cut into 7 rows by 7 rows. Store in refrigerator.']]]);
     $recipe->setRecipeYield('49');
     $recipe->setTotalTime(new DateInterval('PT1H40M'));
     $recipe->setUrl('http://www.bettycrocker.com/recipes/harvest-pumpkin-spice-bars/0ca6cc1d-4afd-452e-af7e-b931cfcb159a');
     $crawler = $this->client->request('GET', 'http://www.bettycrocker.com/recipes/harvest-pumpkin-spice-bars/0ca6cc1d-4afd-452e-af7e-b931cfcb159a');
     $scraper = new BettyCrockerCom($crawler);
     $this->assertEquals($recipe, $scraper->scrape());
 }
 public function test_scrape_another_recipe_with_ingredient_groups()
 {
     $recipe = new Recipe();
     $recipe->setAuthor('Ann Taylor Pittman');
     $recipe->setDescription('Thawed lemonade concentrate adds bold, fun flavor to this tart layer cake. This cake is the perfect solution to summer birthday parties or winter events when you need to wake up your taste buds.');
     $recipe->setImage('http://cdn-image.myrecipes.com/sites/default/files/styles/300x300/public/image/recipes/ck/02/04/layer-cake-ck-249959-x.jpg?itok=1Ma3bcrJ');
     $recipe->setName('Lemonade Layer Cake');
     $recipe->setPublisher('Cooking Light');
     $recipe->setRecipeIngredients([['title' => 'Cake', 'data' => ['1 1/3 cups granulated sugar', '6 tablespoons butter, softened', '1 tablespoon grated lemon rind', '3 tablespoons thawed lemonade concentrate', '2 teaspoons vanilla extract', '2 large eggs', '2 large egg whites', '2 cups all-purpose flour', '1 teaspoon baking powder', '1/2 teaspoon salt', '1/2 teaspoon baking soda', '1 1/4 cups fat-free buttermilk', 'Cooking spray']], ['title' => 'Frosting', 'data' => ['2 tablespoons butter, softened', '2 teaspoons grated lemon rind', '2 teaspoons thawed lemonade concentrate', '1/2 teaspoon vanilla extract', '8 ounces 1/3-less-fat cream cheese', '3 1/2 cups powdered sugar']]]);
     $recipe->setRecipeInstructions([['title' => '', 'data' => ['Preheat oven to 350 °.', 'To prepare cake, place first 5 ingredients in a large bowl; beat with a mixer at medium speed until well blended (about 5 minutes). Add eggs and egg whites, 1 at a time, beating well after each addition. Lightly spoon flour into dry measuring cups; level with a knife. Combine flour, baking powder, salt, and baking soda; stir well with a whisk. Add flour mixture and buttermilk alternately to sugar mixture, beginning and ending with flour mixture; beat well after each addition.', 'Pour batter into 2 (9-inch) round cake pans coated with cooking spray; sharply tap pans once on counter to remove air bubbles. Bake at 350 ° for 20 minutes or until wooden pick inserted in center comes out clean. Cool in pans 10 minutes on a wire rack; remove from pans. Cool completely on wire rack.', 'To prepare frosting, place 2 tablespoons butter and the next 4 ingredients (2 tablespoons butter through cream cheese) in a large bowl; beat with a mixer at high speed until fluffy. Add powdered sugar, and beat at low speed just until blended (do not overbeat). Chill 1 hour.', 'Place 1 cake layer on a plate; spread with 1/2 cup frosting. Top with remaining cake layer. Spread remaining frosting over top and sides of cake. Store cake loosely covered in the refrigerator.']]]);
     $recipe->setRecipeYield('16');
     $recipe->setUrl('http://www.myrecipes.com/recipe/lemonade-layer-cake');
     $crawler = $this->client->request('GET', 'http://www.myrecipes.com/recipe/lemonade-layer-cake');
     $scraper = new MyRecipesCom($crawler);
     $this->assertEquals($recipe, $scraper->scrape());
 }
 public function test_scrape_another_recipe_with_instruction_groups()
 {
     $recipe = new Recipe();
     $recipe->setCookTime(new DateInterval('PT50M'));
     $recipe->setDescription('A sweet and delicious baked french toast casserole with a praline topping.');
     $recipe->setImage('http://static.pauladeen.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/b/a/baked_french_toast_casserole_1.jpg');
     $recipe->setName('Baked French Toast Casserole');
     $recipe->setPrepTime(new DateInterval('PT10M'));
     $recipe->setRecipeIngredients([['title' => '', 'data' => ['dash salt', '1 teaspoon ground nutmeg, divided', '1 teaspoon ground cinnamon, divided', '1 tablespoon vanilla extract', '2 tablespoons sugar', '1 cup milk', '8 large eggs', '2 cups half and half', '1 loaf French bread, (13 to 16 oz)', '1/2 lb butter, plus more for pan', '1 cup light brown sugar, packed', '1 cup chopped pecans', '2 tablespoons light corn syrup', '1 cup raspberry preserves', '3 tablespoons water', '2 tablespoons raspberry liqueur']]]);
     $recipe->setRecipeInstructions([['title' => '', 'data' => ['Slice French bread into 20 slices, 1-inch thick each. (Use any extra bread for garlic toast or bread crumbs). Arrange slices in a generously buttered 9X13 casserole dish in 2 rows, overlapping the slices.', 'In a large bowl, combine the eggs, half and half, milk, sugar, vanilla, 1/2 teaspoon cinnamon, 1/2 teaspoon nutmeg and salt and beat with a rotary beater or whisk until blended but not too bubbly. Pour mixture over the bread slices, making sure all are covered evenly with the milk-egg mixture. Spoon some of the mixture in between the slices. Cover with foil and refrigerate overnight.', 'The next day, preheat oven to 350 °. Spread Praline Topping evenly over the bread and bake for 45 minutes, until puffed and lightly golden. Serve with Raspberry Syrup.']], ['title' => 'Praline Topping', 'data' => ['Combine butter, brown sugar, pecans, light corn syrup, 1/2 teaspoon cinnamon and 1/2 teaspoon nutmeg in a medium bowl and blend well. Spread over bread as directed above.']], ['title' => 'Raspberry Syrup', 'data' => ['Combine raspberry preserves, water and liqueur in a small saucepan and place over medium heat. Stir until warm and thinned out like syrup.']]]);
     $recipe->setTotalTime(new DateInterval('PT60M'));
     $recipe->setUrl('http://www.pauladeen.com/baked-french-toast-casserole/');
     $crawler = $this->client->request('GET', 'http://www.pauladeen.com/baked-french-toast-casserole/');
     $scraper = new PaulaDeenCom($crawler);
     $this->assertEquals($recipe, $scraper->scrape());
 }
 public function test_scrape_a_recipe_with_ingredient_and_instruction_groups()
 {
     $recipe = new Recipe();
     $recipe->setAuthor('Katherine Sacks');
     $recipe->setDescription('This version of our delicious vanilla-buttermilk cake is simply topped with a swoosh of orange cream-cheese frosting and raspberries. It\'s so easy to serve right out of the pan, which makes it perfect for backyard barbecues and potlucks.');
     $recipe->setImage('http://assets.epicurious.com/photos/57719d947823d8090d928cd9/master/pass/Vanilla-Buttermilk-Cake-Raspberries-27062016.jpg');
     $recipe->setName('Vanilla-Buttermilk Sheet Cake With Raspberries and Orange Cream-Cheese Frosting');
     $recipe->setPublisher('Epicurious');
     $recipe->setRecipeCategories(['Cake', 'Birthday', 'Raspberry', 'Orange', 'Cream Cheese', 'Vanilla', 'Dessert', 'Summer', 'Potluck', 'Buttermilk']);
     $recipe->setRecipeIngredients([['title' => 'For The Buttermilk Cake', 'data' => ['2 cups cake flour, plus more for pan', '1 teaspoon baking powder', '1/2 teaspoon baking soda', '1/4 teaspoon kosher salt', '3/4 cup (1 1/2 sticks) unsalted butter, room temperature', '1 3/4 cups granulated sugar, divided', '4 large eggs, separated', '1 teaspoon vanilla extract', '1 cup buttermilk']], ['title' => 'For The Vanilla Syrup', 'data' => ['1/4 cup granulated sugar', '1 vanilla bean, split lengthwise']], ['title' => 'For The Orange Cream-cheese Frosting', 'data' => ['1 (8-ounce) package cream cheese, chilled', '5 tablespoons unsalted butter, room temperature', '1/2 teaspoon finely grated orange zest', '1 1/2 teaspoons fresh orange juice', '1/2 teaspoon vanilla extract', '6 Tbsp. powdered sugar, sifted']], ['title' => 'For The Assembly', 'data' => ['4 ounces raspberries', 'Edible flowers (for garnish; optional)']]]);
     $recipe->setRecipeInstructions([['title' => 'Bake The Buttermilk Cake', 'data' => ['Place a rack in middle of oven; preheat to 350 °F. Flour a 13x9" pan, tapping out excess. Whisk baking powder, baking soda, salt, and remaining 2 cups flour in a medium bowl; set aside.', 'Using an electric mixer on medium-high speed, beat butter and 1 1/2 cups granulated sugar in a large bowl, scraping down sides of bowl as needed, until light and creamy, about 5 minutes. Add egg yolks in 2 additions, scraping down bowl after each. Beat in vanilla.', 'Reduce mixer speed to low, then add dry ingredients in 2 additions alternately with buttermilk in 2 additions, scraping down sides of bowl as needed.', 'Using electric mixer on medium speed, beat egg whites in another large bowl until soft peaks form, 2 –3 minutes. Slowly add remaining 1/4 cup granulated sugar and continue to beat until stiff, glossy peaks form, about 3 minutes more. Fold half of the egg whites into flour mixture, then gently fold in remaining egg whites.', 'Scrape batter into prepared pan; smooth surface. Bake, rotating pan halfway through and covering with foil during the last 15 minutes of baking, until golden brown, firm to the touch, and a tester inserted into the center comes out clean, 35 –40 minutes. Transfer pan to a wire rack and let cake cool.']], ['title' => 'Make The Vanilla Syrup', 'data' => ['Combine granulated sugar and 1/4 cup water in a medium saucepan. Scrape in vanilla seeds, add pod, and stir to combine. Bring to a boil, cover, and steep at least 15 minutes. Set aside to cool. Discard pod before using.']], ['title' => 'Make The Orange Cream-cheese Frosting', 'data' => ['Using electric mixer on medium-high speed, beat cream cheese and butter in a large bowl until smooth, about 1 minute. Beat in orange zest, orange juice, and vanilla. Reduce mixer speed to low and beat in powdered sugar, scraping down bowl as needed, until light and fluffy, 2 –3 minutes.']], ['title' => 'Assemble The Cake', 'data' => ['Using a pastry brush, brush top of cooled cake with 2 Tbsp. vanilla syrup; reserve remaining syrup for another use. Spread frosting over top of cake, swirling decoratively. Top with raspberries and edible flowers, if using.']], ['title' => 'Do Ahead', 'data' => ['Cake can be made 3 days ahead; wrap tightly in plastic and chill, or freeze up to 2 weeks. Syrup can be made 5 days ahead; store in an airtight container and chill. Frosting can be made 3 days ahead; cover with plastic wrap, pressing directly on surface, and chill. Bring to room temperature before using.']]]);
     $recipe->setRecipeYield('1 (13x9") cake');
     $recipe->setUrl('http://www.epicurious.com/recipes/food/views/vanilla-buttermilk-sheet-cake-with-raspberries-and-orange-cream-cheese-frosting');
     $crawler = $this->client->request('GET', 'http://www.epicurious.com/recipes/food/views/vanilla-buttermilk-sheet-cake-with-raspberries-and-orange-cream-cheese-frosting');
     $scraper = new EpicuriousCom($crawler);
     $this->assertEquals($recipe, $scraper->scrape());
 }
 public function test_scrape_another_recipe_with_ingredient_groups()
 {
     $recipe = new Recipe();
     $recipe->setAuthor('Lauren Salkeld');
     $recipe->setDescription('With a fudgy brownie bottom and rich layer of pumpkin cheesecake, these bars are on the must-make list for fall.');
     $recipe->setImage('http://del.h-cdn.co/assets/15/43/1600x800/landscape-1445292205-pumpkin-cheesecake-bars-1.jpg');
     $recipe->setName('Pumpkin Cheesecake Brownie Bars');
     $recipe->setPrepTime(new DateInterval('PT30M'));
     $recipe->setRecipeIngredients([['title' => 'For The Brownies', 'data' => ['1 c. (2 sticks) unsalted butter', '8 oz. semisweet chocolate, coarsely chopped', '2 c. sugar', '4 large eggs', '1 tbsp. pure vanilla extract', '1 1/4 c. all-purpose flour', '1 tsp. baking powder', '1/2 tsp. kosher salt', '1/2 c. chocolate chips']], ['title' => 'For The Cheesecake', 'data' => ['2 8-ounce packages cream cheese, at room temperature', '3/4 c. sugar', '1 1/2 tsp. pumpkin pie spice', '1/8 tsp. kosher salt', '2 tsp. pure vanilla extract', '1 c. canned pumpkin', '1/4 c. heavy cream', '1/4 c. sour cream']]]);
     $recipe->setRecipeInstructions([['title' => '', 'data' => ['Make the brownies: Butter a 9-x-13" baking pan and line with parchment paper, leaving a 2" overhang on all sides. Butter the parchment. Set a rack in the middle of the oven and preheat to 350 degrees F.', 'In a bowl set over a pan of barely simmering water, melt chocolate and butter, stirring until smooth. Set aside to cool.', 'In a medium bowl, whisk together sugar, eggs, and vanilla. In a second medium bowl, whisk together flour, baking powder, and salt. Add sugar mixture to melted chocolate and whisk to combine. Add flour mixture and chocolate chips and gently fold until just combined and streak free.', 'Pour brownie batter into prepared baking pan and smooth top. Bake until just set, 12 to 15 minutes. Let cool on a wire rack. Reduce oven temperature to 325 degrees F.', 'Make the cheesecake: In the bowl of a stand mixer fitted with the paddle attachment (or a large bowl with a hand mixer), beat cream cheese on medium speed, scraping down bowl as necessary, until completely smooth, 3 to 4 minutes. Add pumpkin pie spice and salt and beat, scraping down bowl as necessary, until smooth and fluffy, 3 to 4 minutes. Add vanilla and beat 30 seconds. Add eggs one at a time, beating 1 minute after each addition and scraping down bowl as necessary. Add pumpkin, heavy cream, and sour cream and beat on low until completely smooth and streak-free, about 1 minute.', 'Pour cheesecake batter over cooled brownies and smooth top. Bake until set around the edges and just barely jiggling in the center, 45 minutes. Let cheesecake cool to room temperature on a wire rack. Once completely cool, loosely cover cheesecake with plastic wrap and chill in the refrigerator at least 3 hours, but preferably overnight.']]]);
     $recipe->setRecipeYield('24 bars');
     $recipe->setTotalTime(new DateInterval('PT6H15M'));
     $recipe->setUrl('http://www.delish.com/cooking/recipe-ideas/recipes/a44395/pumpkin-cheesecake-brownie-bars-recipe/');
     $crawler = $this->client->request('GET', 'http://www.delish.com/cooking/recipe-ideas/recipes/a44395/pumpkin-cheesecake-brownie-bars-recipe/');
     $scraper = new DelishCom($crawler);
     $this->assertEquals($recipe, $scraper->scrape());
 }
 public function test_scrape_another_recipe_with_ingredient_groups()
 {
     $recipe = new Recipe();
     $recipe->setAuthor('Leetal Arazi');
     $recipe->setDescription('These luscious doughnuts are crispy on the outside and very fluffy and airy on the inside. They\'re usually served dipped in sugar or honey, but Leetal and Ron Arazi love to serve them with a saffron and cardamom syrup.');
     $recipe->setImage('http://cdn-image.foodandwine.com/sites/default/files/styles/551x551/public/201412-xl-sfinj-moroccan-doughnuts.jpg?itok=ClS4JKuU');
     $recipe->setName('Sfinj (Moroccan Doughnuts)');
     $recipe->setPrepTime(new DateInterval('PT30M'));
     $recipe->setRecipeCategories(['Winter', 'Hannukah', 'Holiday Open House', 'Moroccan', 'Desserts', 'Vegetarian', 'Breakfast', 'Brunch']);
     $recipe->setRecipeIngredients([['title' => 'Sugar Syrup', 'data' => ['1 cup water', '1 cup sugar', '5 cardamom pods', 'Pinch of saffron threads']], ['title' => 'Doughnuts', 'data' => ['8 cups unbleached all-purpose flour', '2 tablespoons yeast', '2 teaspoons baking powder', '2 teaspoons salt', '1 teaspoon sugar', '3 to 4 cups water', 'Canola oil, for frying']]]);
     $recipe->setRecipeInstructions([['title' => '', 'data' => ['Make the Sugar Syrup In a medium saucepan, combine all of the ingredients and bring to a boil. Reduce the heat and simmer until the syrup is the consistency of honey. (To test, place a few small plates in the freezer and drizzle a bit of the syrup on them throughout the cooking process.) Remove from the heat and let cool.', 'Make the Doughnuts In a large bowl, combine all of the dry ingredients. Add 3 1/2 cups of water and mix thoroughly; the dough should be loose and sticky and doesn’t need to hold its shape. Adjust the consistency if needed with the rest of the water. Cover the dough with cling plastic wrap and let rest for 30 minutes.', 'Make the Doughnuts In the bowl, using your hands, fold the dough over onto itself few times. Cover and let rise for 30 minutes, or until it doubles in volume. In a deep pan, heat 3 inches high of canola oil.', 'Make the Doughnuts Wet your hands and cut a piece of dough the size of 2 golf balls. With 2 fingers quickly make a hole in the center and stretch it a little to form a ring shape. Repeat to form the remaining doughnuts.', 'Make the Doughnuts Immediately and gently put the doughnuts in the oil and fry over moderate heat until golden on both sides. Drain the doughnuts on paper towels.', 'Make the Doughnuts Serve the sfinj immediately and let your guests drizzle them with the sugar syrup.']]]);
     $recipe->setTotalTime(new DateInterval('PT1H30M'));
     $recipe->setUrl('http://www.foodandwine.com/recipes/sfinj-moroccan-doughnuts');
     $crawler = $this->client->request('GET', 'http://www.foodandwine.com/recipes/sfinj-moroccan-doughnuts');
     $scraper = new FoodAndWineCom($crawler);
     $this->assertEquals($recipe, $scraper->scrape());
 }
Esempio n. 11
0
 public function test_scrape_another_standard_recipe()
 {
     $recipe = new Recipe();
     $recipe->setAuthor('Better Homes and Gardens');
     $recipe->setDescription('Flavors meld beautifully when you roast the apples alongside the seasoned pork in this easy, low-calorie dinner recipe.');
     $recipe->setImage('http://images.meredith.com/content/dam/bhg/Images/recipe/43/R137745.jpg.rendition.largest.ss.jpg');
     $recipe->setName('Roasted Pork with Apples');
     $recipe->setPrepTime(new DateInterval('PT15M'));
     $recipe->setRecipeCategories(['Diabetic Recipes', 'Dinner Recipes', 'Fruit Salad Recipes', 'Healthy Breakfast Recipes', 'Healthy Dinner Recipes', 'Healthy Lunch Recipes', 'Healthy Recipes', 'Heart-Healthy Recipes', 'Low Fat Recipes', 'Pork Recipes', 'Quick and Easy Healthy Recipes', 'Quick and Easy Recipes', 'Seasonal Recipes']);
     $recipe->setRecipeIngredients([['title' => '', 'data' => ['1 teaspoon snipped fresh sage or 1/2 teaspoon dried sage, crushed', '1/4 teaspoon salt', '1/4 teaspoon coarsely ground black pepper', '1 1 pound pork tenderloin', '1 tablespoon canola oil', '1 medium red onion, cut into thin wedges', '3 medium (1 pound) cooking apples (such as Granny Smith or Jonathan), cored and cut into 1/2-inch thick wedges', '2/3 cup apple juice or apple cider', 'Fresh sage sprigs (optional)']]]);
     $recipe->setRecipeInstructions([['title' => '', 'data' => ['In a small bowl, combine the snipped sage, salt, and pepper; rub on all sides of tenderloin. In a large skillet brown tenderloin in hot oil over medium heat, turning to brown all sides.', 'Transfer pork to a shallow roasting pan. Add onion to pan around pork. Roast, uncovered, at 425 degrees F for 10 minutes. Stir in apples; roast for 10 to 15 minutes more or until pork internal temperature registers 155 degrees F on instant read thermometer and juices run clear.', 'Transfer pork and apple mixture to serving platter; cover with foil. Let stand for 10 minutes before slicing (temperature of the meat will rise 5 degrees F while it stands).', 'In a small saucepan bring apple juice to a boil; simmer gently, uncovered, for 8 to 10 minutes or until reduced to 1/4 to 1/3 cup. Drizzle over meat and apple mixture. If desired, garnish with additional sage sprigs.']]]);
     $recipe->setRecipeYield('4');
     $recipe->setUrl('http://www.bhg.com/recipe/pork/roasted-pork-with-apples/');
     $crawler = $this->client->request('GET', 'http://www.bhg.com/recipe/pork/roasted-pork-with-apples/');
     $scraper = new BHGCom($crawler);
     $scraped = $scraper->scrape();
     $this->assertEquals($recipe, $scraped);
 }
 public function test_scrape_a_recipe_with_ingredient_and_instruction_groups()
 {
     $recipe = new Recipe();
     $recipe->setAuthor('Kelly Senyei');
     $recipe->setCookTime(new DateInterval('PT8M'));
     $recipe->setDescription('Chicken teriyaki makes a weekly appearance in my home, whether it\'s via the slow cooker, in the form of meatballs or as the stellar sauce atop crispy baked chicken wings. And with the perfect homemade teriyaki sauce in tote, it\'s time to wave goodbye to that bottled stuff and say hello to my go-to tips for successful teriyaki chicken stir-fry.');
     $recipe->setImage('http://www.justataste.com/wp-content/uploads/2016/03/teiryaki-chicken-stir-fry-noodles-recipe.jpg');
     $recipe->setName('Teriyaki Chicken Stir-Fry with Noodles');
     $recipe->setPrepTime(new DateInterval('PT20M'));
     $recipe->setRecipeCategories(['Entrées', 'Healthy', 'Recipes']);
     $recipe->setRecipeIngredients([['title' => 'For The Teriyaki Sauce', 'data' => ['1/2 cup low sodium soy sauce', '1/3 cup low sodium chicken stock', '1/4 cup pineapple juice', '1/4 cup packed light brown sugar', '2 cloves garlic, minced', '1 teaspoon minced fresh ginger', '2 1/2 teaspoons cornstarch']], ['title' => 'For The Stir-fry', 'data' => ['2 Tablespoons vegetable oil, divided', '2 cups broccoli florets', '1 cup sliced red peppers', '1 1/2 cups shredded carrots', '2 large boneless, skinless chicken breasts, cut into thin strips', '8 ounces udon or rice noodles, cooked']]]);
     $recipe->setRecipeInstructions([['title' => 'Make The Teriyaki Sauce', 'data' => ['Whisk together all of the teriyaki sauce ingredients in a medium bowl. Set the sauce aside.']], ['title' => 'Make The Stir-fry', 'data' => ['Add 1 tablespoon vegetable oil to a wok or large, tall-sided sauté pan set over medium-high heat. Add the broccoli, peppers and carrots and cook, stirring constantly, for 3 minutes until the vegetables are still crisp but tender. Transfer the vegetables to a bowl.', 'Add the remaining 1 tablespoon vegetable oil to the pan and place it back over medium-high heat. Add the sliced chicken and cook, stirring constantly, for about 3 minutes or until it is no longer pink. Push the chicken to the edges of the pan then add the prepared teriyaki sauce to the center of the pan. Bring the sauce to a boil and cook it until until it thickens to the consistency of syrup, about 3 minutes.', 'Reduce the heat to low then return the cooked vegetables to the pan and add the cooked noodles, tossing to combine. Serve the stir-fry immediately.']]]);
     $recipe->setRecipeYield('4');
     $recipe->setUrl('http://www.justataste.com/teriyaki-chicken-stir-fry-noodles-recipe/');
     $crawler = $this->client->request('GET', 'http://www.justataste.com/teriyaki-chicken-stir-fry-noodles-recipe/');
     $scraper = new JustATasteCom($crawler);
     $this->assertEquals($recipe, $scraper->scrape());
 }