[DEV-187] Fix duplicated-department-names bug (#1083)

* fix apidoc

* add new custom validation

* add ruby tests

* add frontend error

* take out the ternary
This commit is contained in:
Guillermo Giuliana 2021-11-24 14:21:16 -03:00 committed by GitHub
parent 8400a1caf0
commit 0df57af11e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 102 additions and 5 deletions

View File

@ -285,9 +285,9 @@ class AdminPanelDepartments extends React.Component {
this.setState({formLoading: false,errorMessage: false, defaultDepartmentError: null});
this.retrieveDepartments();
this.onItemChange(-1);
}).catch(() => {
}).catch(result => {
this.onItemChange.bind(this, -1);
this.setState({formLoading: false, defaultDepartmentError: null});
this.setState({formLoading: false, errorMessage: result.message, defaultDepartmentError: null});
});
}
}

View File

@ -1,6 +1,7 @@
<?php
use Respect\Validation\Validator as DataValidator;
DataValidator::with('CustomValidations', true);
/**
* @api {post} /system/add-department Add department
* @apiVersion 4.10.0
@ -31,7 +32,10 @@ class AddDepartmentController extends Controller {
'permission' => 'staff_3',
'requestData' => [
'name' => [
'validation' => DataValidator::notBlank()->length(LengthConfig::MIN_LENGTH_NAME, LengthConfig::MAX_LENGTH_NAME),
'validation' => DataValidator::AllOf(
DataValidator::notBlank()->length(LengthConfig::MIN_LENGTH_NAME, LengthConfig::MAX_LENGTH_NAME),
DataValidator::ValidDepartmentName()
),
'error' => ERRORS::INVALID_NAME
]
]

View File

@ -39,7 +39,10 @@ class EditDepartmentController extends Controller {
'error' => ERRORS::INVALID_DEPARTMENT
],
'name' => [
'validation' => DataValidator::notBlank()->length(LengthConfig::MIN_LENGTH_NAME, LengthConfig::MAX_LENGTH_NAME),
'validation' => DataValidator::AllOf(
DataValidator::notBlank()->length(LengthConfig::MIN_LENGTH_NAME, LengthConfig::MAX_LENGTH_NAME),
DataValidator::ValidDepartmentName()
),
'error' => ERRORS::INVALID_NAME
],
]

View File

@ -0,0 +1,13 @@
<?php
namespace CustomValidations;
use Respect\Validation\Rules\AbstractRule;
class ValidDepartmentName extends AbstractRule {
public function validate($name) {
$department = \Department::getDataStore($name, 'name');
return $department->isNull();
}
}

View File

@ -54,4 +54,41 @@ describe'system/add-department' do
lastLog = $database.getLastRow('log')
(lastLog['type']).should.equal('ADD_DEPARTMENT')
end
it 'should fail if name is invalid' do
result = request('/system/add-department', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
name: ''
})
result['status'].should.equal('fail')
result['message'].should.equal('INVALID_NAME')
long_name = ''
201.times {long_name << 'A'}
result = request('/system/add-department', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
name: long_name
})
result['status'].should.equal('fail')
result['message'].should.equal('INVALID_NAME')
lastDepartment = $database.getLastRow('department')
result = request('/system/add-department', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
name: lastDepartment['name']
})
result['status'].should.equal('fail')
result['message'].should.equal('INVALID_NAME')
end
end

View File

@ -89,7 +89,7 @@ describe '/system/default-department' do
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
departmentId: department['id'],
name: department['name'],
name: 'thisIsAdiferentName',
private: true
})

View File

@ -19,4 +19,44 @@ describe'system/edit-department' do
lastLog = $database.getLastRow('log')
(lastLog['type']).should.equal('EDIT_DEPARTMENT')
end
it 'should fail if name is invalid' do
result = request('/system/edit-department', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
name: '',
departmentId: 4
})
result['status'].should.equal('fail')
result['message'].should.equal('INVALID_NAME')
long_name = ''
201.times {long_name << 'A'}
result = request('/system/edit-department', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
name: long_name,
departmentId: 4
})
result['status'].should.equal('fail')
result['message'].should.equal('INVALID_NAME')
lastDepartment = $database.getLastRow('department')
result = request('/system/edit-department', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
name: lastDepartment['name'],
departmentId: 4
})
result['status'].should.equal('fail')
result['message'].should.equal('INVALID_NAME')
end
end