Reviewed-on: https://gitea.subcultureofone.org/greg/tkr/pulls/64 Co-authored-by: Greg Sarjeant <greg@subcultureofone.org> Co-committed-by: Greg Sarjeant <greg@subcultureofone.org>
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| declare(strict_types=1);
 | |
| 
 | |
| use PHPUnit\Framework\TestCase;
 | |
| 
 | |
| class TickModelTest extends TestCase
 | |
| {
 | |
|     private $mockPdo;
 | |
|     private $settings;
 | |
| 
 | |
|     protected function setUp(): void
 | |
|     {
 | |
|         $this->mockPdo = $this->createMock(PDO::class);
 | |
|         $this->settings = new SettingsModel($this->mockPdo);
 | |
|         $this->settings->tickDeleteHours = 1; // 1 hour deletion window
 | |
|     }
 | |
| 
 | |
|     public function testDeleteWithRecentTick(): void
 | |
|     {
 | |
|         // Mock successful deletion of recent tick
 | |
|         $recentTimestamp = (new DateTimeImmutable())->format('Y-m-d H:i:s');
 | |
|         
 | |
|         $mockStatement1 = $this->createMock(PDOStatement::class);
 | |
|         $mockStatement1->method('execute')->with([123]);
 | |
|         $mockStatement1->method('fetch')->willReturn([
 | |
|             'tick' => 'Test content',
 | |
|             'timestamp' => $recentTimestamp
 | |
|         ]);
 | |
| 
 | |
|         $mockStatement2 = $this->createMock(PDOStatement::class);
 | |
|         $mockStatement2->method('execute')->with([123]);
 | |
| 
 | |
|         $this->mockPdo->method('prepare')
 | |
|             ->willReturnOnConsecutiveCalls($mockStatement1, $mockStatement2);
 | |
| 
 | |
|         $tickModel = new TickModel($this->mockPdo, $this->settings);
 | |
|         $result = $tickModel->delete(123);
 | |
| 
 | |
|         $this->assertTrue($result);
 | |
|     }
 | |
| 
 | |
|     public function testDeleteWithNonexistentTick(): void
 | |
|     {
 | |
|         $mockStatement = $this->createMock(PDOStatement::class);
 | |
|         $mockStatement->method('execute')->with([999]);
 | |
|         $mockStatement->method('fetch')->willReturn(false);
 | |
| 
 | |
|         $this->mockPdo->method('prepare')->willReturn($mockStatement);
 | |
| 
 | |
|         $tickModel = new TickModel($this->mockPdo, $this->settings);
 | |
|         $result = $tickModel->delete(999);
 | |
| 
 | |
|         $this->assertFalse($result);
 | |
|     }
 | |
| 
 | |
|     public function testDeleteWithOldTick(): void
 | |
|     {
 | |
|         // Tick from 3 hours ago (outside 1-hour window)
 | |
|         $oldTimestamp = (new DateTimeImmutable('-3 hours'))->format('Y-m-d H:i:s');
 | |
|         
 | |
|         $mockStatement = $this->createMock(PDOStatement::class);
 | |
|         $mockStatement->method('execute')->with([456]);
 | |
|         $mockStatement->method('fetch')->willReturn([
 | |
|             'tick' => 'Old content',
 | |
|             'timestamp' => $oldTimestamp
 | |
|         ]);
 | |
| 
 | |
|         $this->mockPdo->method('prepare')->willReturn($mockStatement);
 | |
| 
 | |
|         $tickModel = new TickModel($this->mockPdo, $this->settings);
 | |
|         $result = $tickModel->delete(456);
 | |
| 
 | |
|         $this->assertFalse($result);
 | |
|     }
 | |
| } |