ldc-sitemap-generator/tests/Feature/GenerateSitemapCommandTest.php
Jérémy Munsch 58c9050ecc
feat(config): add SitemapStorage for managing sitemap files
- Introduced SitemapStorage class for reading, writing, and checking existence of sitemap files.
- Updated GenerateSitemapCommand to utilize SitemapStorage for file operations.
- Refactored tests to accommodate changes in sitemap file handling.
- Enhanced configuration to support output paths and storage disks.
2026-10-15 14:42:20 +02:00

83 lines
2.8 KiB
PHP

<?php
declare(strict_types=1);
namespace Uwil\SitemapGenerator\Tests\Feature;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Storage;
use Uwil\SitemapGenerator\Config\SitemapConfig;
use Uwil\SitemapGenerator\Console\Commands\GenerateSitemapCommand;
covers(GenerateSitemapCommand::class);
describe('GenerateSitemapCommand test', function () {
beforeEach(function () {
/** @var \Uwil\SitemapGenerator\Tests\TestCase $this */
Storage::disk($this->outputDisk)->delete($this->outputPath);
});
afterEach(function () {
/** @var \Uwil\SitemapGenerator\Tests\TestCase $this */
Storage::disk($this->outputDisk)->delete($this->outputPath);
});
it('displays the dry-run table without creating the sitemap file', function () {
/** @var \Uwil\SitemapGenerator\Tests\TestCase $this */
// GIVEN
Route::name('contact')->get('/{locale}/contact', fn () => 'contact');
config()->set(SitemapConfig::CONFIG_KEY . '.single_pages', ['contact']);
// WHEN
/** @var \Illuminate\Testing\PendingCommand $command */
$command = $this->artisan('uwil:sitemap:refresh --dry-run');
// THEN
$command
->expectsOutput('Generating Sitemap..')
->assertSuccessful()
->run();
expect(Storage::disk($this->outputDisk)->exists($this->outputPath))->toBeFalse();
});
it('generates the sitemap xml file and serves it via the GET route', function () {
/** @var \Uwil\SitemapGenerator\Tests\TestCase $this */
// GIVEN
$url = 'sitemap.xml';
Route::name('contact')->get('/{locale}/contact', fn () => 'contact');
config()->set(SitemapConfig::CONFIG_KEY . '.single_pages', ['contact']);
// WHEN
/** @var \Illuminate\Testing\PendingCommand $command */
$command = $this->artisan('uwil:sitemap:refresh');
// THEN
$command
->expectsOutput('Generating Sitemap..')
->expectsOutput('A new sitemap.xml was generated')
->assertSuccessful()
->run();
expect(Storage::disk($this->outputDisk)->exists($this->outputPath))->toBeTrue();
$content = Storage::disk($this->outputDisk)->get($this->outputPath);
expect($content)
->toContain('<urlset')
->toContain('/fr/contact')
->toContain('/en/contact');
$response = $this->get($url);
$response->assertOk();
expect($response->streamedContent())
->toContain('/fr/contact');
});
it('returns 404 when the sitemap has not been generated yet', function () {
/** @var \Uwil\SitemapGenerator\Tests\TestCase $this */
// GIVEN
$url = 'sitemap.xml';
// WHEN
$result = $this->get($url);
// THEN
$result->assertNotFound();
});
});