File: test_session_commands.py

package info (click to toggle)
litestar 2.19.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 12,500 kB
  • sloc: python: 70,169; makefile: 254; javascript: 105; sh: 60
file content (83 lines) | stat: -rw-r--r-- 3,223 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
from __future__ import annotations

from typing import TYPE_CHECKING

from litestar import Litestar
from litestar.cli.commands.sessions import get_session_backend
from litestar.cli.main import litestar_group as cli_command
from litestar.middleware.rate_limit import RateLimitConfig
from litestar.middleware.session.server_side import ServerSideSessionConfig

if TYPE_CHECKING:
    from unittest.mock import MagicMock

    from _pytest.monkeypatch import MonkeyPatch
    from click.testing import CliRunner
    from pytest_mock import MockerFixture


def test_get_session_backend() -> None:
    session_middleware = ServerSideSessionConfig().middleware
    app = Litestar([], middleware=[RateLimitConfig(rate_limit=("second", 1)).middleware, session_middleware])

    assert get_session_backend(app) is session_middleware.kwargs["backend"]


def test_delete_session_no_backend(runner: CliRunner, monkeypatch: MonkeyPatch) -> None:
    monkeypatch.setenv("LITESTAR_APP", "docs.examples.hello_world:app")
    result = runner.invoke(cli_command, "sessions delete foo")

    assert result.exit_code == 1
    assert "Session middleware not installed" in result.output


def test_delete_session_cookie_backend(runner: CliRunner, monkeypatch: MonkeyPatch) -> None:
    monkeypatch.setenv("LITESTAR_APP", "docs.examples.middleware.session.cookie_backend:app")

    result = runner.invoke(cli_command, "sessions delete foo")

    assert result.exit_code == 1
    assert "Only server-side backends are supported" in result.output


def test_delete_session(
    runner: CliRunner, monkeypatch: MonkeyPatch, mocker: MockerFixture, mock_confirm_ask: MagicMock
) -> None:
    monkeypatch.setenv("LITESTAR_APP", "docs.examples.middleware.session.file_store:app")
    mock_delete = mocker.patch("litestar.stores.file.FileStore.delete")

    result = runner.invoke(cli_command, ["sessions", "delete", "foo"])

    mock_confirm_ask.assert_called_once_with("Delete session 'foo'?")
    assert not result.exception
    mock_delete.assert_called_once_with("foo")


def test_clear_sessions_no_backend(runner: CliRunner, monkeypatch: MonkeyPatch) -> None:
    monkeypatch.setenv("LITESTAR_APP", "docs.examples.hello_world:app")
    result = runner.invoke(cli_command, "sessions clear")

    assert result.exit_code == 1
    assert "Session middleware not installed" in result.output


def test_clear_sessions_cookie_backend(runner: CliRunner, monkeypatch: MonkeyPatch) -> None:
    monkeypatch.setenv("LITESTAR_APP", "docs.examples.middleware.session.cookie_backend:app")

    result = runner.invoke(cli_command, "sessions clear")

    assert result.exit_code == 1
    assert "Only server-side backends are supported" in result.output


def test_clear_sessions(
    runner: CliRunner, monkeypatch: MonkeyPatch, mocker: MockerFixture, mock_confirm_ask: MagicMock
) -> None:
    monkeypatch.setenv("LITESTAR_APP", "docs.examples.middleware.session.file_store:app")
    mock_delete = mocker.patch("litestar.stores.file.FileStore.delete_all")

    result = runner.invoke(cli_command, ["sessions", "clear"])

    mock_confirm_ask.assert_called_once_with("[red]Delete all sessions?")
    assert not result.exception
    mock_delete.assert_called_once()