mirror of
https://github.com/opensupports/opensupports.git
synced 2025-07-27 07:44:29 +02:00
[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.setState({formLoading: false,errorMessage: false, defaultDepartmentError: null});
|
||||||
this.retrieveDepartments();
|
this.retrieveDepartments();
|
||||||
this.onItemChange(-1);
|
this.onItemChange(-1);
|
||||||
}).catch(() => {
|
}).catch(result => {
|
||||||
this.onItemChange.bind(this, -1);
|
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
|
<?php
|
||||||
use Respect\Validation\Validator as DataValidator;
|
use Respect\Validation\Validator as DataValidator;
|
||||||
|
|
||||||
|
DataValidator::with('CustomValidations', true);
|
||||||
/**
|
/**
|
||||||
* @api {post} /system/add-department Add department
|
* @api {post} /system/add-department Add department
|
||||||
* @apiVersion 4.10.0
|
* @apiVersion 4.10.0
|
||||||
@ -31,7 +32,10 @@ class AddDepartmentController extends Controller {
|
|||||||
'permission' => 'staff_3',
|
'permission' => 'staff_3',
|
||||||
'requestData' => [
|
'requestData' => [
|
||||||
'name' => [
|
'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
|
'error' => ERRORS::INVALID_NAME
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
@ -39,7 +39,10 @@ class EditDepartmentController extends Controller {
|
|||||||
'error' => ERRORS::INVALID_DEPARTMENT
|
'error' => ERRORS::INVALID_DEPARTMENT
|
||||||
],
|
],
|
||||||
'name' => [
|
'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
|
'error' => ERRORS::INVALID_NAME
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
|
13
server/libs/validations/validDepartmentName.php
Normal file
13
server/libs/validations/validDepartmentName.php
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
@ -54,4 +54,41 @@ describe'system/add-department' do
|
|||||||
lastLog = $database.getLastRow('log')
|
lastLog = $database.getLastRow('log')
|
||||||
(lastLog['type']).should.equal('ADD_DEPARTMENT')
|
(lastLog['type']).should.equal('ADD_DEPARTMENT')
|
||||||
end
|
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
|
end
|
||||||
|
@ -89,7 +89,7 @@ describe '/system/default-department' do
|
|||||||
csrf_userid: $csrf_userid,
|
csrf_userid: $csrf_userid,
|
||||||
csrf_token: $csrf_token,
|
csrf_token: $csrf_token,
|
||||||
departmentId: department['id'],
|
departmentId: department['id'],
|
||||||
name: department['name'],
|
name: 'thisIsAdiferentName',
|
||||||
private: true
|
private: true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -19,4 +19,44 @@ describe'system/edit-department' do
|
|||||||
lastLog = $database.getLastRow('log')
|
lastLog = $database.getLastRow('log')
|
||||||
(lastLog['type']).should.equal('EDIT_DEPARTMENT')
|
(lastLog['type']).should.equal('EDIT_DEPARTMENT')
|
||||||
end
|
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
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user