dashboard - first draft of complete redesign
This commit is contained in:
@@ -125,15 +125,28 @@ class WebPreviewTests(unittest.TestCase):
|
||||
self.page.screenshot(path=str(Path(output) / f'web-{width}.png'), full_page=True, animations='disabled')
|
||||
self.assertEqual(self.page.locator('script:not([src])').count(), 0)
|
||||
|
||||
def test_permissions_and_csrf_reject_mutations(self):
|
||||
def test_permissions_and_csrf_reject_mutations(self):
|
||||
denied = self.page.request.post(self.url + '?deny=1', form={'action': 'delete_news', 'file_base': '2030-12-31-Mehrseitig'}, max_redirects=0)
|
||||
self.assertEqual(denied.status, 303)
|
||||
self.assertIn('/intranet/index.php', denied.headers['location'])
|
||||
self.page.request.post(self.url, form={'action': 'delete_news', 'file_base': '2030-12-31-Mehrseitig', 'csrf_token': 'wrong'}, max_redirects=0)
|
||||
self.page.reload()
|
||||
self.assertIn('Ungültige Anfrage', self.page.locator('.sb-alert-error').inner_text())
|
||||
self.assertTrue(all((self.news / f'2030-12-31-Mehrseitig_page_{n}.png').is_file() for n in range(1, 11)))
|
||||
|
||||
self.assertTrue(all((self.news / f'2030-12-31-Mehrseitig_page_{n}.png').is_file() for n in range(1, 11)))
|
||||
|
||||
def test_page_cleans_expired_announcements_on_each_authorized_request(self):
|
||||
log = self.root / 'cleanup.jsonl'
|
||||
before = len(log.read_text().splitlines())
|
||||
self.page.reload()
|
||||
cleanup = [json.loads(line) for line in log.read_text().splitlines()]
|
||||
self.assertEqual(len(cleanup), before + 1)
|
||||
sql, params = cleanup[-1]
|
||||
self.assertEqual(sql, 'DELETE FROM ansagen WHERE COALESCE(ansage_datum_bis, ansage_datum_von) < ?')
|
||||
self.assertEqual(len(params), 1)
|
||||
self.assertRegex(params[0], r'^\d{4}-\d{2}-\d{2}$')
|
||||
self.page.request.get(self.url + '?deny=1', max_redirects=0)
|
||||
self.assertEqual(len(log.read_text().splitlines()), len(cleanup))
|
||||
|
||||
def test_forms_preserve_fields_validation_and_bound_sql_parameters(self):
|
||||
for tab, action, fields in (
|
||||
('gottesdienst', 'create_service', {'bibeldatum': '2030-12-31', 'bibelwort': 'Joh 3,16', 'bibelvers': 'Text & "Zitat"'}),
|
||||
|
||||
@@ -8,8 +8,10 @@ class TestStatement extends PDOStatement
|
||||
public function __construct(private string $sql) {}
|
||||
public function execute(?array $params = null): bool
|
||||
{
|
||||
if (!str_starts_with($this->sql, 'SELECT')) {
|
||||
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/writes.jsonl', json_encode([$this->sql, $params]) . "\n", FILE_APPEND);
|
||||
if (!str_starts_with($this->sql, 'SELECT')) {
|
||||
$log = str_contains($this->sql, 'WHERE COALESCE(ansage_datum_bis, ansage_datum_von) < ?')
|
||||
? '/cleanup.jsonl' : '/writes.jsonl';
|
||||
file_put_contents($_SERVER['DOCUMENT_ROOT'] . $log, json_encode([$this->sql, $params]) . "\n", FILE_APPEND);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user