Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added tests for dms/publishers #418

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions back-end/src/common/tests/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# pylint: disable=unused-argument,redefined-outer-name,import-outside-toplevel,invalid-name,too-many-arguments,redefined-builtin
import pytest

from auth.models import User
from common.models.subjects import Subject

SUPERUSER_EMAIL = "superuserfortests@mail.com"
SUPERUSER_PASSWORD = "superuserpasswordfortests"


@pytest.fixture
def create_subject():

def call_me(
user: User,
title: str = "Тактическая подготовка 2",
annotation: str = None,
):
if annotation is None:
annotation = f"Пример анноттации для {title}"
subject, _ = Subject.objects.get_or_create(
title=title,
annotation=annotation,
user=user,
)
return subject

return call_me


def create_test_user(email: str = "test@email.ru", password: str = "1234"):
user = User.objects.create_user(
email=email,
password=password,
is_staff=True,
is_superuser=False,
)

return user


@pytest.fixture
def get_new_subject_data():

def call_me(
title: str = "Тактическая подготовка 2",
annotation: str = None,
):
if annotation is None:
annotation = f"Пример анноттации для {title}"
user = create_test_user()
data = {
"title": title,
"annotation": annotation,
"user": user,
}
return data

return call_me
65 changes: 65 additions & 0 deletions back-end/src/common/tests/test_subjects.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import pytest
from common.models.subjects import Subject


def unpack_subject(subject: Subject):
return {
"id": subject.id,
"title": subject.title,
"annotation": subject.annotation
}


@pytest.mark.django_db
def test_trailing_slash_redirect(su_client):
wrong = su_client.get("/api/lms/subjects")
assert wrong.status_code == 301

right = su_client.get("/api/lms/subjects/")
assert right.status_code == 200


@pytest.mark.django_db
def test_get_subject_by_id(su_client, get_new_subject_data, create_subject):
subj_data = get_new_subject_data(title="Строевая подготовка 2")
subject = create_subject(**subj_data)
subj_data = unpack_subject(subject)
subject_get_response = su_client.get(f"/api/lms/subjects/{subject.id}/")
assert subject_get_response.status_code == 200

subject_get_response = subject_get_response.json()
assert subject_get_response == subj_data


@pytest.mark.django_db
def test_get_subjects_by_title(su_client, get_new_subject_data, create_subject):
subj_data = get_new_subject_data(title="Тактическая подготовка 2")
subject = create_subject(**subj_data)
subj_data = unpack_subject(subject)

subject_response_get = su_client.get(
f"/api/lms/subjects/?title={subject.title}")
assert subject_response_get.status_code == 200

subject_response_get = subject_response_get.json()
assert len(subject_response_get) >= 1
for subject in subject_response_get:
subj_data["id"] = subject["id"]
assert subject == subj_data


@pytest.mark.django_db
def test_get_subjects_by_search(su_client, get_new_subject_data,
create_subject):
subj_data = get_new_subject_data(title="Тактико-специальная подготовка 2")
subject = create_subject(**subj_data)
word = subject.title.split()[1]

subject_response_get = su_client.get(f"/api/lms/subjects/?search={word}")
assert subject_response_get.status_code == 200

subject_response_get = subject_response_get.json()
assert len(subject_response_get) >= 1
for subject in subject_response_get:
print(subject)
assert subject["title"].find(word) != -1
114 changes: 114 additions & 0 deletions back-end/src/dms/tests/test_publishers_endpoints.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
import pytest
from dms.models.common import Publisher


def unpack_publisher(publisher: Publisher):
return {
"id": publisher.id,
"name": publisher.name
}


def create_publisher(name: str):
publisher, _ = Publisher.objects.get_or_create(name=name)
return publisher


@pytest.mark.django_db
def test_trailing_slash_redirect(su_client):
wrong = su_client.get("/api/dms/publishers")
assert wrong.status_code == 301

right = su_client.get("/api/dms/publishers/")
assert right.status_code == 200


@pytest.mark.django_db
def test_get_publishers_returns_list(su_client, publisher_data):
pub_list = []
for i in range(3):
pub_data = publisher_data(name=f"Publisher {i}")
publisher = create_publisher(**pub_data)
pub_data = unpack_publisher(publisher)
pub_list.append(pub_data)

publishers_get_response = su_client.get("/api/dms/publishers/")
assert publishers_get_response.status_code == 200

publishers_get_response = publishers_get_response.json()
for publisher in pub_list:
assert publisher in publishers_get_response


@pytest.mark.django_db
def test_get_publishers_by_id(su_client, publisher_data):
pub_data = publisher_data(name="Publisher with id")
publisher = create_publisher(**pub_data)
pub_data = unpack_publisher(publisher)

publishers_get_response = su_client.get(f"/api/dms/publishers/{publisher.id}/")
assert publishers_get_response.status_code == 200

publishers_get_response = publishers_get_response.json()
assert publishers_get_response == pub_data


@pytest.mark.django_db
def test_post_publishers_creates_publisher(su_client, publisher_data):
first = su_client.post(
"/api/dms/publishers/",
publisher_data(),
content_type="application/json"
)
assert first.status_code == 201

second = su_client.post("/api/dms/publishers/", publisher_data())
assert second.status_code == 201

assert first.data["id"] != second.data["id"]


@pytest.mark.django_db
def test_put_changes_name(su_client, publisher_data):
id_ = create_publisher(**publisher_data(name="Testing put method")).id

changes = {"name": "Changed name"}
put_response = su_client.put(
f"/api/dms/publishers/{id_}/",
changes,
content_type="application/json"
)
assert put_response.status_code == 200
publisher = Publisher.objects.get(id=id_)
assert publisher.name == changes["name"]


@pytest.mark.django_db
def test_delete_deletes_publisher(su_client, publisher_data):
pub_data = publisher_data(name="Publisher Name")
publisher, _ = Publisher.objects.get_or_create(**pub_data)
pub_data = unpack_publisher(publisher)

delete_response = su_client.delete(f"/api/dms/publishers/{publisher.id}/")
assert delete_response.status_code == 204
exists = True
try:
Publisher.objects.get(id=pub_data["id"])
except Publisher.DoesNotExist:
exists = False
assert not exists


@pytest.mark.django_db
def test_patch_formats_publisher(su_client, publisher_data):
id_ = create_publisher(**publisher_data(name="Testing put method")).id

changes = {"name": "New name"}
put_response = su_client.patch(
f"/api/dms/publishers/{id_}/",
changes,
content_type="application/json"
)
assert put_response.status_code == 200
publisher = Publisher.objects.get(id=id_)
assert publisher.name == changes["name"]