77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
"""Crediting writes to a profile no request names, as a running rule does."""
|
|
|
|
from contextlib import contextmanager
|
|
|
|
from crum import set_current_request
|
|
from django.test import RequestFactory
|
|
|
|
from accounts.models import Account
|
|
from cases.models import Case
|
|
from common.actor import acting_for, current_actor
|
|
from common.models import Activity
|
|
|
|
|
|
@contextmanager
|
|
def _request(profile):
|
|
request = RequestFactory().get("/")
|
|
request.profile = profile
|
|
set_current_request(request)
|
|
try:
|
|
yield request
|
|
finally:
|
|
set_current_request(None)
|
|
|
|
|
|
def _rows(record):
|
|
return Activity.objects.filter(org=record.org, entity_id=record.pk)
|
|
|
|
|
|
def test_activity_outside_a_request_is_written_under_an_override(org_a, admin_profile):
|
|
assert current_actor() is None
|
|
with acting_for(admin_profile, "Deal won"):
|
|
assert current_actor() == (admin_profile, "Deal won")
|
|
account = Account.objects.create(org=org_a, name="Acme")
|
|
assert current_actor() is None
|
|
|
|
[row] = _rows(account)
|
|
assert (row.user, row.action, row.entity_type) == (
|
|
admin_profile,
|
|
"CREATE",
|
|
"Account",
|
|
)
|
|
assert row.metadata == {"automation": "Deal won"}
|
|
|
|
|
|
def test_without_an_override_activity_is_unchanged(org_a, admin_profile, user_profile):
|
|
quiet = Account.objects.create(org=org_a, name="No request")
|
|
assert not _rows(quiet).exists()
|
|
|
|
with _request(user_profile):
|
|
loud = Account.objects.create(org=org_a, name="In a request")
|
|
[row] = _rows(loud)
|
|
assert (row.user, row.metadata) == (user_profile, {})
|
|
|
|
|
|
def test_an_override_inside_a_request_wins_over_its_profile(
|
|
org_a, admin_profile, user_profile
|
|
):
|
|
with _request(user_profile), acting_for(admin_profile, "Tidy names"):
|
|
account = Account.objects.create(org=org_a, name="Acme")
|
|
[row] = _rows(account)
|
|
assert (row.user, row.metadata) == (admin_profile, {"automation": "Tidy names"})
|
|
|
|
|
|
def test_a_ticket_change_under_an_override_names_its_profile(
|
|
org_a, admin_profile, user_profile
|
|
):
|
|
ticket = Case.objects.create(org=org_a, name="Login bug", status="New")
|
|
with _request(user_profile), acting_for(admin_profile, "Escalate"):
|
|
ticket.status = "Pending"
|
|
ticket.save()
|
|
row = _rows(ticket).get(action="STATUS_CHANGED")
|
|
assert row.user == admin_profile
|
|
|
|
with acting_for(admin_profile, "Escalate"):
|
|
ticket.priority = "Urgent"
|
|
ticket.save()
|
|
assert _rows(ticket).get(action="PRIORITY_CHANGED").user == admin_profile
|