siteTitle = 'Test Site';
$config->siteDescription = 'Test Description';
$config->baseUrl = 'https://example.com';
$config->basePath = '/tkr/';
return $config;
}
private function createSampleTicks() {
return [
['id' => 1, 'timestamp' => '2025-01-15 12:00:00', 'tick' => 'First test tick'],
['id' => 2, 'timestamp' => '2025-01-15 13:00:00', 'tick' => 'Second test tick']
];
}
public function testCanGenerateValidAtom() {
$config = $this->createMockConfig();
$ticks = $this->createSampleTicks();
$generator = new AtomGenerator($config, $ticks);
$xml = $generator->generate();
// Test XML structure
$this->assertStringStartsWith('assertStringContainsString('', $xml);
$this->assertStringContainsString('Test Site Atom Feed', $xml);
$this->assertStringContainsString('', $xml);
$this->assertStringContainsString('assertStringContainsString('href="https://example.com/tkr/feed/atom"', $xml);
$this->assertStringContainsString('https://example.com/tkr/', $xml);
$this->assertStringContainsString('', $xml);
$this->assertStringContainsString('Test Site', $xml);
$this->assertStringContainsString('', $xml);
$this->assertStringContainsString('', $xml);
$this->assertStringEndsWith('' . "\n", $xml);
// Test tick content
$this->assertStringContainsString('First test tick', $xml);
$this->assertStringContainsString('Second test tick', $xml);
// Ensure the XML is still valid
$doc = new DOMDocument();
$this->assertTrue($doc->loadXML($xml), 'Valid Atom should load into an XML document');
}
public function testReturnsCorrectContentType() {
$generator = new AtomGenerator($this->createMockConfig(), []);
$this->assertEquals('application/atom+xml; charset=utf-8', $generator->getContentType());
}
public function testCanHandleEmptyTickList() {
$config = $this->createMockConfig();
$generator = new AtomGenerator($config, []);
$xml = $generator->generate();
// Should still be valid Atom with no entries
// Test XML structure
$this->assertStringStartsWith('assertStringContainsString('', $xml);
$this->assertStringContainsString('Test Site Atom Feed', $xml);
$this->assertStringContainsString('', $xml);
$this->assertStringContainsString('assertStringContainsString('href="https://example.com/tkr/feed/atom"', $xml);
$this->assertStringContainsString('https://example.com/tkr/', $xml);
$this->assertStringContainsString('', $xml);
$this->assertStringContainsString('Test Site', $xml);
$this->assertStringEndsWith('' . "\n", $xml);
// Test tick content
$this->assertStringNotContainsString('', $xml);
$this->assertStringNotContainsString('', $xml);
// Ensure the XML is still valid
$doc = new DOMDocument();
$this->assertTrue($doc->loadXML($xml), 'XML with no entries should still be valid');
}
public function testCanHandleSpecialCharactersAndUnicode() {
$config = $this->createMockConfig();
// Test various challenging characters
$ticks = [
[
'id' => 1,
'timestamp' => '2025-01-15 12:00:00',
'tick' => 'Testing emojis 🎉🔥💯 and unicode characters'
],
[
'id' => 2,
'timestamp' => '2025-01-15 13:00:00',
'tick' => 'XML entities: & "quotes" & \'apostrophes\''
],
[
'id' => 3,
'timestamp' => '2025-01-15 14:00:00',
'tick' => 'International: café naïve résumé 北京 москва'
],
[
'id' => 4,
'timestamp' => '2025-01-15 15:00:00',
'tick' => 'Math symbols: ∑ ∆ π ∞ ≠ ≤ ≥'
]
];
$generator = new AtomGenerator($config, $ticks);
$xml = $generator->generate();
// Test that emojis are preserved
$this->assertStringContainsString('🎉🔥💯', $xml);
// Test that XML entities are properly escaped
$this->assertStringContainsString('<tag>', $xml);
$this->assertStringContainsString('&', $xml);
$this->assertStringContainsString('"quotes"', $xml);
$this->assertStringContainsString(''apostrophes'', $xml);
// Test that international characters are preserved
$this->assertStringContainsString('café naïve résumé', $xml);
$this->assertStringContainsString('北京', $xml);
$this->assertStringContainsString('москва', $xml);
// Test that math symbols are preserved
$this->assertStringContainsString('∑ ∆ π ∞', $xml);
// Ensure no raw < > & characters (security)
$this->assertStringNotContainsString('', $xml);
$this->assertStringNotContainsString(' & "', $xml);
// Ensure the XML is still valid
$doc = new DOMDocument();
$this->assertTrue($doc->loadXML($xml), 'XML with Unicode should still be valid');
}
}