Corp/backend/tests/requests_app/test_process.py

64 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import pytest
from django.urls import reverse
from django import forms
pytestmark = pytest.mark.django_db
def test_request_process_approve_and_soft_fields(client, hr_user, request_obj, login, monkeypatch):
from requests_app.models import Request
login(hr_user)
import requests_app.views as v
class _FormStub(forms.Form):
status = forms.CharField(required=False)
comment = forms.CharField(required=False)
def __init__(self, data=None, files=None, instance=None, user=None):
super().__init__(data=data, files=files)
self.instance = instance
self.user = user
self.changed_data = [k for k in ("comment", "attachment") if data and k in data]
def is_valid(self):
self.cleaned_data = {
"status": self.data.get("status"),
"comment": self.data.get("comment"),
}
return True
monkeypatch.setattr(v, "RequestStatusForm", _FormStub)
url = reverse("requests_app:request_process", args=[request_obj.pk])
payload = {"status": Request.STATUS_APPROVED, "comment": "ok-comment"}
resp = client.post(url, payload, follow=True)
assert resp.status_code in (200, 302, 303)
request_obj.refresh_from_db()
assert request_obj.status == Request.STATUS_APPROVED
assert getattr(request_obj, "comment", None) == "ok-comment"
def test_request_process_invalid_status(client, hr_user, request_obj, login, monkeypatch):
from requests_app.models import Request
login(hr_user)
import requests_app.views as v
class _FormStub(forms.Form):
status = forms.CharField(required=False)
comment = forms.CharField(required=False)
def __init__(self, data=None, files=None, instance=None, user=None):
super().__init__(data=data, files=files)
self.instance = instance
self.user = user
self.changed_data = []
def is_valid(self):
self.cleaned_data = {"status": self.data.get("status"), "comment": self.data.get("comment")}
return True
monkeypatch.setattr(v, "RequestStatusForm", _FormStub)
url = reverse("requests_app:request_process", args=[request_obj.pk])
old_status = request_obj.status
for bad in (Request.STATUS_DRAFT, Request.STATUS_PENDING):
resp = client.post(url, {"status": bad})
assert resp.status_code == 200 # остаёмся на форме с ошибкой
request_obj.refresh_from_db()
assert request_obj.status == old_status # статус не изменился