Fix bug: update of the last_modified field for projects

This commit is contained in:
Frédéric Guillot
2014-09-18 22:08:16 +02:00
parent 4b61aad218
commit 31d3f8bb57
3 changed files with 52 additions and 5 deletions

View File

@@ -55,8 +55,7 @@ class ProjectModificationDate implements Listener
public function execute(array $data) public function execute(array $data)
{ {
if (isset($data['project_id'])) { if (isset($data['project_id'])) {
$this->project->updateModificationDate($data['project_id']); return $this->project->updateModificationDate($data['project_id']);
return true;
} }
return false; return false;

View File

@@ -489,6 +489,7 @@ class Project extends Base
$this->db->startTransaction(); $this->db->startTransaction();
$values['token'] = ''; $values['token'] = '';
$values['last_modified'] = time();
if (! $this->db->table(self::TABLE)->save($values)) { if (! $this->db->table(self::TABLE)->save($values)) {
$this->db->cancelTransaction(); $this->db->cancelTransaction();
@@ -539,7 +540,7 @@ class Project extends Base
*/ */
public function updateModificationDate($project_id) public function updateModificationDate($project_id)
{ {
return $this->db->table(self::TABLE)->eq('id', $project_id)->save(array( return $this->db->table(self::TABLE)->eq('id', $project_id)->update(array(
'last_modified' => time() 'last_modified' => time()
)); ));
} }
@@ -730,10 +731,12 @@ class Project extends Base
public function attachEvents() public function attachEvents()
{ {
$events = array( $events = array(
Task::EVENT_UPDATE, Task::EVENT_CREATE_UPDATE,
Task::EVENT_CREATE,
Task::EVENT_CLOSE, Task::EVENT_CLOSE,
Task::EVENT_OPEN, Task::EVENT_OPEN,
Task::EVENT_MOVE_COLUMN,
Task::EVENT_MOVE_POSITION,
Task::EVENT_ASSIGNEE_CHANGE,
); );
$listener = new ProjectModificationDate($this); $listener = new ProjectModificationDate($this);

View File

@@ -20,9 +20,54 @@ class ProjectTest extends Base
$this->assertNotEmpty($project); $this->assertNotEmpty($project);
$this->assertEquals(1, $project['is_active']); $this->assertEquals(1, $project['is_active']);
$this->assertEquals(0, $project['is_public']); $this->assertEquals(0, $project['is_public']);
$this->assertEquals(time(), $project['last_modified']);
$this->assertEmpty($project['token']); $this->assertEmpty($project['token']);
} }
public function testUpdateLastModifiedDate()
{
$p = new Project($this->registry);
$this->assertEquals(1, $p->create(array('name' => 'UnitTest')));
$now = time();
$project = $p->getById(1);
$this->assertNotEmpty($project);
$this->assertEquals($now, $project['last_modified']);
sleep(1);
$this->assertTrue($p->updateModificationDate(1));
$project = $p->getById(1);
$this->assertNotEmpty($project);
$this->assertEquals($now + 1, $project['last_modified']);
}
public function testIsLastModified()
{
$p = new Project($this->registry);
$t = new Task($this->registry);
$now = time();
$p->attachEvents();
$this->assertEquals(1, $p->create(array('name' => 'UnitTest')));
$project = $p->getById(1);
$this->assertNotEmpty($project);
$this->assertEquals($now, $project['last_modified']);
sleep(1);
$this->assertEquals(1, $t->create(array('title' => 'Task #1', 'project_id' => 1)));
$this->assertTrue($this->registry->shared('event')->isEventTriggered(Task::EVENT_CREATE));
$this->assertEquals('Event\ProjectModificationDate', $this->registry->shared('event')->getLastListenerExecuted());
$project = $p->getById(1);
$this->assertNotEmpty($project);
$this->assertTrue($p->isModifiedSince(1, $now));
}
public function testRemove() public function testRemove()
{ {
$p = new Project($this->registry); $p = new Project($this->registry);