41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
"""Tests of lecture step 5."""
|
|
|
|
from higher_lower.presentation.lectures.step_05_authenticated import (
|
|
User,
|
|
create_app,
|
|
create_blog_post,
|
|
is_authenticated,
|
|
)
|
|
|
|
|
|
def test_logged_in_user_can_create_a_post() -> None:
|
|
user = User("Angela")
|
|
user.is_logged_in = True
|
|
assert create_blog_post(user) == "This is Angela's new blog post."
|
|
|
|
|
|
def test_logged_out_user_gets_no_post() -> None:
|
|
assert create_blog_post(User("Bob")) is None
|
|
|
|
|
|
def test_user_can_be_passed_as_keyword() -> None:
|
|
user = User("Angela")
|
|
user.is_logged_in = True
|
|
assert create_blog_post(user=user) == "This is Angela's new blog post."
|
|
|
|
|
|
def test_wrapper_forwards_extra_arguments() -> None:
|
|
@is_authenticated
|
|
def shout(user: User, word: str, times: int = 1) -> str:
|
|
return f"{user.name}: {word * times}"
|
|
|
|
user = User("Ann")
|
|
user.is_logged_in = True
|
|
assert shout(user, "hi", times=2) == "Ann: hihi"
|
|
|
|
|
|
def test_page_shows_both_users() -> None:
|
|
body = create_app().test_client().get("/").get_data(as_text=True)
|
|
assert "Angela is logged in: This is Angela's new blog post." in body
|
|
assert "Bob is logged out: no post created" in body
|