Skip to content

Commit e9b6347

Browse files
committed
Completed Website Milestone ksu-cis#2
1 parent 139f399 commit e9b6347

File tree

6 files changed

+468
-48
lines changed

6 files changed

+468
-48
lines changed

Data/Menu.cs

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using BleakwindBuffet.Data.Sides;
1212
using System;
1313
using System.Collections.Generic;
14+
using System.Linq;
1415
using System.Text;
1516

1617
namespace BleakwindBuffet.Data
@@ -127,5 +128,117 @@ public static IEnumerable<IOrderItem> FullMenu()
127128
fullMenu.AddRange(Drinks());
128129
return fullMenu;
129130
}
131+
132+
/// <summary>
133+
/// Searches the menu for matching items
134+
/// </summary>
135+
/// <param name="terms">The terms to search for</param>
136+
/// <returns>A collection of order items</returns>
137+
public static IEnumerable<IOrderItem> Search(string terms)
138+
{
139+
List<IOrderItem> results = new List<IOrderItem>();
140+
if (terms == null) return FullMenu();
141+
foreach (IOrderItem orderItem in FullMenu())
142+
{
143+
//For some reason string.Contains(string, StringComparison) was not an overload so I put the basic string contains for now
144+
if (orderItem.Name.ToLower().Contains(terms.ToLower()))
145+
{
146+
results.Add(orderItem);
147+
}
148+
}
149+
return results;
150+
}
151+
152+
public static IEnumerable<IOrderItem> FilterByCalories(IEnumerable<IOrderItem> menu, int? min, int? max)
153+
{
154+
if (min == null && max == null) return menu;
155+
var results = new List<IOrderItem>();
156+
157+
// only a maximum specified
158+
if (min == null)
159+
{
160+
foreach (IOrderItem orderItem in menu)
161+
{
162+
if (orderItem.Calories <= max) results.Add(orderItem);
163+
}
164+
return results;
165+
}
166+
// only a minimum specified
167+
if (max == null)
168+
{
169+
foreach (IOrderItem orderItem in menu)
170+
{
171+
if (orderItem.Calories >= min) results.Add(orderItem);
172+
}
173+
return results;
174+
}
175+
// Both minimum and maximum specified
176+
foreach (IOrderItem orderItem in menu)
177+
{
178+
if (orderItem.Calories >= min && orderItem.Calories <= max)
179+
{
180+
results.Add(orderItem);
181+
}
182+
}
183+
return results;
184+
}
185+
186+
public static IEnumerable<IOrderItem> FilterByPrice(IEnumerable<IOrderItem> menu, double? min, double? max)
187+
{
188+
if (min == null && max == null) return menu;
189+
var results = new List<IOrderItem>();
190+
191+
// only a maximum specified
192+
if (min == null)
193+
{
194+
foreach (IOrderItem orderItem in menu)
195+
{
196+
if (orderItem.Price <= max) results.Add(orderItem);
197+
}
198+
return results;
199+
}
200+
// only a minimum specified
201+
if (max == null)
202+
{
203+
foreach (IOrderItem orderItem in menu)
204+
{
205+
if (orderItem.Price >= min) results.Add(orderItem);
206+
}
207+
return results;
208+
}
209+
// Both minimum and maximum specified
210+
foreach (IOrderItem orderItem in menu)
211+
{
212+
if (orderItem.Price >= min && orderItem.Price <= max)
213+
{
214+
results.Add(orderItem);
215+
}
216+
}
217+
return results;
218+
}
219+
220+
public static IEnumerable<IOrderItem> FilterByItemTypes(IEnumerable<IOrderItem> menu, IEnumerable<string> itemTypes)
221+
{
222+
// If no filter is specified, just return the provided collection
223+
if (itemTypes == null || itemTypes.Count() == 0) return menu;
224+
// Filter the supplied collection of movies
225+
List<IOrderItem> results = new List<IOrderItem>();
226+
foreach (IOrderItem item in menu)
227+
{
228+
if (itemTypes.Contains("Entrees") && item is Entree)
229+
{
230+
results.Add(item);
231+
}
232+
else if (itemTypes.Contains("Sides") && item is Side)
233+
{
234+
results.Add(item);
235+
}
236+
else if(itemTypes.Contains("Drinks") && item is Drink)
237+
{
238+
results.Add(item);
239+
}
240+
}
241+
return results;
242+
}
130243
}
131244
}

DataTests/UnitTests/MenuTests.cs

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
using System.Linq;
1212
using System;
1313
using System.Security.Cryptography.X509Certificates;
14+
using System.Collections.Generic;
15+
using BleakwindBuffet.Data.Entrees;
16+
using BleakwindBuffet.Data.Sides;
1417

1518
namespace BleakwindBuffet.DataTests.UnitTests
1619
{
@@ -173,5 +176,177 @@ public void MenuContainsAllOrderItems()
173176
item => Assert.Equal("Large Warrior Water", item.ToString())
174177
);
175178
}
179+
180+
[Fact]
181+
public void MenuSearchReturnsCorrectItems()
182+
{
183+
184+
var menu = Menu.Search("Fried Miraak");
185+
Assert.Collection(menu,
186+
item => Assert.Equal("Small Fried Miraak", item.ToString()),
187+
item => Assert.Equal("Medium Fried Miraak", item.ToString()),
188+
item => Assert.Equal("Large Fried Miraak", item.ToString()));
189+
menu = Menu.Search(null);
190+
Assert.Collection(menu,
191+
item => Assert.Equal("Briarheart Burger", item.ToString()),
192+
item => Assert.Equal("Double Draugr", item.ToString()),
193+
item => Assert.Equal("Garden Orc Omelette", item.ToString()),
194+
item => Assert.Equal("Philly Poacher", item.ToString()),
195+
item => Assert.Equal("Smokehouse Skeleton", item.ToString()),
196+
item => Assert.Equal("Thalmor Triple", item.ToString()),
197+
item => Assert.Equal("Thugs T-Bone", item.ToString()),
198+
item => Assert.Equal("Small Dragonborn Waffle Fries", item.ToString()),
199+
item => Assert.Equal("Medium Dragonborn Waffle Fries", item.ToString()),
200+
item => Assert.Equal("Large Dragonborn Waffle Fries", item.ToString()),
201+
item => Assert.Equal("Small Fried Miraak", item.ToString()),
202+
item => Assert.Equal("Medium Fried Miraak", item.ToString()),
203+
item => Assert.Equal("Large Fried Miraak", item.ToString()),
204+
item => Assert.Equal("Small Mad Otar Grits", item.ToString()),
205+
item => Assert.Equal("Medium Mad Otar Grits", item.ToString()),
206+
item => Assert.Equal("Large Mad Otar Grits", item.ToString()),
207+
item => Assert.Equal("Small Vokun Salad", item.ToString()),
208+
item => Assert.Equal("Medium Vokun Salad", item.ToString()),
209+
item => Assert.Equal("Large Vokun Salad", item.ToString()),
210+
item => Assert.Equal("Small Aretino Apple Juice", item.ToString()),
211+
item => Assert.Equal("Medium Aretino Apple Juice", item.ToString()),
212+
item => Assert.Equal("Large Aretino Apple Juice", item.ToString()),
213+
item => Assert.Equal("Small Candlehearth Coffee", item.ToString()),
214+
item => Assert.Equal("Medium Candlehearth Coffee", item.ToString()),
215+
item => Assert.Equal("Large Candlehearth Coffee", item.ToString()),
216+
item => Assert.Equal("Small Markarth Milk", item.ToString()),
217+
item => Assert.Equal("Medium Markarth Milk", item.ToString()),
218+
item => Assert.Equal("Large Markarth Milk", item.ToString()),
219+
item => Assert.Equal("Small Blackberry Sailor Soda", item.ToString()),
220+
item => Assert.Equal("Medium Blackberry Sailor Soda", item.ToString()),
221+
item => Assert.Equal("Large Blackberry Sailor Soda", item.ToString()),
222+
item => Assert.Equal("Small Cherry Sailor Soda", item.ToString()),
223+
item => Assert.Equal("Medium Cherry Sailor Soda", item.ToString()),
224+
item => Assert.Equal("Large Cherry Sailor Soda", item.ToString()),
225+
item => Assert.Equal("Small Grapefruit Sailor Soda", item.ToString()),
226+
item => Assert.Equal("Medium Grapefruit Sailor Soda", item.ToString()),
227+
item => Assert.Equal("Large Grapefruit Sailor Soda", item.ToString()),
228+
item => Assert.Equal("Small Lemon Sailor Soda", item.ToString()),
229+
item => Assert.Equal("Medium Lemon Sailor Soda", item.ToString()),
230+
item => Assert.Equal("Large Lemon Sailor Soda", item.ToString()),
231+
item => Assert.Equal("Small Peach Sailor Soda", item.ToString()),
232+
item => Assert.Equal("Medium Peach Sailor Soda", item.ToString()),
233+
item => Assert.Equal("Large Peach Sailor Soda", item.ToString()),
234+
item => Assert.Equal("Small Watermelon Sailor Soda", item.ToString()),
235+
item => Assert.Equal("Medium Watermelon Sailor Soda", item.ToString()),
236+
item => Assert.Equal("Large Watermelon Sailor Soda", item.ToString()),
237+
item => Assert.Equal("Small Warrior Water", item.ToString()),
238+
item => Assert.Equal("Medium Warrior Water", item.ToString()),
239+
item => Assert.Equal("Large Warrior Water", item.ToString())
240+
);
241+
menu = Menu.Search("small");
242+
Assert.Collection(menu,
243+
item => Assert.Equal("Small Dragonborn Waffle Fries", item.ToString()),
244+
item => Assert.Equal("Small Fried Miraak", item.ToString()),
245+
item => Assert.Equal("Small Mad Otar Grits", item.ToString()),
246+
item => Assert.Equal("Small Vokun Salad", item.ToString()),
247+
item => Assert.Equal("Small Aretino Apple Juice", item.ToString()),
248+
item => Assert.Equal("Small Candlehearth Coffee", item.ToString()),
249+
item => Assert.Equal("Small Markarth Milk", item.ToString()),
250+
item => Assert.Equal("Small Blackberry Sailor Soda", item.ToString()),
251+
item => Assert.Equal("Small Cherry Sailor Soda", item.ToString()),
252+
item => Assert.Equal("Small Grapefruit Sailor Soda", item.ToString()),
253+
item => Assert.Equal("Small Lemon Sailor Soda", item.ToString()),
254+
item => Assert.Equal("Small Peach Sailor Soda", item.ToString()),
255+
item => Assert.Equal("Small Watermelon Sailor Soda", item.ToString()),
256+
item => Assert.Equal("Small Warrior Water", item.ToString())
257+
);
258+
menu = Menu.Search("Some random input");
259+
Assert.Empty(menu);
260+
}
261+
262+
[Fact]
263+
public void FilterByCaloriesFiltersCorrectly()
264+
{
265+
var fullMenu = new List<IOrderItem>();
266+
fullMenu.Add(new AretinoAppleJuice() { Size = Size.Medium });
267+
fullMenu.Add(new BriarheartBurger());
268+
fullMenu.Add(new FriedMiraak() { Size = Size.Large });
269+
var menu = Menu.FilterByCalories(fullMenu, null, null);
270+
Assert.Collection(menu,
271+
item => Assert.Equal("Medium Aretino Apple Juice", item.ToString()),
272+
item => Assert.Equal("Briarheart Burger", item.ToString()),
273+
item => Assert.Equal("Large Fried Miraak", item.ToString())
274+
);
275+
menu = Menu.FilterByCalories(fullMenu, null, 742);
276+
Assert.Collection(menu,
277+
item => Assert.Equal("Medium Aretino Apple Juice", item.ToString()),
278+
item => Assert.Equal("Large Fried Miraak", item.ToString())
279+
);
280+
menu = Menu.FilterByCalories(fullMenu, 307, null);
281+
Assert.Collection(menu,
282+
item => Assert.Equal("Briarheart Burger", item.ToString())
283+
);
284+
menu = Menu.FilterByCalories(fullMenu, 89, 742);
285+
Assert.Collection(menu,
286+
item => Assert.Equal("Large Fried Miraak", item.ToString())
287+
);
288+
}
289+
290+
[Fact]
291+
public void FilterByPriceFiltersCorrectly()
292+
{
293+
var fullMenu = new List<IOrderItem>();
294+
fullMenu.Add(new AretinoAppleJuice() { Size = Size.Medium });
295+
fullMenu.Add(new BriarheartBurger());
296+
fullMenu.Add(new FriedMiraak() { Size = Size.Large });
297+
var menu = Menu.FilterByPrice(fullMenu, null, null);
298+
Assert.Collection(menu,
299+
item => Assert.Equal("Medium Aretino Apple Juice", item.ToString()),
300+
item => Assert.Equal("Briarheart Burger", item.ToString()),
301+
item => Assert.Equal("Large Fried Miraak", item.ToString())
302+
);
303+
menu = Menu.FilterByPrice(fullMenu, null, 6.31);
304+
Assert.Collection(menu,
305+
item => Assert.Equal("Medium Aretino Apple Juice", item.ToString()),
306+
item => Assert.Equal("Large Fried Miraak", item.ToString())
307+
);
308+
menu = Menu.FilterByPrice(fullMenu, 0.88, null);
309+
Assert.Collection(menu,
310+
item => Assert.Equal("Briarheart Burger", item.ToString()),
311+
item => Assert.Equal("Large Fried Miraak", item.ToString())
312+
);
313+
menu = Menu.FilterByPrice(fullMenu, 0.88, 6.31);
314+
Assert.Collection(menu,
315+
item => Assert.Equal("Large Fried Miraak", item.ToString())
316+
);
317+
}
318+
319+
[Fact]
320+
public void FilterByItemTypesFiltersCorrectly()
321+
{
322+
var fullMenu = new List<IOrderItem>();
323+
fullMenu.Add(new AretinoAppleJuice());
324+
fullMenu.Add(new BriarheartBurger());
325+
fullMenu.Add(new FriedMiraak());
326+
string[] options = { "Entrees", "Sides", "Drinks" };
327+
var menu = Menu.FilterByItemTypes(fullMenu, null);
328+
Assert.Collection(menu,
329+
item => Assert.Equal("Small Aretino Apple Juice", item.ToString()),
330+
item => Assert.Equal("Briarheart Burger", item.ToString()),
331+
item => Assert.Equal("Small Fried Miraak", item.ToString())
332+
);
333+
menu = Menu.FilterByItemTypes(fullMenu, options);
334+
Assert.Collection(menu,
335+
item => Assert.Equal("Small Aretino Apple Juice", item.ToString()),
336+
item => Assert.Equal("Briarheart Burger", item.ToString()),
337+
item => Assert.Equal("Small Fried Miraak", item.ToString())
338+
);
339+
options[0] = null;
340+
menu = Menu.FilterByItemTypes(fullMenu, options);
341+
Assert.Collection(menu,
342+
item => Assert.Equal("Small Aretino Apple Juice", item.ToString()),
343+
item => Assert.Equal("Small Fried Miraak", item.ToString())
344+
);
345+
options[2] = null;
346+
menu = Menu.FilterByItemTypes(fullMenu, options);
347+
Assert.Collection(menu,
348+
item => Assert.Equal("Small Fried Miraak", item.ToString())
349+
);
350+
}
176351
}
177352
}

Documentation/Website-UML.pdf

292 KB
Binary file not shown.

0 commit comments

Comments
 (0)