[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:
parent
8400a1caf0
commit
0df57af11e
|
@ -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});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
]
|
||||
]
|
||||
|
|
|
@ -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
|
||||
],
|
||||
]
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
})
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue