Skip to content

Commit c5b1e5c

Browse files
committed
修复登录测试
1 parent 8d20789 commit c5b1e5c

File tree

13 files changed

+205
-119
lines changed

13 files changed

+205
-119
lines changed

Makefile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ checkfiles = fast_tmp/ tests/ conftest.py
22
black_opts = -l 100 -t py38
33
py_warn = PYTHONDEVMODE=1
44
test_settings = SETTINGS_MODULE=tests.settings
5+
pytest_opts = -n auto --cov=fast_tmp --tb=native -q
56

67
help:
78
@echo "fastapi-cli development makefile"
@@ -31,11 +32,11 @@ check: deps
3132
mypy fast_tmp/
3233

3334

34-
test_sqlite:
35-
$(py_warn) FASTAPI_SETTINGS_MODULE=tests.settings TORTOISE_TEST_DB=sqlite://:memory: pytest --cov-report=
35+
test: deps
36+
$(py_warn) FASTAPI_SETTINGS_MODULE=tests.settings TORTOISE_TEST_DB=sqlite://:memory: pytest --cov-report html $(pytest_opts)
3637

37-
test: deps test_sqlite
38-
coverage report
38+
test_sqlite:
39+
$(py_warn) FASTAPI_SETTINGS_MODULE=tests.settings TORTOISE_TEST_DB=sqlite://:memory: pytest --cov-report= $(pytest_opts)
3940

4041
publish: check
4142
poetry publish

conftest.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,3 @@
11
import os
22

3-
import pytest
4-
from tortoise.contrib.test import finalizer, initializer
5-
6-
7-
@pytest.fixture(scope="session", autouse=True)
8-
def initialize_tests(request):
9-
db_url = os.environ.get("TORTOISE_TEST_DB", "sqlite://:memory:")
10-
initializer(["tests.testmodels", "fast_tmp.models"], db_url=db_url, app_label="fast_tmp")
11-
request.addfinalizer(finalizer)
3+
os.environ.setdefault("FASTAPI_SETTINGS_MODULE", "tests.settings")

fast_tmp/contrib/auth/hashers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ class ScryptPasswordHasher(BasePasswordHasher):
521521
block_size = 8
522522
maxmem = 0
523523
parallelism = 1
524-
work_factor = 2 ** 14
524+
work_factor = 2**14
525525

526526
def encode(self, password, salt, n=None, r=None, p=None):
527527
self._check_encode_args(password, salt)

fast_tmp/models.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from typing import Tuple
22

33
from tortoise import Model, fields
4-
from tortoise.expressions import Q
54

65
from fast_tmp.conf import settings
76
from fast_tmp.contrib.auth.hashers import check_password, make_password
@@ -114,8 +113,8 @@ async def has_perms(self, codenames: Tuple[str, ...]) -> bool:
114113
for i in perms1:
115114
s.add(i.codename)
116115

117-
for i in codenames:
118-
if not i in s:
116+
for codename in codenames:
117+
if not (codename in s):
119118
return False
120119
return True
121120

fast_tmp/site/util.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from starlette.requests import Request
66
from tortoise import ForeignKeyFieldInstance, ManyToManyFieldInstance, Model, fields
77
from tortoise.fields.data import CharEnumFieldInstance, IntEnumFieldInstance
8-
from tortoise.queryset import QuerySet
98

109
from fast_tmp.amis.custom import Custom
1110
from fast_tmp.amis.forms import Column, ColumnInline, Control, ControlEnum, QuickEdit
@@ -19,7 +18,7 @@
1918
TransferItem,
2019
)
2120
from fast_tmp.amis.response import AmisStructError
22-
from fast_tmp.responses import ListDataWithPage, NotFoundError, TmpValueError
21+
from fast_tmp.responses import ListDataWithPage, TmpValueError
2322

2423
from ..amis.actions import DialogAction
2524
from ..amis.buttons import Operation

fast_tmp/utils/test.py

Lines changed: 0 additions & 25 deletions
This file was deleted.

poetry.lock

Lines changed: 120 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ cookiecutter = "^2.1.1"
1717
typer = "^0.6.1"
1818
fastapi = { extras = ["all"], version = "^0.85.0" }
1919
python-jose = "^3.3.0"
20+
asgiref = "^3.5.2"
2021

2122
[tool.poetry.dev-dependencies]
2223
tortoise-orm = "^0.19.2"
@@ -31,6 +32,10 @@ asynctest = "*"
3132
bandit = "*"
3233
mypy = "*"
3334

35+
[tool.poetry.group.dev.dependencies]
36+
httpx = "^0.23.0"
37+
toml = "^0.10.2"
38+
3439
[build-system]
3540
requires = ["poetry-core>=1.0.0"]
3641
build-backend = "poetry.core.masonry.api"

tests/test_admin.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from httpx import AsyncClient
2+
from tortoise import Tortoise
3+
from tortoise.contrib.test import SimpleTestCase
4+
5+
from fast_tmp.conf import settings
6+
from fast_tmp.factory import create_app
7+
from fast_tmp.models import User
8+
9+
10+
class TestSite(SimpleTestCase):
11+
client: AsyncClient
12+
13+
async def asyncSetUp(self) -> None:
14+
app = create_app()
15+
self.client = AsyncClient(app=app, base_url="http://test")
16+
await self.client.__aenter__()
17+
await Tortoise.init(settings.TORTOISE_ORM, _create_db=True)
18+
await Tortoise.generate_schemas(False)
19+
await self.create_superuser("admin", "admin")
20+
21+
async def asyncTearDown(self) -> None:
22+
await self.client.__aexit__()
23+
await Tortoise.close_connections()
24+
25+
async def create_superuser(self, username, password):
26+
if await User.filter(username=username).exists():
27+
return
28+
user = User(username=username, is_superuser=True)
29+
user.set_password(password)
30+
await user.save()
31+
32+
async def test_login(self):
33+
response = await self.client.get("/admin/site")
34+
assert response.status_code == 302
35+
assert response.headers.get("location") == "http://test/admin/login"
36+
# 登录
37+
response = await self.client.post(
38+
"/admin/login",
39+
headers={"ContentType": "application/x-www-form-urlencoded"},
40+
data={"username": "admin", "password": "admin"},
41+
)
42+
assert response.status_code == 302
43+
assert response.headers.get("location") == "http://test/admin/"

tests/test_annotations.py

Lines changed: 0 additions & 17 deletions
This file was deleted.

0 commit comments

Comments
 (0)