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