array( array('id' => 1, 'title' => 'First title', 'author' => 'Ann & "Bo"', 'date' => '2020-01-02 03:04:05', 'story' => '
One hundred
'), array('id' => 2, 'title' => 'Second', 'author' => 'Cy', 'date' => '2020-01-01 10:00:00', 'story' => 'Two
'), array('id' => 3, 'title' => 'Picture', 'author' => 'Di', 'date' => '2019-12-31 10:00:00', 'story' => '', 'img' => 'PNG', 'mime' => 'image/png', 'hidden' => '1'), ), 'queue' => array( array('id' => 20, 'title' => 'Waiting', 'author' => 'Ed', 'date' => '2020-02-01 10:00:00'), ), )); open_db('open'); } public function testListsStoriesWithEscapedFields(): void { $page = display_stories(); $this->assertStringStartsWith('One hundred
', $page); $this->assertStringNotContainsString('onclick', $page); $this->assertStringNotContainsString('alert', $page); } public function testDatesAreShownWithoutSecondsAndMarkedUp(): void { $page = display_stories(); $datetime = date('Y-m-d\TH:i:sP', strtotime('2020-01-02 03:04:05')); $this->assertStringContainsString('', $page); } public function testHiddenStoriesAreLeftOutForVisitors(): void { $this->assertStringNotContainsString('Picture', display_stories()); } public function testEditorsSeeHiddenStoriesMarkedAndEditLinks(): void { $this->asEditor(); $page = display_stories(); $this->assertStringContainsString('[hidden]', $page); $this->assertStringContainsString('[edit]', $page); } public function testImagesAreServedByDisplay(): void { $this->asEditor(); $this->assertStringContainsString('No articles found.
', $page); $this->assertStringNotContainsString('Try searching again', $page); } public function testNoSearchResults(): void { $this->request(array('search' => 'nothing like this')); $page = display_stories(); $this->assertStringContainsString('No articles found.
', $page); $this->assertStringContainsString('Try searching again', $page); } public function testPreviewShowsThePostedStoryWithoutLinks(): void { $GLOBALS['action'] = 'preview'; $this->request(array(), array('title' => 'Mine', 'author' => 'Me', 'story' => 'My story
')); $page = display_stories(); $this->assertStringContainsString('My story
', $page); $this->assertStringNotContainsString('x()', $page); } // HTML Purifier needs seconds for a few megabytes, so a posted story over the limit is not shown public function testPreviewDoesNotShowATooLongStory(): void { $GLOBALS['action'] = 'preview'; $this->request(array(), array('title' => 'Long', 'author' => 'Me', 'story' => 'x
' . str_repeat('a', 65536))); $page = display_stories(); $this->assertStringContainsString('The story is too long to show.
', $page); $this->assertStringNotContainsString('x', $page); } public function testPreviewShowsAPendingImage(): void { $GLOBALS['action'] = 'preview'; $GLOBALS['file_src'] = '/display?pending=">