#- Copyright (c) 2008-2020 James Grenning --- All rights reserved
#- For exclusive use by participants in
#- Wingman Software training courses.
#- Cannot be used by attendees to train others without
#- written permission.
#- www.wingman-sw.com james@wingman-sw.com

------------------------------------------------------------
NOTE
As you complete a part of the exercise, it is helpful
to delete the completed part's text from this instructions
file.
------------------------------------------------------------

Current Situation
-----------------
The CEO is due here any minute for a demo. He may bring
the new hardware fresh from the vendor.  We want to have
working cleac code covered by tests.  The CEO is an
ex-programmer and knows clean code and the value of tests.
We need to show working code, not throw away prototypes.
Keep focused on adding new functionality test by test.

General Instructions
--------------------
Please do not change non-highlighted files
 -- let my know if you think you have to.

------------------------------------------------------------
Part-7 Time service callback
------------------------------------------------------------

Objectives
----------
Test-drive wiring in the callback.  Recognize when a
test group needs to be split due to unneeded setup.

Exercise
-----------------

The LightScheduler should register with the TimeService
for its wake up call.
    a) Make sure the scheduler registers during Create
      * You'll need to test-drive some more behavior into your
        FakeTimeService
    b) Make sure the scheduler removes its registration
       in Destroy
      * You'll need to test-drive some more behavior into your
        FakeTimeService
    c) These tests should be in their own test group,
       though they can be in the same file.
    d) Add a function to your FakeTimeService to simulate
       a one minute tic, and use it where you used to call
       WakeUp directly



Ask for help if you need it.  Share the keyboard.

-- After you finish this exercise, let me know. Continue --

------------------------------------------------------------
Part-8 Add more meat to the bones
------------------------------------------------------------

Objectives
----------
Get more practice at writing tests and incrementally building the
implementation.

Continue to add feature one slice at a time.

Practice designing good test cases from a vague couple
bullet points.

Current Situation
-----------------
We have a few more scheduler features that are needed. By now, you
probably know what to do.

Here are the remaining features

    a) Randomize light reaction by +/- 30 minutes
      * You'll need to test-drive a RandomMinuteGenerator.
      * You'll need a FakeRandomMinuteGenerator.
    b) EVERYDAY schedule can have specific days overridden.

Requirements refinement
    c) The fine print of the UI agreement says lights
       are numbered 1-32. The hardware wants 0 to 31.
    d) Weekend schedule should start at 6PM on FRIDAY.

Ask for help if you need it.  Share the keyboard.

-- After you finish this exercise, show me your work.  --
