Just a quick note about debugging. I just spent about 30 minutes tracking down a bug that caused a client to get invoiced for -18 hours of premium time and 1.12 days of regular time.
The basic problem is that an appointment can begin and end at any time, but from 6pm to 8am, an appointment costs more per hour than during business hours. This particular appointment started at 5pm and went until midnight, which should be 6 hours of premium and 1 hour of regular.
The bottom line: I had unit tests, which automatically tested a variety of start and end times across all time zones (to ensure that local time always prevailed over UTC), including:
- Starts before close, finishes after close before midnight
- Starts before close, finishes after midnight before opening
- Starts before close, finishes after next opening
- Starts after close, finishes before midnight
- Starts after close, finishes after midnight before opening
- Starts after close, finishes after next opening
Notice that I never tested what happened when the appointment ended at midnight.
The fix was a single equals sign, as in:
if (localEnd > midnight & local <= localOpenAtEnd)
+ if (localEnd >= midnight & local <= localOpenAtEnd)
Nicely done, Braverman. Nicely done.