summaryrefslogtreecommitdiffstats
path: root/tests/Modules/SyslogPageTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Modules/SyslogPageTest.php')
-rw-r--r--tests/Modules/SyslogPageTest.php116
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);
+ }
+}