Skip to content

Commit 0d95594

Browse files
committed
feat: add Database::deleteUserSessions
1 parent 0ae1de0 commit 0d95594

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed

src/Database.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,20 @@ public function getLengthSessionID(): int
5757
return $this->lengthSessionID;
5858
}
5959

60+
/** @throws SessionException */
61+
public function deleteUserSessions(int $userID): bool
62+
{
63+
try {
64+
$sql = 'DELETE FROM sessions WHERE id_user = :id_user';
65+
$params = ['id_user' => $userID];
66+
$this->db->delete($sql, $params);
67+
68+
return true;
69+
} catch (DatabaseException $e) {
70+
throw new SessionException('could not delete sessions: ' . $e->getMessage(), $e->getCode(), $e->getPrevious());
71+
}
72+
}
73+
6074
public function open(string $path, string $name): bool
6175
{
6276
return true;

tests/DatabaseTest.php

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,4 +450,65 @@ public function testLengthSessionIDSessionException(): void
450450
$database = new Database();
451451
$database->setLengthSessionID(1);
452452
}
453-
}
453+
454+
/**
455+
* @throws DatabaseException
456+
* @throws SessionException
457+
*/
458+
public function testDeleteUserSessions(): void
459+
{
460+
$database = new Database();
461+
$database->setCurrentDatabase(static::$db);
462+
463+
$data = 'azerty';
464+
465+
$database->setUserId(10);
466+
467+
static::assertTrue($database->write('session_id_10', $data));
468+
static::assertTrue($database->write('session_id_20', $data));
469+
static::assertTrue($database->write('session_id_30', $data));
470+
471+
$database->setUserId(20);
472+
473+
static::assertTrue($database->write('session_id_40', $data));
474+
static::assertTrue($database->write('session_id_50', $data));
475+
static::assertTrue($database->write('session_id_60', $data));
476+
477+
$sql = 'SELECT id FROM sessions WHERE id_user = :id_user';
478+
$params = ['id_user' => 10];
479+
$sessionsFromDatabase = static::$db->selectCol($sql, $params);
480+
static::assertSame(['session_id_10', 'session_id_20', 'session_id_30'], $sessionsFromDatabase);
481+
482+
$sql = 'SELECT id FROM sessions WHERE id_user = :id_user';
483+
$params = ['id_user' => 20];
484+
$sessionsFromDatabase = static::$db->selectCol($sql, $params);
485+
static::assertSame(['session_id_40', 'session_id_50', 'session_id_60'], $sessionsFromDatabase);
486+
487+
$database->deleteUserSessions(10);
488+
489+
$sql = 'SELECT id FROM sessions';
490+
$sessionsFromDatabase = static::$db->selectCol($sql);
491+
static::assertSame(['session_id_40', 'session_id_50', 'session_id_60'], $sessionsFromDatabase);
492+
}
493+
494+
/**
495+
* @throws DatabaseException
496+
* @throws SessionException
497+
*/
498+
public function testDeleteUserSessionsSessionException(): void
499+
{
500+
$this->expectException(SessionException::class);
501+
$this->expectExceptionMessage('could not delete sessions: Error Connecting Database');
502+
503+
$database = new Database();
504+
$database->setNewDatabase([
505+
'driver' => 'mysql',
506+
'host' => 'mariadb',
507+
'user' => 'invalid',
508+
'password' => '',
509+
'database' => 'test_database'
510+
]);
511+
512+
$database->deleteUserSessions(1);
513+
}
514+
}

0 commit comments

Comments
 (0)