Skip to content

Commit

Permalink
employee_record.views: Log the user performing the transition
Browse files Browse the repository at this point in the history
  • Loading branch information
rsebille committed Feb 10, 2025
1 parent 97c6142 commit 1bfbff9
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 14 deletions.
4 changes: 2 additions & 2 deletions itou/employee_record/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@ def _fill_denormalized_fields(self):
# Business methods

@xwf_models.transition()
def ready(self):
def ready(self, *, user=None):
"""
Prepare the employee record for transmission
"""
Expand Down Expand Up @@ -340,7 +340,7 @@ def process(self, *, code, label, archive, as_duplicate=False):
)

@xwf_models.transition()
def enable(self):
def enable(self, *, user=None):
self._fill_denormalized_fields()

@xworkflows.transition_check(EmployeeRecordTransition.ARCHIVE)
Expand Down
6 changes: 3 additions & 3 deletions itou/www/employee_record_views/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,7 @@ def create_step_5(request, job_application_id, template_name="employee_record/cr

if request.method == "POST":
back_url = f"{reverse('employee_record_views:list')}?status={employee_record.status}"
employee_record.ready()
employee_record.ready(user=request.user)
toast_title, toast_message = (
"La création de cette fiche salarié est terminée",
"Vous pouvez suivre l'avancement de son traitement par l'ASP en sélectionnant les différents statuts.",
Expand Down Expand Up @@ -486,7 +486,7 @@ def disable(request, employee_record_id, template_name="employee_record/disable.
return HttpResponseRedirect(back_url)

if request.method == "POST" and request.POST.get("confirm") == "true":
employee_record.disable()
employee_record.disable(user=request.user)
messages.success(request, "La fiche salarié a bien été désactivée.", extra_tags="toast")
return HttpResponseRedirect(back_url)

Expand Down Expand Up @@ -518,7 +518,7 @@ def reactivate(request, employee_record_id, template_name="employee_record/react

if request.method == "POST" and request.POST.get("confirm") == "true":
try:
employee_record.enable()
employee_record.enable(user=request.user)
messages.success(request, "La fiche salarié a bien été réactivée.")
return HttpResponseRedirect(back_url)
except ValidationError as ex:
Expand Down
12 changes: 11 additions & 1 deletion tests/www/employee_record_views/test_create.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from itou.asp.models import Commune
from itou.companies.enums import SIAE_WITH_CONVENTION_KINDS, CompanyKind
from itou.employee_record.enums import Status
from itou.employee_record.models import EmployeeRecord
from itou.employee_record.models import EmployeeRecord, EmployeeRecordTransition
from itou.users.enums import LackOfNIRReason
from itou.utils.mocks.address_format import BAN_GEOCODING_API_RESULTS_FOR_SNAPSHOT_MOCK, mock_get_geocoding_data
from itou.utils.widgets import DuetDatePickerWidget
Expand Down Expand Up @@ -751,6 +751,16 @@ def test_eiti_fields_display(self, client):
assertNotContains(response, "Revenu brut mensuel moyen : ")
assertNotContains(response, "Taux de cotisation : ")

def test_transition_log(self, client):
employee_record = EmployeeRecord.objects.get(job_application=self.job_application)

assert employee_record.logs.count() == 0
client.post(self.url)

log = employee_record.logs.get()
assert log.transition == EmployeeRecordTransition.READY
assert log.user == self.user


class TestCreateEmployeeRecordStep5ForEITI(TestCreateEmployeeRecordStep5):
SIAE_KIND = CompanyKind.EITI
Expand Down
12 changes: 11 additions & 1 deletion tests/www/employee_record_views/test_disable.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from pytest_django.asserts import assertContains, assertRedirects

from itou.employee_record.enums import Status
from itou.employee_record.models import EmployeeRecord
from itou.employee_record.models import EmployeeRecord, EmployeeRecordTransition
from tests.companies.factories import CompanyWithMembershipAndJobsFactory
from tests.employee_record.factories import EmployeeRecordWithProfileFactory
from tests.job_applications.factories import JobApplicationWithCompleteJobSeekerProfileFactory
Expand Down Expand Up @@ -105,3 +105,13 @@ def test_disable_employee_record_completed(self, client, faker):

self.employee_record.refresh_from_db()
assert self.employee_record.status == Status.DISABLED

def test_transition_log(self, client):
client.force_login(self.user)

assert self.employee_record.logs.count() == 0
client.post(self.url, data={"confirm": "true"}, follow=True)

log = self.employee_record.logs.get()
assert log.transition == EmployeeRecordTransition.DISABLE
assert log.user == self.user
22 changes: 15 additions & 7 deletions tests/www/employee_record_views/test_reactivate.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from pytest_django.asserts import assertContains, assertNotContains, assertRedirects

from itou.employee_record.enums import Status
from itou.employee_record.models import EmployeeRecordTransition
from itou.utils.templatetags import format_filters
from tests.companies.factories import CompanyWithMembershipAndJobsFactory
from tests.employee_record.factories import EmployeeRecordWithProfileFactory
Expand All @@ -18,17 +19,14 @@ def setup_method(self):
self.company = CompanyWithMembershipAndJobsFactory(name="Wanna Corp.", membership__user__first_name="Billy")
self.user = self.company.members.get(first_name="Billy")
self.job_application = JobApplicationWithCompleteJobSeekerProfileFactory(to_company=self.company)
self.employee_record = EmployeeRecordWithProfileFactory(job_application=self.job_application)
self.employee_record = EmployeeRecordWithProfileFactory(
status=Status.DISABLED, job_application=self.job_application
)
self.url = reverse("employee_record_views:reactivate", args=(self.employee_record.id,))

def test_reactivate_employee_record(self, client, faker):
self.employee_record.ready()
self.employee_record.wait_for_asp_response(file=faker.asp_batch_filename(), line_number=1, archive=None)
process_code, process_message = "0000", "La ligne de la fiche salarié a été enregistrée avec succès."
self.employee_record.process(code=process_code, label=process_message, archive={})
self.employee_record.disable()

client.force_login(self.user)

response = client.get(f"{self.url}?status=DISABLED")
assertContains(response, "Confirmer la réactivation")

Expand All @@ -45,3 +43,13 @@ def test_reactivate_employee_record(self, client, faker):

response = client.get(f"{self.NEXT_URL}?status=DISABLED")
assertNotContains(response, approval_number_formatted)

def test_transition_log(self, client):
client.force_login(self.user)

assert self.employee_record.logs.count() == 0
client.post(self.url, data={"confirm": "true"}, follow=True)

log = self.employee_record.logs.get()
assert log.transition == EmployeeRecordTransition.ENABLE
assert log.user == self.user

0 comments on commit 1bfbff9

Please sign in to comment.