# Context As a forgetful person, I need to remember my morning routine, for this I have created a program that, depending on the time of day, will tell me what I should be doing: ``` From 06:00 to 06:59 - Do exercise From 07:00 to 07:59 - Read and study From 08:00 to 08:59 - Have breakfast ``` ## Story: Morning Routine Reminder ### User Story: As a forgetful person, I want a program that reminds me of my morning routine, So that I can stay on track with my activities. #### Scenario 1: Display "Do exercise" between 06:00 and 06:59 ```gherkin Given the current time is between 06:00 and 06:59 When I request the routine activity Then the system should display "Do exercise" ``` #### Scenario 2: Display "Read and study" between 07:00 and 07:59 ```gherkin Given the current time is between 07:00 and 07:59 When I request the routine activity Then the system should display "Read and study" ``` #### Scenario 3: Display "Have breakfast" between 08:00 and 08:59 ```gherkin Given the current time is between 08:00 and 08:59 When I request the routine activity Then the system should display "Have breakfast" ``` #### Scenario 4: Display "No activity" outside the defined time range ```gherkin Given the current time is before 05:59 or after 09:00 When I request the routine activity Then the system should display "No activity" ``` ## Iteration 2 - More precise time Now I'd like to be able to add things to do, that take less than an Hour as well as update the list of things to do for example: ``` From 06:00 to 06:59 - Do exercise From 07:00 to 07:29 - Read From 07:30 to 07:59 - Study From 08:00 to 08:59 - Have breakfast From 06:00 to 06:44 - Do exercise From 06:45 to 06:59 - Take a shower From 07:00 to 07:29 - Read From 07:30 to 07:59 - Study From 08:00 to 09:00 - Have breakfast ``` ### Try to refactor ## Extra questions: - What would happen to your system if this program were to be run on a system that was located in another time zone will it work? - How hard it's to add "new thing" to do? (how would afect your design and your test) for example: - How hard would it be on your design to add a meditation activity from 06:30 to 06:59 moving the exercise from 06:00 to 06:29 - How hard would it on you design to add an activity that takes 5 min? # Possible interface to use ```java interface MorningRouting { String whatShouldIDoNow(); } ``` ```java interface MorningRouting { void whatShouldIDoNow(); } ``` # Smelly implementation for iteration 1 in java ```java interface MorningRouting { void whatShouldIDoNow(); } public class MyMorningRouting implements MorningRouting { public void whatShouldIDoNow() { LocalDateTime now = LocalDateTime.now(); int currentHour = now.getHour(); if (currentHour == 6) { System.out.println("Do exercise"); } else if (currentHour == 7) { System.out.println("Read and study"); } else if (currentHour == 8) { System.out.println("Have breakfast"); } else { System.out.println("No activity"); } } } ```