Check owner existence before to create project

This commit is contained in:
Frederic Guillot
2017-05-27 12:18:05 -04:00
parent 80d1293c42
commit ad8b1223cc
4 changed files with 64 additions and 0 deletions

View File

@@ -16,6 +16,7 @@ Bug fixes:
* Avoid PHP notice when regenerating API token for a user * Avoid PHP notice when regenerating API token for a user
* Fix wrong dropdown menu in group members list * Fix wrong dropdown menu in group members list
* Show only active users in auto-complete forms (project permissions) * Show only active users in auto-complete forms (project permissions)
* Check owner existence before to create project
Version 1.0.43 (April 30, 2017) Version 1.0.43 (April 30, 2017)
------------------------------- -------------------------------

View File

@@ -355,6 +355,10 @@ class ProjectModel extends Base
*/ */
public function create(array $values, $userId = 0, $addUser = false) public function create(array $values, $userId = 0, $addUser = false)
{ {
if (! empty($userId) && ! $this->userModel->exists($userId)) {
return false;
}
$this->db->startTransaction(); $this->db->startTransaction();
$values['token'] = ''; $values['token'] = '';
@@ -447,6 +451,10 @@ class ProjectModel extends Base
$values['end_date'] = $this->dateParser->getIsoDate($values['end_date']); $values['end_date'] = $this->dateParser->getIsoDate($values['end_date']);
} }
if (! empty($values['owner_id']) && ! $this->userModel->exists($values['owner_id'])) {
return false;
}
$this->helper->model->convertIntegerFields($values, array('priority_default', 'priority_start', 'priority_end')); $this->helper->model->convertIntegerFields($values, array('priority_default', 'priority_start', 'priority_end'));
return $this->exists($values['id']) && return $this->exists($values['id']) &&

View File

@@ -20,6 +20,7 @@ class ProjectProcedureTest extends BaseProcedureTest
$this->assertEnableDisableProject(); $this->assertEnableDisableProject();
$this->assertEnableDisablePublicAccess(); $this->assertEnableDisablePublicAccess();
$this->assertRemoveProject(); $this->assertRemoveProject();
$this->assertCreateProjectWithOwnerId();
} }
public function assertGetProjectById() public function assertGetProjectById()
@@ -121,4 +122,23 @@ class ProjectProcedureTest extends BaseProcedureTest
$this->assertTrue($this->app->removeProject($this->projectId)); $this->assertTrue($this->app->removeProject($this->projectId));
$this->assertNull($this->app->getProjectById($this->projectId)); $this->assertNull($this->app->getProjectById($this->projectId));
} }
public function assertCreateProjectWithOwnerId()
{
$this->assertFalse($this->app->createProject(array(
'name' => 'My project with an owner',
'owner_id' => 999,
)));
$projectId = $this->app->createProject(array(
'name' => 'My project with an owner',
'owner_id' => 1,
));
$this->assertNotFalse($projectId);
$project = $this->app->getProjectById($projectId);
$this->assertEquals($projectId, $project['id']);
$this->assertEquals(1, $project['owner_id']);
}
} }

View File

@@ -49,6 +49,21 @@ class ProjectModelTest extends Base
$this->assertEmpty($project['end_date']); $this->assertEmpty($project['end_date']);
} }
public function testCreationWithUserId()
{
$projectModel = new ProjectModel($this->container);
$this->assertFalse($projectModel->create(array('name' => 'UnitTest'), 3));
$this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest'), 1));
$project = $projectModel->getById(1);
$this->assertEquals(1, $project['owner_id']);
$this->assertEquals(2, $projectModel->create(array('name' => 'UnitTest'), 0));
$project = $projectModel->getById(2);
$this->assertEquals(0, $project['owner_id']);
}
public function testProjectDate() public function testProjectDate()
{ {
$projectModel = new ProjectModel($this->container); $projectModel = new ProjectModel($this->container);
@@ -165,6 +180,26 @@ class ProjectModelTest extends Base
$this->assertGreaterThan($now, $project['last_modified']); $this->assertGreaterThan($now, $project['last_modified']);
} }
public function testUpdateOwnerId()
{
$projectModel = new ProjectModel($this->container);
$this->assertEquals(1, $projectModel->create(array('name' => 'UnitTest')));
$this->assertFalse($projectModel->update(array('id'=> 1, 'name' => 'test', 'owner_id' => 2)));
$this->assertTrue($projectModel->update(array('id'=> 1, 'name' => 'test', 'owner_id' => 1)));
$project = $projectModel->getById(1);
$this->assertNotEmpty($project);
$this->assertEquals(1, $project['owner_id']);
$this->assertTrue($projectModel->update(array('id'=> 1, 'name' => 'test', 'owner_id' => 0)));
$project = $projectModel->getById(1);
$this->assertNotEmpty($project);
$this->assertEquals(0, $project['owner_id']);
}
public function testGetAllIds() public function testGetAllIds()
{ {
$projectModel = new ProjectModel($this->container); $projectModel = new ProjectModel($this->container);