def test__load():
    sess = mod.Session('id', {}, 'expires')

    assert sess._load('{"a": 1}') == {"a": 1}
    assert sess._load({"a": 1}) == {"a": 1}
    assert sess._load(None) == {}
    assert sess._load(111) == {}
def test_rotate(delete, generate_session_id, save):
    sess = mod.Session('id', {'a': 1}, 'expires')
    assert sess.rotate() == save.return_value

    delete.assert_called_once_with()
    assert sess.id == generate_session_id.return_value
    save.assert_called_once_with()
def test___setattr__():
    sess = mod.Session('id', {}, 'expires')
    assert sess.modified is False
    # should still show False
    sess.non_modifiable = 'test'
    assert sess.modified is False
    # should record modification
    sess.data = 'test'
    assert sess.modified is True
def test_save(request, _dump):
    sess = mod.Session('id', {'a': 1}, 'expires')
    sess.modified = True
    assert sess.save() is sess

    db = request.db.sessions
    db.Replace.assert_called_once_with('sessions',
                                       cols=['session_id', 'data', 'expires'])
    db.query.assert_called_once_with(db.Replace.return_value,
                                     session_id=sess.id,
                                     data=_dump.return_value,
                                     expires=sess.expires)
def test_reset(generate_session_id, get_expiry):
    sess = mod.Session('id', {'a': 1}, 'expires')
    assert sess.reset() is sess
    assert sess.id == generate_session_id.return_value
    assert sess.expires == get_expiry.return_value
    assert sess.data == {}
def test_expire_expired(delete):
    sess = mod.Session('id', {'a': 1}, mod.utcnow() - datetime.timedelta(100))
    with pytest.raises(mod.SessionExpired):
        sess.expire()

    delete.assert_called_once_with()
def test_expire_not_expired(delete):
    sess = mod.Session('id', {'a': 1}, mod.utcnow() + datetime.timedelta(100))
    assert sess.expire() is sess
    assert not delete.called
def test_delete(request):
    sess = mod.Session('id', {'a': 1}, 'expires')
    assert sess.delete() is sess
    db = request.db.sessions
    db.Delete.assert_called_once_with('sessions', where='session_id = ?')
    db.query.assert_called_once_with(db.Delete.return_value, sess.id)
def test__dump():
    sess = mod.Session('id', {'a': 1}, 'expires')
    assert sess._dump() == '{"a": 1}'
def test___init__(_load):
    data = 'data'
    sess = mod.Session('id', data, 'expires')
    sess._load.assert_called_once_with(data)
    assert sess.data == _load.return_value