/
BigYahu
/
pytest
Обзор
Документация
Войти
/
BigYahu
/
pytest
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
test_courses_api.py
106 строк
3 KB
BigYahu
import: test_courses_api.py
14 май 2026, 10:34
Верифицирован
14 май 2026, 10:34
c21fe2e
Код
Авторство
О чём код?
import pytest from model_bakery import baker @pytest.fixture def course_factory(): def _factory(**kwargs): return baker.make("Course", **kwargs) return _factory @pytest.fixture def student_factory(): def _factory(**kwargs): return baker.make("Student", **kwargs) return _factory @pytest.fixture def api_client(): from rest_framework.test import APIClient return APIClient() @pytest.mark.django_db def test_retrieve_first_course(api_client, course_factory): course = course_factory(name="Mathematics", code="MATH101", description="Основы математики") url = f"/courses/{course.id}/" resp = api_client.get(url) assert resp.status_code == 200 data = resp.json() assert data["id"] == course.id or data.get("id") == course.id assert data.get("name") == course.name @pytest.mark.django_db def test_list_courses(api_client, course_factory): course_factory(_quantity=3, name="Course") resp = api_client.get("/courses/") assert resp.status_code == 200 data = resp.json() if isinstance(data, dict) and "results" in data: items = data["results"] else: items = data assert isinstance(items, list) assert len(items) >= 3 @pytest.mark.django_db def test_filter_courses_by_id(api_client, course_factory): a = course_factory(name="Physics", code="PHYS101") b = course_factory(name="Chemistry", code="CHEM101") c = course_factory(name="Biology", code="BIO101") resp = api_client.get("/courses/", {"id": a.id}) assert resp.status_code == 200 data = resp.json() items = data["results"] if isinstance(data, dict) and "results" in data else data ids = [item.get("id") for item in items] assert a.id in ids @pytest.mark.django_db def test_filter_courses_by_name(api_client, course_factory): course_factory(name="Algebra", code="ALG101") course_factory(name="Algebra II", code="ALG102") resp = api_client.get("/courses/", {"name": "Algebra"}) assert resp.status_code == 200 data = resp.json() items = data["results"] if isinstance(data, dict) and "results" in data else data for item in items: assert "Algebra" in item.get("name", "") @pytest.mark.django_db def test_create_course(api_client): payload = { "name": "Philosophy", "description": "Intro to philosophy", "code": "PHIL101", "credits": 3 } resp = api_client.post("/courses/", data=payload, format="json") assert resp.status_code in (200, 201) data = resp.json() assert data.get("name") == payload["name"] assert data.get("code") == payload["code"] @pytest.mark.django_db def test_update_course(api_client, course_factory): course = course_factory(name="Old Name", code="OLD1") payload = {"name": "New Name"} resp = api_client.put(f"/courses/{course.id}/", data=payload, format="json") assert resp.status_code in (200, 202) resp2 = api_client.get(f"/courses/{course.id}/") assert resp2.status_code == 200 assert resp2.json().get("name") == "New Name" @pytest.mark.django_db def test_delete_course(api_client, course_factory): course = course_factory(name="ToDelete", code="DEL1") resp = api_client.delete(f"/courses/{course.id}/") assert resp.status_code in (200, 204) resp2 = api_client.get(f"/courses/{course.id}/") assert resp2.status_code == 404