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']); | ||
|  |     } | ||
|  | } |