toBeFalse(); }); test('rejects empty string view', function () { unset($_SESSION); expect(is_view_allowed(''))->toBeFalse(); }); test('rejects arbitrary column name', function () { unset($_SESSION); expect(is_view_allowed('password'))->toBeFalse(); }); test('rejects view with backtick injection', function () { unset($_SESSION); expect(is_view_allowed('show_tree` FROM user_auth; --'))->toBeFalse(); }); test('accepts show_tree as valid view', function () { // Will return false due to no session, but won't hit the whitelist rejection unset($_SESSION); // show_tree is in the whitelist, so it passes validation but fails at session check expect(is_view_allowed('show_tree'))->toBeFalse(); }); test('accepts show_list as valid view', function () { unset($_SESSION); expect(is_view_allowed('show_list'))->toBeFalse(); }); test('accepts show_preview as valid view', function () { unset($_SESSION); expect(is_view_allowed('show_preview'))->toBeFalse(); }); test('accepts graph_settings as valid view', function () { unset($_SESSION); expect(is_view_allowed('graph_settings'))->toBeFalse(); }); test('allowed views list contains exactly 4 entries', function () { // Verify by testing all known valid views pass and one extra fails $valid = ['show_tree', 'show_list', 'show_preview', 'graph_settings']; $invalid = ['show_console', 'enabled', 'username', 'password', 'realm']; foreach ($invalid as $view) { expect(is_view_allowed($view))->toBeFalse(); } });