From b469ab6e9cb7c0967a97b556dbc809e7b5e926ab Mon Sep 17 00:00:00 2001 From: Davi Alexandre Date: Thu, 4 Oct 2018 15:36:31 -0300 Subject: [PATCH] PCHR-3039: Allow admins to change Absence Type of open Leave Requests --- .../Service/LeaveRequestRights.php | 3 +- .../Service/LeaveRequestRightsTest.php | 29 ++++++++++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Service/LeaveRequestRights.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Service/LeaveRequestRights.php index 674a0a79c05..5f38f75905a 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Service/LeaveRequestRights.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Service/LeaveRequestRights.php @@ -77,8 +77,9 @@ public function canChangeDatesFor($contactID, $statusID, $requestType) { */ public function canChangeAbsenceTypeFor($contactID, $statusID) { $isOpenLeaveRequest = in_array($statusID, LeaveRequest::getOpenStatuses()); + $isLeaveContactOrAdmin = $this->currentUserIsLeaveContact($contactID) || $this->currentUserIsAdmin(); - return $this->currentUserIsLeaveContact($contactID) && $isOpenLeaveRequest; + return $isLeaveContactOrAdmin && $isOpenLeaveRequest; } /** diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/Service/LeaveRequestRightsTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/Service/LeaveRequestRightsTest.php index 9ecd600abac..1c6f94c45b6 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/Service/LeaveRequestRightsTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/Service/LeaveRequestRightsTest.php @@ -228,17 +228,24 @@ public function testCanChangeAbsenceTypeForReturnsFalseWhenCurrentUserIsLeaveCon } /** - * @dataProvider leaveRequestStatusesDataProvider + * @dataProvider openLeaveRequestStatusesDataProvider */ - public function testCanChangeAbsenceTypeForReturnsFalseWhenCurrentUserNotLeaveContactIrrespectiveOfStatusPassed($status) { + public function testCanChangeAbsenceTypeForReturnsTrueWhenCurrentUserIsAdminAndTheLeaveRequestIsOpen($status) { $contactID = 2; - $this->assertFalse( - $this->getLeaveRequestRightsForLeaveManagerAsCurrentUser()->canChangeAbsenceTypeFor( + $this->assertTrue( + $this->getLeaveRequestRightsForAdminAsCurrentUser()->canChangeAbsenceTypeFor( $contactID, $status ) ); + } + + /** + * @dataProvider closedLeaveRequestStatusesDataProvider + */ + public function testCanChangeAbsenceTypeForReturnsFalseWhenCurrentUserIsAdminAndTheLeaveRequestIsClosed($status) { + $contactID = 2; $this->assertFalse( $this->getLeaveRequestRightsForAdminAsCurrentUser()->canChangeAbsenceTypeFor( @@ -246,6 +253,20 @@ public function testCanChangeAbsenceTypeForReturnsFalseWhenCurrentUserNotLeaveCo $status ) ); + } + + /** + * @dataProvider leaveRequestStatusesDataProvider + */ + public function testCanChangeAbsenceTypeForReturnsFalseWhenCurrentUserNotLeaveContactIrrespectiveOfStatusPassed($status) { + $contactID = 2; + + $this->assertFalse( + $this->getLeaveRequestRightsForLeaveManagerAsCurrentUser()->canChangeAbsenceTypeFor( + $contactID, + $status + ) + ); $this->assertFalse( $this->getLeaveRightsService()->canChangeAbsenceTypeFor(