├── .gitignore
├── SchoolMenuSkill.Tests
├── Models
│ └── MenuScheduleTests.cs
├── Properties
│ └── AssemblyInfo.cs
└── SchoolMenuSkill.Tests.csproj
├── SchoolMenuSkill.sln
└── SchoolMenuSkill
├── App_Data
└── menu.json
├── App_Start
└── WebApiConfig.cs
├── Controllers
└── HomeController.cs
├── Global.asax
├── Global.asax.cs
├── Helpers
└── DateTimeExtensions.cs
├── Models
├── Menu.cs
└── MenuSchedule.cs
├── Properties
├── AssemblyInfo.cs
└── PublishProfiles
│ └── SchoolMenuSkill20161226041913 - Web Deploy.pubxml
├── Providers
├── DateTimeProvider.cs
└── IDateTimeProvider.cs
├── SchoolMenuSkill.csproj
├── Speechlet
├── MenuIntentSchema.json
├── MenuSpeechlet.cs
└── MenuUtterances.txt
├── Web.Debug.config
├── Web.Release.config
├── Web.config
└── packages.config
/.gitignore:
--------------------------------------------------------------------------------
1 | [Dd]ebug/
2 | [Rr]elease/
3 | [Bb]in/
4 | [Oo]bj/
5 | *.suo
6 | *.sln.cache
7 | *.user
8 | TestResults/
9 | *.tmp
10 | *[Rr]e[Ss]harper.user
11 | _ReSharper.*/
12 | StyleCop.Cache
13 |
14 | .DS_Store
15 | Thumbs.db
16 | __MACOSX/
17 |
18 | # Generated
19 | .sass-cache/
20 | node_modules/
21 |
22 | #VS 2015
23 | .vs/config/applicationhost.config
24 |
25 | #NuGet
26 | **/packages/*
27 |
28 |
--------------------------------------------------------------------------------
/SchoolMenuSkill.Tests/Models/MenuScheduleTests.cs:
--------------------------------------------------------------------------------
1 | namespace SchoolMenuSkill.Tests.Models
2 | {
3 | using System;
4 | using System.Collections.Generic;
5 | using Microsoft.VisualStudio.TestTools.UnitTesting;
6 | using SchoolMenuSkill.Models;
7 | using SchoolMenuSkill.Providers;
8 |
9 | [TestClass]
10 | public class MenuScheduleTests
11 | {
12 | [TestMethod]
13 | public void MenuSchedule_GetsMenuForToday()
14 | {
15 | // Arrange
16 | var schedule = CreateSchedule();
17 |
18 | // Act
19 | var date = GetTestDate();
20 | var menu = schedule.GetMenuForDate(date);
21 |
22 | // Assert
23 | Assert.AreEqual(
24 | "On Monday 5th December, the menu is Pasta with tomato sauce, then Fish with Spinach, finishing with Ice cream",
25 | menu.ToString(date, GetDateTimeProvider()));
26 | }
27 |
28 | [TestMethod]
29 | public void MenuSchedule_GetsMenuForNextDay()
30 | {
31 | // Arrange
32 | var schedule = CreateSchedule();
33 |
34 | // Act
35 | var date = GetTestDate().AddDays(1);
36 | var menu = schedule.GetMenuForDate(date);
37 |
38 | // Assert
39 | Assert.AreEqual(
40 | "On Tuesday 6th December, the menu will be Rice, then Chicken with Peas, finishing with Mousse",
41 | menu.ToString(date, GetDateTimeProvider()));
42 | }
43 |
44 | [TestMethod]
45 | public void MenuSchedule_GetsMenuForDayInFirstWeek()
46 | {
47 | // Arrange
48 | var schedule = CreateSchedule();
49 |
50 | // Act
51 | var date = GetTestDate().AddDays(2);
52 | var menu = schedule.GetMenuForDate(date);
53 |
54 | // Assert
55 | Assert.AreEqual(
56 | "On Wednesday 7th December, the menu will be Spaghetti, then Beef with Carrots, finishing with Cake",
57 | menu.ToString(date, GetDateTimeProvider()));
58 | }
59 |
60 | [TestMethod]
61 | public void MenuSchedule_GetsMenuForDayInSecondWeek()
62 | {
63 | // Arrange
64 | var schedule = CreateSchedule();
65 |
66 | // Act
67 | var date = GetTestDate().AddDays(7).AddDays(2);
68 | var menu = schedule.GetMenuForDate(date);
69 |
70 | // Assert
71 | Assert.AreEqual(
72 | "On Wednesday 14th December, the menu will be Spaghetti, then Beef with Carrots, finishing with Cake",
73 | menu.ToString(date, GetDateTimeProvider()));
74 | }
75 |
76 | [TestMethod]
77 | public void MenuSchedule_GetsMenuForDayInThirdWeek()
78 | {
79 | // Arrange
80 | var schedule = CreateSchedule();
81 |
82 | // Act
83 | var date = GetTestDate().AddDays(14).AddDays(2);
84 | var menu = schedule.GetMenuForDate(date);
85 |
86 | // Assert
87 | Assert.AreEqual(
88 | "On Wednesday 21st December, the menu will be Spaghetti, then Beef with Carrots, finishing with Cake",
89 | menu.ToString(date, GetDateTimeProvider()));
90 | }
91 |
92 | [TestMethod]
93 | public void MenuSchedule_ReturnNullForDatePriorToInitialMenuDate()
94 | {
95 | // Arrange
96 | var schedule = CreateSchedule();
97 |
98 | // Act
99 | var date = GetTestDate().AddDays(-5);
100 | var menu = schedule.GetMenuForDate(date);
101 |
102 | // Assert
103 | Assert.IsNull(menu);
104 | }
105 |
106 | private static MenuSchedule CreateSchedule()
107 | {
108 | return new MenuSchedule
109 | {
110 | InitialDate = GetTestDate(),
111 | Menu = new List