Skip to content

Commit ff83fd0

Browse files
committed
tests refactored 2
1 parent db68c51 commit ff83fd0

File tree

1 file changed

+72
-124
lines changed

1 file changed

+72
-124
lines changed

tests/test_tasks_crud.py

Lines changed: 72 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -1,164 +1,112 @@
11
import pytest
2-
from django.contrib.auth import get_user_model
32
from django.test import Client
43
from django.urls import reverse
5-
from task_manager.tasks.models import Task
4+
from django.contrib.auth import get_user_model
5+
66
from task_manager.statuses.models import Status
7+
from task_manager.tasks.models import Task
78

89
User = get_user_model()
9-
10-
11-
@pytest.fixture
12-
def status_new(db):
13-
return Status.objects.create(name="новый")
10+
pytestmark = pytest.mark.django_db
1411

1512

1613
@pytest.fixture
1714
def users(db):
18-
password = "P@ssw0rd12345"
19-
u1 = User.objects.create_user(
20-
username="alice", password=password, first_name="Alice", last_name="A"
21-
)
22-
u2 = User.objects.create_user(
23-
username="bob", password=password, first_name="Bob", last_name="B"
24-
)
25-
return {"alice": u1, "bob": u2, "password": password}
15+
pwd = "p12345678"
16+
u1 = User.objects.create_user(username="user1", password=pwd)
17+
u2 = User.objects.create_user(username="user2", password=pwd)
18+
return {"u1": u1, "u2": u2, "pwd": pwd}
2619

2720

2821
@pytest.fixture
2922
def auth_client(users):
3023
c = Client()
31-
c.login(username="alice", password=users["password"])
24+
c.login(username="user1", password=users["pwd"])
3225
return c
3326

3427

35-
@pytest.mark.django_db
36-
def test_users_list_is_public(client, users):
37-
resp = client.get(reverse("list", current_app="users"))
38-
assert resp.status_code == 200
39-
html = resp.content.decode()
40-
assert "alice" in html
41-
assert "bob" in html
42-
43-
44-
@pytest.mark.django_db
45-
def test_registration_get(client):
46-
r = client.get(reverse("create", current_app="users"))
47-
assert r.status_code == 200
48-
html = r.content.decode()
49-
assert 'name="username"' in html
50-
assert 'name="password1"' in html
51-
assert 'name="password2"' in html
52-
53-
54-
@pytest.mark.django_db
55-
def test_registration_post_creates_user(client):
56-
data = {
57-
"username": "charlie",
58-
"first_name": "Charlie",
59-
"last_name": "C",
60-
"password1": "XyZ12345!xyZ",
61-
"password2": "XyZ12345!xyZ",
62-
}
63-
r = client.post(reverse("create", current_app="users"), data=data)
64-
assert r.status_code in (302, 301)
65-
assert User.objects.filter(username="charlie").exists()
28+
@pytest.fixture
29+
def status_new(db):
30+
return Status.objects.create(name="новый")
6631

6732

68-
@pytest.mark.django_db
69-
def test_update_requires_auth_redirects(client, users):
70-
url = reverse("update", args=[users["alice"].pk], current_app="users")
71-
r = client.get(url)
33+
def test_login_required(client):
34+
r = client.get(reverse("tasks:index"))
7235
assert r.status_code in (302, 301)
73-
assert reverse("login") in r.url
74-
assert f"next={url}" in r.url
75-
76-
77-
@pytest.mark.django_db
78-
def test_user_can_update_self(auth_client, users):
79-
url = reverse("update", args=[users["alice"].pk], current_app="users")
80-
r_get = auth_client.get(url)
81-
assert r_get.status_code == 200
82-
83-
r_post = auth_client.post(
84-
url,
85-
data={"username": "alice_new", "first_name": "Al", "last_name": "A"},
86-
)
87-
assert r_post.status_code in (302, 301)
88-
89-
users["alice"].refresh_from_db()
90-
assert users["alice"].username == "alice_new"
91-
assert users["alice"].first_name == "Al"
92-
9336

94-
@pytest.mark.django_db
95-
def test_user_cannot_update_other(auth_client, users):
96-
url = reverse("update", args=[users["bob"].pk], current_app="users")
97-
r = auth_client.post(url, data={"username": "bob_hacked"})
98-
assert r.status_code in (302, 403, 404)
99-
users["bob"].refresh_from_db()
100-
assert users["bob"].username == "bob"
10137

102-
103-
@pytest.mark.django_db
104-
def test_delete_requires_auth_redirects(client, users):
105-
url = reverse("delete", args=[users["alice"].pk], current_app="users")
106-
r = client.get(url)
107-
assert r.status_code in (302, 301)
108-
assert reverse("login") in r.url
38+
def test_list(auth_client, users, status_new):
39+
Task.objects.create(name="Тестовая задача", description="Описание",
40+
status=status_new, author=users["u1"])
41+
Task.objects.create(name="Вторая", description="Ещё одна",
42+
status=status_new, author=users["u1"])
43+
r = auth_client.get(reverse("tasks:index"))
44+
assert r.status_code == 200
45+
html = r.content.decode()
46+
assert "Тестовая задача" in html
47+
assert "Вторая" in html
48+
49+
50+
def test_create(auth_client, users, status_new):
51+
resp = auth_client.post(reverse("tasks:create"), data={
52+
"name": "Новая задача",
53+
"description": "Что-то сделать",
54+
"status": status_new.pk,
55+
"executor": users["u2"].pk,
56+
})
57+
assert resp.status_code in (302, 301)
58+
assert Task.objects.filter(name="Новая задача",
59+
status=status_new,
60+
author=users["u1"]).exists()
61+
62+
63+
def test_update(auth_client, users, status_new):
64+
t = Task.objects.create(name="Черновик", description="Описание",
65+
status=status_new, author=users["u1"])
66+
resp = auth_client.post(reverse("tasks:update", args=[t.pk]), data={
67+
"name": "Изменено",
68+
"description": "Новое описание",
69+
"status": status_new.pk,
70+
"executor": users["u2"].pk,
71+
})
72+
assert resp.status_code in (302, 301)
73+
t.refresh_from_db()
74+
assert t.name == "Изменено"
75+
assert t.description == "Новое описание"
76+
assert t.executor == users["u2"]
77+
78+
79+
def test_view(auth_client, users, status_new):
80+
t = Task.objects.create(name="Посмотреть", description="Детали",
81+
status=status_new, author=users["u1"])
82+
r = auth_client.get(reverse("tasks:detail", args=[t.pk]))
83+
assert r.status_code == 200
84+
html = r.content.decode()
85+
assert "Посмотреть" in html
86+
assert "Детали" in html
10987

11088

111-
@pytest.mark.django_db
112-
def test_user_can_delete_self(users):
113-
c = Client()
114-
c.login(username="bob", password=users["password"])
115-
url = reverse("delete", args=[users["bob"].pk], current_app="users")
116-
r_get = c.get(url)
89+
def test_delete(auth_client, users, status_new):
90+
t = Task.objects.create(name="Удалить", description="Ненужная",
91+
status=status_new, author=users["u1"])
92+
r_get = auth_client.get(reverse("tasks:delete", args=[t.pk]))
11793
assert r_get.status_code == 200
118-
r_post = c.post(url)
94+
r_post = auth_client.post(reverse("tasks:delete", args=[t.pk]))
11995
assert r_post.status_code in (302, 301)
120-
assert not User.objects.filter(pk=users["bob"].pk).exists()
121-
122-
123-
@pytest.mark.django_db
124-
def test_user_cannot_delete_other(auth_client, users):
125-
url = reverse("delete", args=[users["bob"].pk], current_app="users")
126-
r = auth_client.post(url)
127-
assert r.status_code in (302, 403, 404)
128-
assert User.objects.filter(pk=users["bob"].pk).exists()
96+
assert not Task.objects.filter(pk=t.pk).exists()
12997

13098

131-
@pytest.mark.django_db
13299
def test_only_author_can_delete(auth_client, users, status_new):
133100
t = Task.objects.create(
134-
name="Чужая задача",
135-
description="...",
136-
status=status_new,
137-
author=users["bob"],
101+
name="Чужая задача", description="...",
102+
status=status_new, author=users["u2"]
138103
)
139104
r = auth_client.post(reverse("tasks:delete", args=[t.pk]))
140105
assert r.status_code in (302, 301)
141106
assert Task.objects.filter(pk=t.pk).exists()
142107

143108
c = Client()
144-
c.login(username="bob", password=users["password"])
109+
c.login(username="user2", password=users["pwd"])
145110
r2 = c.post(reverse("tasks:delete", args=[t.pk]))
146111
assert r2.status_code in (302, 301)
147112
assert not Task.objects.filter(pk=t.pk).exists()
148-
149-
150-
@pytest.mark.django_db
151-
def test_user_with_tasks_cannot_be_deleted(users, status_new):
152-
Task.objects.create(
153-
name="Тестовая",
154-
description="Проверка",
155-
status=status_new,
156-
author=users["bob"],
157-
)
158-
159-
c = Client()
160-
c.login(username="bob", password=users["password"])
161-
url = reverse("delete", args=[users["bob"].pk], current_app="users")
162-
r = c.post(url)
163-
assert r.status_code in (302, 301)
164-
assert User.objects.filter(pk=users["bob"].pk).exists()

0 commit comments

Comments
 (0)