()
| 33 | |
| 34 | |
| 35 | def test_session_middleware(): |
| 36 | @hug.get() |
| 37 | def count(request): |
| 38 | session = request.context["session"] |
| 39 | counter = session.get("counter", 0) + 1 |
| 40 | session["counter"] = counter |
| 41 | return counter |
| 42 | |
| 43 | def get_cookies(response): |
| 44 | simple_cookie = SimpleCookie(response.headers_dict["set-cookie"]) |
| 45 | return {morsel.key: morsel.value for morsel in simple_cookie.values()} |
| 46 | |
| 47 | # Add middleware |
| 48 | session_store = InMemoryStore() |
| 49 | middleware = SessionMiddleware(session_store, cookie_name="test-sid") |
| 50 | __hug__.http.add_middleware(middleware) |
| 51 | |
| 52 | # Get cookies from response |
| 53 | response = hug.test.get(api, "/count") |
| 54 | cookies = get_cookies(response) |
| 55 | |
| 56 | # Assert session cookie has been set and session exists in session store |
| 57 | assert "test-sid" in cookies |
| 58 | sid = cookies["test-sid"] |
| 59 | assert session_store.exists(sid) |
| 60 | assert session_store.get(sid) == {"counter": 1} |
| 61 | |
| 62 | # Assert session persists throughout the requests |
| 63 | headers = {"Cookie": "test-sid={}".format(sid)} |
| 64 | assert hug.test.get(api, "/count", headers=headers).data == 2 |
| 65 | assert session_store.get(sid) == {"counter": 2} |
| 66 | |
| 67 | # Assert a non-existing session cookie gets ignored |
| 68 | headers = {"Cookie": "test-sid=foobarfoo"} |
| 69 | response = hug.test.get(api, "/count", headers=headers) |
| 70 | cookies = get_cookies(response) |
| 71 | assert response.data == 1 |
| 72 | assert not session_store.exists("foobarfoo") |
| 73 | assert cookies["test-sid"] != "foobarfoo" |
| 74 | |
| 75 | |
| 76 | def test_logging_middleware(): |
nothing calls this directly
no test coverage detected