A cidade de atuação é São Paulo, garantida por teste em quatro lugares e exigida por openspec/specs/site-settings/spec.md. O identificador de timezone, porém, era America/Fortaleza. O identificador passa a acompanhar o negócio. A mudança não altera comportamento. America/Sao_Paulo e America/Fortaleza são UTC-3 o ano inteiro desde que o horário de verão brasileiro foi extinto — verificado para janeiro, março e dezembro de 2026, idênticos ao segundo. Nada renderizado muda, o relógio congelado dos testes visuais usa offset absoluto (-03:00) e os baselines seguem válidos. O motivo de mexer é outro: a divergência entre o timezone e a cidade custou tempo real. Uma sessão anterior a interpretou como drift e "corrigiu" a SPEC no sentido errado, mudando o documento normativo para Fortaleza em vez de olhar o que o negócio é. Com os dois valores dizendo São Paulo, não há mais o que interpretar. Escopo: config/app.php, .env.example, os dois pontos do ci.yml, SPEC.md (§0, §13.5, §15.4), README.md, docs/deployment/dokploy.md, CLAUDE.md, openspec/config.yaml, openspec/specs/visual-regression/spec.md e o withTimezone do VisualRegressionTest. Intocados de propósito: as asserções que garantem que Fortaleza não aparece como cidade de operação, em PublicPagesTest, SiteSettingsTest, ContentSeederProductionGatingTest e openspec/specs/site-settings. Essas tratam de cidade, não de fuso, e continuam corretas. Co-Authored-By: Claude noreply@anthropic.com AI-Assisted: yes AI-Tool: claude-code Co-authored-by: manoel.neto <manoel.neto@creditas.com>
60 lines
1.7 KiB
PHP
60 lines
1.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Models\SiteSetting;
|
|
use Database\Seeders\VisualContentSeeder;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
beforeEach(function (): void {
|
|
putenv('APP_FROZEN_NOW='.VisualContentSeeder::FROZEN_NOW);
|
|
$_ENV['APP_FROZEN_NOW'] = VisualContentSeeder::FROZEN_NOW;
|
|
$_SERVER['APP_FROZEN_NOW'] = VisualContentSeeder::FROZEN_NOW;
|
|
|
|
$this->refreshApplication();
|
|
|
|
Artisan::call('db:seed', ['--class' => VisualContentSeeder::class, '--force' => true]);
|
|
|
|
SiteSetting::instance();
|
|
});
|
|
|
|
afterEach(function (): void {
|
|
putenv('APP_FROZEN_NOW');
|
|
unset($_ENV['APP_FROZEN_NOW'], $_SERVER['APP_FROZEN_NOW']);
|
|
});
|
|
|
|
$screens = [
|
|
'home' => '/',
|
|
'services' => '/servicos',
|
|
'portfolio' => '/portfolio',
|
|
'portfolio-detail' => '/portfolio/casamento-ana-lucas',
|
|
'about' => '/sobre',
|
|
'contact' => '/contato',
|
|
'privacy' => '/privacidade',
|
|
'not-found' => '/__missing-visual-page',
|
|
];
|
|
|
|
$viewports = [
|
|
'desktop' => [1440, 1000],
|
|
'mobile' => [390, 844],
|
|
];
|
|
|
|
foreach ($screens as $screen => $path) {
|
|
foreach ($viewports as $viewport => [$width, $height]) {
|
|
it("matches {$screen} {$viewport} visual baseline", function () use ($path, $width, $height): void {
|
|
$this->assertStableScreenshotMatches(
|
|
$this->visit($path, [
|
|
'reducedMotion' => 'reduce',
|
|
])
|
|
->withLocale('pt-BR')
|
|
->withTimezone('America/Sao_Paulo')
|
|
->resize($width, $height),
|
|
resetScroll: $path === '/',
|
|
);
|
|
});
|
|
}
|
|
}
|