def test_redirect_keep_session(): app = Flak(__name__) app.secret_key = 'testing' @app.route('/', methods=['GET', 'POST']) def index(cx): if cx.request.method == 'POST': return flak.redirect('/getsession') cx.session['data'] = 'foo' return 'index' @app.route('/getsession') def get_session(cx): return cx.session.get('data', '<missing>') with app.test_client() as c: rv = c.get('/getsession') assert rv.data == b'<missing>' rv = c.get('/') assert rv.data == b'index' rv = c.post('/', data={}, follow_redirects=True) assert rv.data == b'foo' rv = c.get('/getsession') assert rv.data == b'foo'
def test_session_special_types(): app = Flak(__name__) app.secret_key = 'development-key' now = datetime.utcnow().replace(microsecond=0) the_uuid = uuid.uuid4() @app.after_request def modify_session(cx, response): cx.session['u'] = the_uuid cx.session['dt'] = now cx.session['b'] = b'\xff' cx.session['t'] = (1, 2, 3) return response @app.route('/') def dump_session_contents(cx): return pickle.dumps(dict(cx.session)) c = app.test_client() c.get('/') rv = pickle.loads(c.get('/').data) assert rv['dt'] == now assert rv['u'] == the_uuid assert rv['b'] == b'\xff' assert type(rv['b']) == bytes assert rv['t'] == (1, 2, 3)
def test_session_expiration(): permanent = True app = Flak(__name__) app.secret_key = 'testkey' @app.route('/') def index(cx): cx.session['test'] = 42 cx.session.permanent = permanent return '' @app.route('/test') def test(cx): return text_type(cx.session.permanent) client = app.test_client() rv = client.get('/') assert 'set-cookie' in rv.headers match = re.search(r'\bexpires=([^;]+)(?i)', rv.headers['set-cookie']) expires = parse_date(match.group()) expected = datetime.utcnow() + app.permanent_session_lifetime assert expires.year == expected.year assert expires.month == expected.month assert expires.day == expected.day rv = client.get('/test') assert rv.data == b'True' permanent = False rv = app.test_client().get('/') assert 'set-cookie' in rv.headers match = re.search(r'\bexpires=([^;]+)', rv.headers['set-cookie']) assert match is None
def test_session_transactions_keep_context(): app = Flak(__name__) app.secret_key = 'testing' with app.test_client() as c: rv = c.get('/') cx = c.captured_context req = cx.request assert req is not None with c.session(): assert req is cx.request
def test_session_stored_last(): app = Flak(__name__) app.secret_key = 'development-key' @app.after_request def modify_session(cx, response): cx.session['foo'] = 42 return response @app.route('/') def dump_session_contents(cx): return repr(cx.session.get('foo')) c = app.test_client() assert c.get('/').data == b'None' assert c.get('/').data == b'42'
def test_session(): app = Flak(__name__) app.secret_key = 'testkey' @app.route('/set', methods=['POST']) def set(cx): cx.session['value'] = cx.request.form['value'] return 'value set' @app.route('/get') def get(cx): return cx.session['value'] c = app.test_client() assert c.post('/set', data={'value': '42'}).data == b'value set' assert c.get('/get').data == b'42'
def test_session_transactions(): app = Flak(__name__) app.secret_key = 'testing' @app.route('/') def index(cx): return text_type(cx.session['foo']) with app.test_client() as c: with c.session() as sess: assert len(sess) == 0 sess['foo'] = [42] assert len(sess) == 1 rv = c.get('/') assert rv.data == b'[42]' with c.session() as sess: assert len(sess) == 1 assert sess['foo'] == [42]
def test_session_cookie_setting(): app = Flak(__name__) app.secret_key = 'dev key' is_permanent = True @app.route('/bump') def bump(cx): rv = cx.session['foo'] = cx.session.get('foo', 0) + 1 cx.session.permanent = is_permanent return str(rv) @app.route('/read') def read(cx): return str(cx.session.get('foo', 0)) def run_test(expect_header): with app.test_client() as c: assert c.get('/bump').data == b'1' assert c.get('/bump').data == b'2' assert c.get('/bump').data == b'3' rv = c.get('/read') set_cookie = rv.headers.get('set-cookie') assert (set_cookie is not None) == expect_header assert rv.data == b'3' is_permanent = True app.config['SESSION_REFRESH_EACH_REQUEST'] = True run_test(expect_header=True) is_permanent = True app.config['SESSION_REFRESH_EACH_REQUEST'] = False run_test(expect_header=False) is_permanent = False app.config['SESSION_REFRESH_EACH_REQUEST'] = True run_test(expect_header=False) is_permanent = False app.config['SESSION_REFRESH_EACH_REQUEST'] = False run_test(expect_header=False)