File: test_admin.py

package info (click to toggle)
djangorestframework-api-key 3.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 392 kB
  • sloc: python: 926; makefile: 53; sh: 3
file content (93 lines) | stat: -rw-r--r-- 2,809 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
84
85
86
87
88
89
90
91
92
93
import pytest
from django.contrib.admin import site
from django.contrib.messages import get_messages
from django.contrib.messages.middleware import MessageMiddleware
from django.contrib.sessions.middleware import SessionMiddleware
from django.http.request import HttpRequest
from django.http.response import HttpResponse
from django.test import RequestFactory
from test_project.heroes.admin import HeroAPIKeyModelAdmin
from test_project.heroes.models import Hero, HeroAPIKey

from rest_framework_api_key.admin import APIKeyModelAdmin
from rest_framework_api_key.models import APIKey


def build_admin_request(rf: RequestFactory) -> HttpRequest:
    request = rf.post("/")

    def get_response(request: HttpRequest) -> HttpResponse:
        raise NotImplementedError  # pragma: no cover  # Unused in these tests.

    # NOTE: all middleware must be instantiated before
    # any middleware can process the request.
    sessions = SessionMiddleware(get_response)
    messages = MessageMiddleware(sessions.get_response)

    sessions.process_request(request)
    messages.process_request(request)

    return request


@pytest.mark.django_db
def test_admin_readonly_fields(rf: RequestFactory) -> None:
    request = build_admin_request(rf)

    admin = APIKeyModelAdmin(APIKey, site)

    assert admin.get_readonly_fields(request) == ("prefix",)

    api_key = APIKey(name="test")
    assert admin.get_readonly_fields(request, obj=api_key) == ("prefix",)

    api_key = APIKey(name="test", revoked=True)
    assert admin.get_readonly_fields(request, obj=api_key) == (
        "prefix",
        "name",
        "revoked",
        "expiry_date",
    )


@pytest.mark.django_db
def test_admin_create_api_key(rf: RequestFactory) -> None:
    request = build_admin_request(rf)

    admin = APIKeyModelAdmin(APIKey, site)
    api_key = APIKey(name="test")

    assert not api_key.pk
    admin.save_model(request, obj=api_key)
    assert api_key.pk

    messages = get_messages(request)
    assert len(messages) == 1


@pytest.mark.django_db
def test_admin_create_custom_api_key(rf: RequestFactory) -> None:
    request = build_admin_request(rf)

    admin = HeroAPIKeyModelAdmin(HeroAPIKey, site)
    api_key = HeroAPIKey(name="test", hero=Hero.objects.create())

    assert not api_key.pk
    admin.save_model(request, obj=api_key)
    assert api_key.pk

    messages = get_messages(request)
    assert len(messages) == 1


@pytest.mark.django_db
def test_admin_update_api_key(rf: RequestFactory) -> None:
    request = build_admin_request(rf)

    admin = APIKeyModelAdmin(APIKey, site)
    api_key, _ = APIKey.objects.create_key(name="test")

    api_key.name = "another-test"
    admin.save_model(request, obj=api_key)
    refreshed = APIKey.objects.get(pk=api_key.pk)
    assert refreshed.name == "another-test"