Skip to content

Commit

Permalink
Update hours interface to be a little better
Browse files Browse the repository at this point in the history
  • Loading branch information
chriskuehl committed Aug 27, 2015
1 parent 30f5ccb commit ed40828
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 22 deletions.
31 changes: 17 additions & 14 deletions ocflib/lab/hours.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,22 @@
All times are assumed to be OST (OCF Standard Time).
"""
from collections import defaultdict
from collections import namedtuple
from datetime import date
from datetime import datetime


REGULAR_HOURS = {
0: (9, 18), # Monday
1: (9, 18), # Tuesday
2: (9, 18), # Wednesday
3: (9, 18), # Thursday
4: (9, 18), # Friday
5: (11, 18), # Saturday
6: (12, 17), # Sunday
}

MONDAY = 0
TUESDAY = 1
WEDNESDAY = 2
THURSDAY = 3
FRIDAY = 4
SATURDAY = 5
SUNDAY = 6
REGULAR_HOURS = defaultdict(lambda: (9, 18), {
SUNDAY: (12, 17),
SATURDAY: (11, 18),
})
HOLIDAYS = {
# start date, end date, holiday name, hours (date ranges are inclusive)
(date(2015, 8, 1), date(2015, 8, 25), 'Summer Break', (None, None)),
Expand All @@ -34,7 +35,7 @@
}


class DayHours(namedtuple('DayHours', ['name', 'open', 'close'])):
class DayHours(namedtuple('DayHours', ['name', 'holiday', 'open', 'close'])):

@classmethod
def from_date(cls, when=None):
Expand All @@ -45,16 +46,18 @@ def from_date(cls, when=None):
when = when.date()

my_name = when.strftime('%A') # e.g. 'Thursday'
my_holiday = None
my_hours = REGULAR_HOURS[when.weekday()]

for start, end, name, hours in HOLIDAYS:
if start <= when <= end:
my_name = '{} ({})'.format(name, my_name)
my_holiday = name
my_hours = hours
break

return cls(
name=my_name,
holiday=my_holiday,
open=my_hours[0],
close=my_hours[1],
)
Expand All @@ -79,7 +82,7 @@ def get_hours(when=None):
DayHours('Thursday', 9, 18)
>>> get_hours()
DayHours('Thanksgiving Break (Thursday)', None, None)
DayHours('Thursday', None, None)
"""
return DayHours.from_date(when)

Expand Down
32 changes: 24 additions & 8 deletions tests/lab/hours_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,16 @@
from freezegun import freeze_time

from ocflib.lab.hours import DayHours
from ocflib.lab.hours import FRIDAY
from ocflib.lab.hours import get_hours
from ocflib.lab.hours import is_open
from ocflib.lab.hours import MONDAY
from ocflib.lab.hours import REGULAR_HOURS
from ocflib.lab.hours import SATURDAY
from ocflib.lab.hours import SUNDAY
from ocflib.lab.hours import THURSDAY
from ocflib.lab.hours import TUESDAY
from ocflib.lab.hours import WEDNESDAY


FAKE_HOLIDAYS = {
Expand Down Expand Up @@ -67,16 +75,24 @@ def test_is_open_fails_with_just_date():

class TestDayHours:

@pytest.mark.parametrize('when,name,open,close', [
(date(2015, 3, 15), 'Sunday', 12, 17),
(datetime(2015, 3, 15), 'Sunday', 12, 17),
(datetime(2015, 3, 18), 'Wednesday', 9, 18),
(datetime(2015, 3, 14), 'Pi Day (Saturday)', None, None),
(date(2015, 3, 22), 'Random 3 Days (Sunday)', 1, 2),
(None, 'Saturday', 11, 18),
@pytest.mark.parametrize('when,name,holiday,open,close', [
(date(2015, 3, 15), 'Sunday', None, 12, 17),
(datetime(2015, 3, 15), 'Sunday', None, 12, 17),
(datetime(2015, 3, 18), 'Wednesday', None, 9, 18),
(datetime(2015, 3, 14), 'Saturday', 'Pi Day', None, None),
(date(2015, 3, 22), 'Sunday', 'Random 3 Days', 1, 2),
(None, 'Saturday', None, 11, 18),
])
def test_creation(self, mock_hours, mock_today, when, name, open, close):
def test_creation(self, mock_hours, mock_today, when, name, holiday, open, close):
for day_hours in [DayHours.from_date(when), get_hours(when)]:
assert day_hours.name == name
assert day_hours.open == open
assert day_hours.holiday == holiday
assert day_hours.close == close


def test_hours():
for day in (SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY):
open, close = REGULAR_HOURS[day]
assert isinstance(open, int)
assert isinstance(close, int)

0 comments on commit ed40828

Please sign in to comment.