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