Abstimmungsrunde 03.09.: CABINET-Seite, korrigierte Markentexte, Galerie-Hinweise, Abschluss-CTA
Setzt die vier Punkte aus dev/2026-08-28/umsetzung-03-09-2026.md um.
1. Markenseiten
- Rotpunkt und Febrü auf die korrigierten Fassungen (*_FINAL.md) gebracht:
bei Rotpunkt sind die beiden Nachhaltigkeitsabschnitte zusammengefuehrt,
bei Febrü behaelt der Blaue-Engel-Satz seinen Produktbezug ohne den
erklaerenden Zusatz.
- CABINET nach demselben Muster neu verfasst: 8 Abschnitte, 3 Vertiefungen,
eigener Abschlussblock und eigene Widget-Beschriftung. Bewusst ohne Zahlen,
Zertifizierungen oder Herstelleraussagen – dafuer gibt es keine Quelle.
Braucht Marcels Freigabe.
- Febrü-Claim korrigiert: „Arbeiten, wo man gerne bleibt.“
2. „BEISPIEL“-Vermerk aus den Bildunterschriften entfernt. Weil die Demobilder
auf Vorschau und Live bereits in der Datenbank stehen, entfernt
BrandGalleryCaptionNormalizerSeeder ihn dort in-place – nur der Text, Bild,
Kategorie und Reihenfolge bleiben unberuehrt.
3. Hinweise zu Visualisierungen neu formuliert (Markengalerie und /referenzen).
Die Trennung bleibt, sie laeuft nur nicht mehr ueber eine Verneinung.
4. Abschluss-CTA der Markenseiten ueberarbeitet: weiche Lichtflaechen statt
Vollton, gesetzter Hauptbutton mit Pfeil, Herstellerseite als gleichwertiger
Outline-Button, Showroom als Fusszeile.
Ein Pruefskript hat jeden veroeffentlichten Satz gegen die abgestimmten
Markdown-Fassungen gehalten: keine Abweichung.
Tests: 859 gruen (3180 Assertions), Pint sauber, npm run build:b2in gebaut.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
4ef3a4d8f1
commit
a52347845e
18 changed files with 884 additions and 63 deletions
|
|
@ -27,6 +27,15 @@ it('renders the delivered sections on the rotpunkt page', function () {
|
|||
->assertSee('Küchenstudio plus Handwerk', false);
|
||||
});
|
||||
|
||||
it('renders the cabinet sections written to the same pattern', function () {
|
||||
$this->get('/marken/cabinet')
|
||||
->assertSuccessful()
|
||||
->assertSee('Millimeter statt Standardmaß', false)
|
||||
->assertSee('Aufmaß vor Ort statt Schätzung am Telefon', false)
|
||||
->assertSee('Warum CABINET bei uns?')
|
||||
->assertSee('Ihr Raum. Persönlich geplant.', false);
|
||||
});
|
||||
|
||||
it('renders the delivered sections on the februe page', function () {
|
||||
$this->get('/marken/februe')
|
||||
->assertSuccessful()
|
||||
|
|
@ -44,6 +53,21 @@ it('turns every marked deepening into a collapsible area', function () {
|
|||
->and($html)->toContain('NEW DIMENSIONS');
|
||||
});
|
||||
|
||||
it('merges the two sustainability sections as the corrected version requires', function () {
|
||||
$html = $this->get('/marken/rotpunkt')->assertSuccessful()->getContent();
|
||||
|
||||
expect($html)->not->toContain('Greenline hält dem Vergleich stand')
|
||||
->and($html)->toContain('ohne Verkaufsnebel')
|
||||
// Der doppelte Satz steht nur noch einmal auf der Seite.
|
||||
->and(substr_count($html, 'Nachhaltigkeit braucht keine großen Versprechen'))->toBe(1);
|
||||
});
|
||||
|
||||
it('keeps the blauer engel claim tied to the listed product groups', function () {
|
||||
$this->get('/marken/februe')
|
||||
->assertSuccessful()
|
||||
->assertSee('Ausgewählte Febrü-Tischsysteme und Stauraummöbel tragen den Blauen Engel.', false);
|
||||
});
|
||||
|
||||
it('shows the pull quote from marcel on the februe page', function () {
|
||||
$this->get('/marken/februe')
|
||||
->assertSuccessful()
|
||||
|
|
@ -81,6 +105,9 @@ it('uses the brand specific closing block instead of the generic one', function
|
|||
});
|
||||
|
||||
it('falls back to the generic closing block for a brand without one', function () {
|
||||
// Beide Sprachen leeren: bei nur geleertem Deutsch greift die Uebersetzungs-Fallbackkette.
|
||||
CmsBrand::where('slug', 'cabinet')->firstOrFail()->update(['cta_title' => [], 'cta_text' => []]);
|
||||
|
||||
$this->get('/marken/cabinet')
|
||||
->assertSuccessful()
|
||||
->assertSee('Interesse an CABINET?');
|
||||
|
|
@ -97,6 +124,7 @@ it('labels the widget for the brand of the page', function (string $slug, string
|
|||
})->with([
|
||||
'rotpunkt' => ['rotpunkt', 'Persönliche Küchenberatung vereinbaren'],
|
||||
'februe' => ['februe', 'Persönliche Arbeitsplatzberatung vereinbaren'],
|
||||
'cabinet' => ['cabinet', 'Persönliche Schrankplanung vereinbaren'],
|
||||
]);
|
||||
|
||||
it('keeps the general label outside the brand pages', function () {
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ it('marks an image without a category as visualisation, never as a completed pro
|
|||
->assertDontSee('Realisiertes Projekt');
|
||||
});
|
||||
|
||||
it('spells out that inspirations are not completed projects', function () {
|
||||
it('still separates inspirations from completed projects after the rewording', function () {
|
||||
CmsBrand::where('slug', 'cabinet')->firstOrFail()->update([
|
||||
'gallery' => [
|
||||
['image' => 'entwurf.webp', 'category' => 'inspiration'],
|
||||
|
|
@ -173,10 +173,12 @@ it('spells out that inspirations are not completed projects', function () {
|
|||
|
||||
$this->get('/marken/cabinet')
|
||||
->assertSuccessful()
|
||||
->assertSee('keine ausgeführten Projekte', false);
|
||||
->assertSee('Entwürfe und Visualisierungen', false)
|
||||
->assertSee('Visualisierung')
|
||||
->assertDontSee('Realisiertes Projekt');
|
||||
});
|
||||
|
||||
it('fills the demo galleries with both categories, all marked as examples', function () {
|
||||
it('fills the demo galleries with both categories', function () {
|
||||
$this->seed(\Database\Seeders\DemoBrandGallerySeeder::class);
|
||||
|
||||
$grouped = CmsBrand::groupGallery(CmsBrand::where('slug', 'cabinet')->firstOrFail()->gallery);
|
||||
|
|
@ -184,10 +186,31 @@ it('fills the demo galleries with both categories, all marked as examples', func
|
|||
expect($grouped['projects'])->not->toBeEmpty()
|
||||
->and($grouped['inspirations'])->not->toBeEmpty();
|
||||
|
||||
// Kein Demobild darf sich unbemerkt als echte Referenz ausgeben.
|
||||
// Der Vermerk „BEISPIEL“ ist auf Kundenwunsch entfallen. Die Unterscheidung muss deshalb
|
||||
// an der Kategorie haengen – jedes Demobild braucht eine ausdrueckliche.
|
||||
foreach (CmsBrand::all() as $brand) {
|
||||
foreach ($brand->gallery ?? [] as $item) {
|
||||
expect($item['caption'])->toStartWith('BEISPIEL');
|
||||
expect($item['caption'])->not->toContain('BEISPIEL')
|
||||
->and($item['category'])->toBeIn(CmsBrand::GALLERY_CATEGORIES);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('strips the old example prefix without touching image, category or order', function () {
|
||||
CmsBrand::where('slug', 'cabinet')->firstOrFail()->update([
|
||||
'gallery' => [
|
||||
['image' => 'a.webp', 'category' => 'project', 'caption' => 'BEISPIEL – Ankleide, Bielefeld'],
|
||||
['image' => 'b.webp', 'category' => 'inspiration', 'caption' => 'Entwurf Garderobe'],
|
||||
],
|
||||
]);
|
||||
|
||||
$this->seed(\Database\Seeders\BrandGalleryCaptionNormalizerSeeder::class);
|
||||
|
||||
$gallery = CmsBrand::where('slug', 'cabinet')->firstOrFail()->gallery;
|
||||
|
||||
expect($gallery)->toHaveCount(2)
|
||||
->and($gallery[0]['caption'])->toBe('Ankleide, Bielefeld')
|
||||
->and($gallery[0]['image'])->toBe('a.webp')
|
||||
->and($gallery[0]['category'])->toBe('project')
|
||||
->and($gallery[1]['caption'])->toBe('Entwurf Garderobe');
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue