diff options
Diffstat (limited to 'tests/Modules/SyslogPageTest.php')
| -rw-r--r-- | tests/Modules/SyslogPageTest.php | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/tests/Modules/SyslogPageTest.php b/tests/Modules/SyslogPageTest.php new file mode 100644 index 00000000..c9b6a3ea --- /dev/null +++ b/tests/Modules/SyslogPageTest.php @@ -0,0 +1,116 @@ +<?php + +use PHPUnit\Framework\TestCase; + +/** + * Syslog page tests adapted to use the SQLite-backed Database backend and real Paginate. + * + */ +class SyslogPageTest extends TestCase +{ + protected function setUp(): void + { + Database::resetSchema(); + + // Reset stubs and superglobals for each test + Render::reset(); + Message::reset(); + Session::reset(); + Property::reset(); + User::reset(); + $_GET = $_POST = $_REQUEST = []; + + // Default: logged in user + User::$loggedIn = true; + User::$id = 1; + } + + private function newSyslogPage(): Page_SysLog + { + // Load the module's page class + require_once __DIR__ . '/../../modules-available/syslog/page.inc.php'; + return new Page_SysLog('syslog'); + } + + public function testRenderDeniesWithoutViewPermission(): void + { + // No 'view' permission + User::$permissions = ['view' => false]; + $mod = $this->newSyslogPage(); + $mod->preprocess(); + $mod->render(); + + $this->assertContains('main.no-permission', Message::$errors, 'Should add no-permission error'); + // Heading template still added, but no 'page-syslog' template + $names = array_column(Render::$templates, 'name'); + $this->assertNotEmpty($names); + $this->assertSame('heading', Render::$templates[0]['name']); + $this->assertNotContains('page-syslog', $names); + } + + public function testRenderWithFiltersAndTypes(): void + { + User::$permissions = ['view' => true]; + // Apply filters via GET (we search for 'login' which exists in seed) + $_GET['filter'] = 'session-open,foo-custom'; // includes one unknown type + $_GET['search'] = 'login'; + $_GET['not'] = '0'; + $_REQUEST = $_GET; + + $mod = $this->newSyslogPage(); + $mod->preprocess(); + $mod->render(); + + // Verify render payload from real Paginate + $names = array_column(Render::$templates, 'name'); + $this->assertContains('page-syslog', $names); + $tpl = null; + foreach (Render::$templates as $t) { + if ($t['name'] === 'page-syslog') { $tpl = $t; break; } + } + $this->assertNotNull($tpl); + $data = $tpl['data']; + $this->assertSame('session-open,foo-custom', $data['filter']); + $this->assertSame('login', $data['search']); + $this->assertSame(false, $data['not']); + $this->assertIsString($data['types']); + $typesArray = json_decode($data['types'], true); + $this->assertIsArray($typesArray); + $ids = array_column($typesArray, 'logtypeid'); + // Should include both DB types and unknown filter value + $this->assertContains('session-open', $ids); + $this->assertContains('partition-temp', $ids); + $this->assertContains('foo-custom', $ids); + + // Each list row enriched with 'date' and 'icon' + $this->assertArrayHasKey('list', $data); + $this->assertNotEmpty($data['list']); + $this->assertArrayHasKey('date', $data['list'][0]); + $this->assertArrayHasKey('icon', $data['list'][0]); + } + + public function testRenderWithAllowedLocationsRestrictionFiltersRows(): void + { + User::$permissions = ['view' => true]; + // Restrict allowed locations (no 0) -> only logs from machines in these locations remain + User::$allowedLocations = [5, 6]; + $_REQUEST = $_GET = []; + + $mod = $this->newSyslogPage(); + $mod->preprocess(); + $mod->render(); + + $tpl = null; + foreach (Render::$templates as $t) { + if ($t['name'] === 'page-syslog') { $tpl = $t; break; } + } + $this->assertNotNull($tpl); + $data = $tpl['data']; + $this->assertArrayHasKey('list', $data); + // With allowedLocations [5,6] and seed machines m1@1, m2@5, only m2 should remain + $this->assertNotEmpty($data['list']); + $uuids = array_column($data['list'], 'machineuuid'); + $this->assertContains('m2', $uuids); + $this->assertNotContains('m1', $uuids); + } +} |
