139 lines
4.0 KiB
PHP
139 lines
4.0 KiB
PHP
<?php
|
|
|
|
require_once dirname(__DIR__, 3) . '/app/classes/database.php';
|
|
require_once dirname(__DIR__, 3) . '/app/classes/log.php';
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class LogTest extends TestCase
|
|
{
|
|
private $db;
|
|
private $log;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
// Set up test database
|
|
$this->db = new Database([
|
|
'type' => 'sqlite',
|
|
'dbFile' => ':memory:'
|
|
]);
|
|
|
|
// Create users table
|
|
$this->db->getConnection()->exec("
|
|
CREATE TABLE users (
|
|
id INTEGER PRIMARY KEY,
|
|
username TEXT NOT NULL
|
|
)
|
|
");
|
|
|
|
// Create test user
|
|
$this->db->getConnection()->exec("
|
|
INSERT INTO users (id, username) VALUES (1, 'testuser'), (2, 'testuser2')
|
|
");
|
|
|
|
// Create logs table
|
|
$this->db->getConnection()->exec("
|
|
CREATE TABLE logs (
|
|
id INTEGER PRIMARY KEY,
|
|
user_id INTEGER,
|
|
scope TEXT NOT NULL,
|
|
message TEXT NOT NULL,
|
|
time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id)
|
|
)
|
|
");
|
|
|
|
$this->log = new Log($this->db);
|
|
}
|
|
|
|
public function testInsertLog()
|
|
{
|
|
$result = $this->log->insertLog(1, 'Test message', 'test');
|
|
$this->assertTrue($result);
|
|
|
|
$stmt = $this->db->getConnection()->prepare("SELECT * FROM logs WHERE scope = ?");
|
|
$stmt->execute(['test']);
|
|
$log = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
$this->assertEquals(1, $log['user_id']);
|
|
$this->assertEquals('Test message', $log['message']);
|
|
$this->assertEquals('test', $log['scope']);
|
|
}
|
|
|
|
public function testReadLog()
|
|
{
|
|
// Insert test logs
|
|
$this->log->insertLog(1, 'Test message 1', 'user');
|
|
$this->log->insertLog(1, 'Test message 2', 'user');
|
|
|
|
$logs = $this->log->readLog(1, 'user');
|
|
$this->assertCount(2, $logs);
|
|
$this->assertEquals('Test message 1', $logs[0]['message']);
|
|
$this->assertEquals('Test message 2', $logs[1]['message']);
|
|
}
|
|
|
|
public function testReadLogWithTimeFilter()
|
|
{
|
|
// Insert test logs with different times
|
|
$this->log->insertLog(1, 'Old message', 'user');
|
|
sleep(1); // Ensure different timestamps
|
|
$this->log->insertLog(1, 'New message', 'user');
|
|
|
|
$now = date('Y-m-d H:i:s');
|
|
$oneHourAgo = date('Y-m-d H:i:s', strtotime('-1 hour'));
|
|
|
|
$logs = $this->log->readLog(1, 'user', 0, '', [
|
|
'from_time' => $oneHourAgo,
|
|
'until_time' => $now
|
|
]);
|
|
|
|
$this->assertCount(2, $logs);
|
|
}
|
|
|
|
public function testReadLogWithPagination()
|
|
{
|
|
// Insert test logs
|
|
$this->log->insertLog(1, 'Message 1', 'user');
|
|
$this->log->insertLog(1, 'Message 2', 'user');
|
|
$this->log->insertLog(1, 'Message 3', 'user');
|
|
|
|
// Test with limit
|
|
$logs = $this->log->readLog(1, 'user', 0, 2);
|
|
$this->assertCount(2, $logs);
|
|
|
|
// Test with offset
|
|
$logs = $this->log->readLog(1, 'user', 2, 2);
|
|
$this->assertCount(1, $logs);
|
|
}
|
|
|
|
public function testReadLogWithMessageFilter()
|
|
{
|
|
// Insert test logs
|
|
$this->log->insertLog(1, 'Test message', 'user');
|
|
$this->log->insertLog(1, 'Another message', 'user');
|
|
|
|
$logs = $this->log->readLog(1, 'user', 0, '', [
|
|
'message' => 'Test'
|
|
]);
|
|
|
|
$this->assertCount(1, $logs);
|
|
$this->assertEquals('Test message', $logs[0]['message']);
|
|
}
|
|
|
|
public function testReadLogWithUserFilter()
|
|
{
|
|
// Insert test logs for different users
|
|
$this->log->insertLog(1, 'User 1 message', 'user');
|
|
$this->log->insertLog(2, 'User 2 message', 'user');
|
|
|
|
$logs = $this->log->readLog(1, 'user', 0, '', [
|
|
'id' => 1
|
|
]);
|
|
|
|
$this->assertCount(1, $logs);
|
|
$this->assertEquals('User 1 message', $logs[0]['message']);
|
|
}
|
|
}
|