Skip to content

Commit 0f6fbb3

Browse files
committed
minor #611 [Demo] Fix tests (OskarStark)
This PR was squashed before being merged into the main branch. Discussion ---------- [Demo] Fix tests | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | Docs? | no | Issues | -- | License | MIT Uups... Commits ------- 99a0f0c [Demo] Fix tests
2 parents 45132b8 + 99a0f0c commit 0f6fbb3

File tree

7 files changed

+70
-1079
lines changed

7 files changed

+70
-1079
lines changed

.github/workflows/integration-tests.yaml

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ env:
1818
REQUIRED_PHP_EXTENSIONS: 'mongodb'
1919

2020
jobs:
21-
php:
21+
examples:
2222
runs-on: ubuntu-latest
2323
strategy:
2424
fail-fast: false
@@ -82,3 +82,35 @@ jobs:
8282

8383
- name: Run commands examples
8484
run: php examples/commands/stores.php
85+
86+
demo:
87+
runs-on: ubuntu-latest
88+
89+
steps:
90+
- uses: actions/checkout@v5
91+
92+
- name: Setup PHP
93+
uses: shivammathur/setup-php@v2
94+
with:
95+
php-version: '8.4'
96+
tools: flex
97+
extensions: "${{ env.REQUIRED_PHP_EXTENSIONS }}"
98+
99+
- name: Get composer cache directory
100+
id: composer-cache
101+
run: |
102+
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
103+
104+
- name: Cache demo dependencies
105+
uses: actions/cache@v4
106+
with:
107+
path: ${{ steps.composer-cache.outputs.dir }}
108+
key: ${{ runner.os }}-composer-demo-8.4-${{ hashFiles('demo/composer.json') }}
109+
restore-keys: |
110+
${{ runner.os }}-composer-demo-8.4
111+
112+
- name: Install demo dependencies
113+
run: cd demo && composer install --no-progress --no-interaction --ansi
114+
115+
- name: Run demo tests
116+
run: cd demo && vendor/bin/phpunit

demo/src/Blog/FeedLoader.php

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,22 @@ public function load(?string $source, array $options = []): iterable
4242
$posts = [];
4343
$crawler = new Crawler($result->getContent());
4444
$crawler->filter('item')->each(function (Crawler $node) use (&$posts) {
45-
$title = $node->filter('title')->text();
45+
$title = $node->filter('title')->text() ?: '';
46+
$link = $node->filter('link')->text() ?: '';
47+
$description = $node->filter('description')->text() ?: '';
48+
$contentEncoded = $node->filter('content\:encoded')->text();
49+
$content = $contentEncoded ? (new Crawler($contentEncoded))->text() : '';
50+
$author = $node->filter('dc\:creator')->text() ?: '';
51+
$pubDate = $node->filter('pubDate')->text();
52+
4653
$posts[] = new Post(
4754
Uuid::v5(Uuid::fromString('6ba7b810-9dad-11d1-80b4-00c04fd430c8'), $title),
4855
$title,
49-
$node->filter('link')->text(),
50-
$node->filter('description')->text(),
51-
(new Crawler($node->filter('content\:encoded')->text()))->text(),
52-
$node->filter('dc\:creator')->text(),
53-
new \DateTimeImmutable($node->filter('pubDate')->text()),
56+
$link,
57+
$description,
58+
$content ?: '',
59+
$author,
60+
new \DateTimeImmutable($pubDate),
5461
);
5562
});
5663

demo/tests/Blog/FeedLoaderTest.php

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616
use PHPUnit\Framework\Attributes\CoversClass;
1717
use PHPUnit\Framework\Attributes\UsesClass;
1818
use PHPUnit\Framework\TestCase;
19+
use Symfony\AI\Store\Document\Metadata;
1920
use Symfony\AI\Store\Document\TextDocument;
2021
use Symfony\AI\Store\Exception\InvalidArgumentException;
22+
use Symfony\Component\HttpClient\Exception\ClientException;
2123
use Symfony\Component\HttpClient\MockHttpClient;
2224
use Symfony\Component\HttpClient\Response\MockResponse;
2325
use Symfony\Component\Uid\Uuid;
@@ -28,7 +30,7 @@ final class FeedLoaderTest extends TestCase
2830
{
2931
public function testLoadWithValidFeedUrl()
3032
{
31-
$loader = new FeedLoader(new MockHttpClient(MockResponse::fromFile(__DIR__.'/fixtures/symfony-feed.xml')));
33+
$loader = new FeedLoader(new MockHttpClient(MockResponse::fromFile(__DIR__.'/../fixtures/symfony-blog.rss')));
3234
$documents = iterator_to_array($loader->load('https://feeds.feedburner.com/symfony/blog'));
3335

3436
$this->assertCount(2, $documents);
@@ -40,12 +42,12 @@ public function testLoadWithValidFeedUrl()
4042
$expectedFirstUuid = Uuid::v5(Uuid::fromString('6ba7b810-9dad-11d1-80b4-00c04fd430c8'), 'Save the date, SymfonyDay Montreal 2026!');
4143
$this->assertEquals($expectedFirstUuid, $firstDocument->id);
4244

43-
$this->assertStringContainsString('Title: Save the date, SymfonyDay Montreal 2026!', $firstDocument->text);
44-
$this->assertStringContainsString('From: Paola Suárez on 2025-09-11', $firstDocument->text);
45-
$this->assertStringContainsString("We're thrilled to announce that SymfonyDay Montreal is happening on June 4, 2026!", $firstDocument->text);
46-
$this->assertStringContainsString('Mark your calendars, tell your friends', $firstDocument->text);
45+
$this->assertStringContainsString('Title: Save the date, SymfonyDay Montreal 2026!', $firstDocument->content);
46+
$this->assertStringContainsString('From: Paola Suárez on 2025-09-11', $firstDocument->content);
47+
$this->assertStringContainsString("We're thrilled to announce that SymfonyDay Montreal is happening on June 4, 2026!", $firstDocument->content);
48+
$this->assertStringContainsString('Mark your calendars, tell your friends', $firstDocument->content);
4749

48-
$firstMetadata = $firstDocument->metadata->toArray();
50+
$firstMetadata = $firstDocument->metadata;
4951
$this->assertSame($expectedFirstUuid->toRfc4122(), $firstMetadata['id']);
5052
$this->assertSame('Save the date, SymfonyDay Montreal 2026!', $firstMetadata['title']);
5153
$this->assertSame('https://symfony.com/blog/save-the-date-symfonyday-montreal-2026?utm_source=Symfony%20Blog%20Feed&utm_medium=feed', $firstMetadata['link']);
@@ -61,11 +63,11 @@ public function testLoadWithValidFeedUrl()
6163
$expectedSecondUuid = Uuid::v5(Uuid::fromString('6ba7b810-9dad-11d1-80b4-00c04fd430c8'), 'SymfonyCon Amsterdam 2025: Call for IT student volunteers: Volunteer, Learn & Connect!');
6264
$this->assertEquals($expectedSecondUuid, $secondDocument->id);
6365

64-
$this->assertStringContainsString('Title: SymfonyCon Amsterdam 2025: Call for IT student volunteers: Volunteer, Learn & Connect!', $secondDocument->text);
65-
$this->assertStringContainsString('From: Paola Suárez on 2025-09-10', $secondDocument->text);
66-
$this->assertStringContainsString('🎓SymfonyCon Amsterdam 2025: Call for IT Student Volunteers!', $secondDocument->text);
66+
$this->assertStringContainsString('Title: SymfonyCon Amsterdam 2025: Call for IT student volunteers: Volunteer, Learn & Connect!', $secondDocument->content);
67+
$this->assertStringContainsString('From: Paola Suárez on 2025-09-10', $secondDocument->content);
68+
$this->assertStringContainsString('🎓SymfonyCon Amsterdam 2025: Call for IT Student Volunteers!', $secondDocument->content);
6769

68-
$secondMetadata = $secondDocument->metadata->toArray();
70+
$secondMetadata = $secondDocument->metadata;
6971
$this->assertSame($expectedSecondUuid->toRfc4122(), $secondMetadata['id']);
7072
$this->assertSame('SymfonyCon Amsterdam 2025: Call for IT student volunteers: Volunteer, Learn & Connect!', $secondMetadata['title']);
7173
$this->assertSame('https://symfony.com/blog/symfonycon-amsterdam-2025-call-for-it-student-volunteers-volunteer-learn-and-connect?utm_source=Symfony%20Blog%20Feed&utm_medium=feed', $secondMetadata['link']);
@@ -108,45 +110,44 @@ public function testLoadWithHttpError()
108110
{
109111
$loader = new FeedLoader(new MockHttpClient(new MockResponse('', ['http_code' => 404])));
110112

111-
$this->expectException(\Symfony\Contracts\HttpClient\Exception\ClientException::class);
113+
$this->expectException(ClientException::class);
112114

113115
iterator_to_array($loader->load('https://example.com/non-existent-feed.xml'));
114116
}
115117

116118
public function testLoadWithMalformedXml()
117119
{
118-
$malformedXml = '<?xml version="1.0" encoding="UTF-8" ?><rss><channel><title>Test</title>';
120+
$malformedXml = 'Not XML at all';
119121

120122
$loader = new FeedLoader(new MockHttpClient(new MockResponse($malformedXml)));
123+
$documents = iterator_to_array($loader->load('https://example.com/malformed-feed.xml'));
121124

122-
$this->expectException(\Exception::class);
123-
124-
iterator_to_array($loader->load('https://example.com/malformed-feed.xml'));
125+
$this->assertCount(0, $documents);
125126
}
126127

127128
public function testLoadReturnsIterableOfTextDocuments()
128129
{
129-
$loader = new FeedLoader(new MockHttpClient(MockResponse::fromFile(__DIR__.'/fixtures/symfony-feed.xml')));
130+
$loader = new FeedLoader(new MockHttpClient(MockResponse::fromFile(__DIR__.'/../fixtures/symfony-blog.rss')));
130131
$result = $loader->load('https://feeds.feedburner.com/symfony/blog');
131132

132133
$this->assertIsIterable($result);
133134

134135
foreach ($result as $document) {
135136
$this->assertInstanceOf(TextDocument::class, $document);
136137
$this->assertInstanceOf(Uuid::class, $document->id);
137-
$this->assertIsString($document->text);
138-
$this->assertNotEmpty($document->text);
139-
$this->assertIsArray($document->metadata->toArray());
138+
$this->assertIsString($document->content);
139+
$this->assertNotEmpty($document->content);
140+
$this->assertInstanceOf(Metadata::class, $document->metadata);
140141
}
141142
}
142143

143144
public function testLoadGeneratesConsistentUuids()
144145
{
145-
$loader = new FeedLoader(new MockHttpClient(MockResponse::fromFile(__DIR__.'/fixtures/symfony-feed.xml')));
146+
$loader = new FeedLoader(new MockHttpClient(MockResponse::fromFile(__DIR__.'/../fixtures/symfony-blog.rss')));
146147
$documents1 = iterator_to_array($loader->load('https://feeds.feedburner.com/symfony/blog'));
147148

148149
// Load same feed again
149-
$loader2 = new FeedLoader(new MockHttpClient(MockResponse::fromFile(__DIR__.'/fixtures/symfony-feed.xml')));
150+
$loader2 = new FeedLoader(new MockHttpClient(MockResponse::fromFile(__DIR__.'/../fixtures/symfony-blog.rss')));
150151
$documents2 = iterator_to_array($loader2->load('https://feeds.feedburner.com/symfony/blog'));
151152

152153
$this->assertCount(2, $documents1);

demo/tests/Blog/LoaderTest.php

Lines changed: 0 additions & 53 deletions
This file was deleted.

0 commit comments

Comments
 (0)