# simple_schedule fixture returns schedules without any timing arguments
# the tuple values correspong to ctor args for Schedule
-simple_schedules = [
+_simple_schedules = [
('/foo', '6h', '', 'fs_name', '/foo'),
- ('/foo', '24h', '', 'fs_name', '/foo'),
- ('/bar', '1d', '', 'fs_name', '/bar'),
- ('/fnord', '1w', '', 'fs_name', '/fnord'),
+ ('/foo', '24h', '10d', 'fs_name', '/foo'),
+ ('/bar', '1d', '30d', 'fs_name', '/bar'),
+ ('/fnord', '1w', '4w1m', 'fs_name', '/fnord'),
]
-@pytest.fixture(params=simple_schedules)
+
+
+@pytest.fixture(params=_simple_schedules)
def simple_schedule(request):
return Schedule(*request.param)
+
@pytest.fixture
-def db_and_simple_schedules():
+def simple_schedules():
+ return [Schedule(*s) for s in _simple_schedules]
+
+
+@pytest.fixture
+def db():
db = sqlite3.connect(':memory:',
check_same_thread=False)
with db:
db.row_factory = sqlite3.Row
db.execute("PRAGMA FOREIGN_KEYS = 1")
db.executescript(Schedule.CREATE_TABLES)
- return db, [Schedule(*s) for s in simple_schedules]
-
+ return db
import datetime
from fs.schedule import Schedule
+SELECT_ALL = ('select * from schedules s'
+ ' INNER JOIN schedules_meta sm'
+ ' ON sm.schedule_id = s.id')
+
class TestSchedule(object):
def test_repeat_valid(self, simple_schedule):
repeat = simple_schedule.repeat
assert isinstance(repeat, int)
+
+ def test_store_single(self, db, simple_schedule):
+ simple_schedule.store_schedule(db)
+ row = ()
+ with db:
+ row = db.execute(SELECT_ALL).fetchone()
+
+ db_schedule = Schedule._from_get_query(row, simple_schedule.fs)
+
+ for var in vars(db_schedule):
+ assert getattr(simple_schedule, var) == getattr(db_schedule, var)
+
+ def test_store_multiple(self, db, simple_schedules):
+ [s.store_schedule(db) for s in simple_schedules]
+
+ rows = []
+ with db:
+ rows = db.execute(SELECT_ALL).fetchall()
+
+ assert len(rows) == len(simple_schedules)