Immobilien site 11-05-2026

This commit is contained in:
Kevin Adametz 2026-05-11 10:29:37 +02:00
parent e198d842ce
commit 6799325f71
28 changed files with 16189 additions and 809 deletions

View file

@ -50,7 +50,8 @@ test('getFormattedPrice returns formatted AED with EUR and USD', function () {
->toContain('AED')
->toContain('EUR')
->toContain('USD')
->toContain('1.125.000');
->toContain('1.125.000')
->toContain('whitespace-nowrap');
});
test('getFormattedPrice returns empty string when no price', function () {

View file

@ -99,6 +99,28 @@ it('immobilien contact form renders with privacy checkbox', function () {
->assertSee('Exposé');
});
it('immobilien contact form can hide interest selection', function () {
Livewire::test(ImmobilienContactForm::class, [
'projectSlug' => 'test-projekt',
'projectTitle' => 'Testprojekt Dubai',
'interestOptions' => ['kauf' => 'Kauf', 'miete' => 'Miete'],
'showInterest' => false,
'submitLabel' => 'Anfrage absenden',
'syncFromAlpineProject' => true,
])
->assertDontSee('Bitte wählen')
->assertDontSee('Kauf')
->assertSee('Anfrage absenden')
->assertSee('Datenschutzerklärung');
});
it('immobilien contact form updates selected project from modal event', function () {
Livewire::test(ImmobilienContactForm::class)
->dispatch('azizi-project-selected', slug: 'azizi-amir', title: 'Azizi Amir')
->assertSet('projectSlug', 'azizi-amir')
->assertSet('projectTitle', 'Azizi Amir');
});
it('immobilien contact form validates required fields', function () {
Livewire::test(ImmobilienContactForm::class)
->call('submit')
@ -119,7 +141,17 @@ it('immobilien contact form sends inquiry on valid submission', function () {
Mail::fake();
$service = $this->mock(ContactFormService::class);
$service->shouldReceive('handle')->once();
$service
->shouldReceive('handle')
->once()
->withArgs(function (array $payload, string $subject, string $source): bool {
expect($payload['project'])->toBe('azizi-creek-views-4')
->and($payload['project_title'])->toBe('Creek Views 4')
->and($subject)->toBe('Immobilien-Anfrage: Creek Views 4')
->and($source)->toBe('immobilien-contact-form');
return true;
});
Livewire::test(ImmobilienContactForm::class, [
'projectSlug' => 'azizi-creek-views-4',

View file

@ -5,44 +5,47 @@ declare(strict_types=1);
it('immobilien index page loads successfully', function () {
$this->get('/immobilien')
->assertSuccessful()
->assertSee('Creek Views 4');
->assertSee('Creek Views 4')
->assertSee('/immobilien/azizi-creek-views-4')
->assertDontSee('/dev/immobilien-azizi/azizi-creek-views-4')
->assertDontSee('Projektquelle');
});
it('immobilien page shows new hero section', function () {
$this->get('/immobilien')
->assertSuccessful()
->assertSee('globale')
->assertSee('Dynamik');
->assertSee('63 Azizi-Projekte')
->assertSee('Persönlich eingeordnet');
});
it('immobilien page shows warum dubai section', function () {
$this->get('/immobilien')
->assertSuccessful()
->assertSee('Investment in Dubai')
->assertSee('0 % Steuern')
->assertSee('Warum Dubai für Investoren relevant bleibt')
->assertSee('0 % Einkommensteuer')
->assertSee('Golden Visa');
});
it('immobilien page shows kaufprozess section', function () {
$this->get('/immobilien')
->assertSuccessful()
->assertSee('Kaufprozess')
->assertSee('Reservierung')
->assertSee('Finaler Kaufvertrag');
->assertSee('Der Kaufprozess mit B2in')
->assertSee('Strategie klären')
->assertSee('Kauf begleiten');
});
it('immobilien page shows bruecke section', function () {
$this->get('/immobilien')
->assertSuccessful()
->assertSee('Meine Aufgabe')
->assertSee('Ihr B2in-Vorteil');
->assertSee('Marcel sortiert den Markt')
->assertSee('Kuratiert statt katalogisiert');
});
it('immobilien page shows mindset check section', function () {
$this->get('/immobilien')
->assertSuccessful()
->assertSee('Investor')
->assertSee('Der Schritt ist kleiner');
->assertSee('Passt Dubai zu Ihrer Investmentstrategie?')
->assertSee('Dubai als Wachstumsentscheidung');
});
it('immobilien show page loads for valid slug', function () {
@ -50,8 +53,34 @@ it('immobilien show page loads for valid slug', function () {
->assertSuccessful()
->assertSee('Creek Views 4')
->assertSee('Al Jaddaf, Dubai')
->assertSee('Investment-Einordnung')
->assertSee('Verfügbarkeit anfragen')
->assertDontSee('Projektquelle');
});
it('immobilien show page can reveal project source for internal review via query parameter', function () {
$this->get('/immobilien/azizi-creek-views-4?dev=1')
->assertSuccessful()
->assertSee('Projektquelle')
->assertSee('Azizi-Projektseite');
});
it('immobilien show page includes the richer modal content for project pages', function () {
$this->get('/immobilien/azizi-riviera')
->assertSuccessful()
->assertSee('Azizi Riviera')
->assertSee('Aus dem offiziellen Azizi-Exposé')
->assertSee('Azizi Riviera verbindet Stadt- und Wasserlage')
->assertSee('Galerie')
->assertSee('Starkes Investment');
->assertSee('official-website/02_00_Hero_9b3cfa30.jpg')
->assertSeeLivewire(App\Livewire\Web\Components\Sections\ImmobilienContactForm::class);
});
it('immobilien index can reveal project source for internal review via query parameter', function () {
$this->get('/immobilien?dev=1')
->assertSuccessful()
->assertSee('Projektquelle')
->assertSee('/immobilien/azizi-creek-views-4?dev=1');
});
it('immobilien show page returns 404 for invalid slug', function () {
@ -67,22 +96,38 @@ it('ecosystem redirects to netzwerk via partner', function () {
it('dev azizi immobilien page shows curated projects', function () {
$this->get('/dev/immobilien-azizi')
->assertSuccessful()
->assertSee('19 Azizi-Leitprojekte')
->assertSee('Burj Azizi')
->assertSee('Sofort verfuegbar')
->assertSee('Ready Rendite')
->assertSee('63 Azizi-Projekte')
->assertSee('Azizi Creek Views 4')
->assertSee('Sofort verfügbar')
->assertSee('Sofort vermietbar')
->assertSee('Kategorien')
->assertSee('Stadtteile')
->assertSee('Al Furjan')
->assertSee('Zurück zum Anfang der Projektübersicht')
->assertSee('Dubai als Wachstumsentscheidung')
->assertSee('Dubai braucht Entscheidungskraft')
->assertSee('Projektseite öffnen')
->assertSee('Projektquelle')
->assertSee('Projektfenster schließen')
->assertSee('Direkte Anfrage')
->assertSee('Anfrage absenden')
->assertSee('EUR')
->assertSee('USD')
->assertSee('Azizi Milan')
->assertSee('Typ')
->assertSee('STUDIO, 1 & 2 BEDROOMS', false)
->assertSee('Azizi Vista')
->assertSee('Azizi Arian')
->assertSee('Stadtteile aus der Azizi Folding Map');
->assertSee('Stadtteile, in denen Azizi entwickelt')
->assertSeeLivewire(App\Livewire\Web\Components\Sections\ImmobilienContactForm::class);
});
it('dev azizi project detail page loads for valid slug', function () {
$this->get('/dev/immobilien-azizi/burj-azizi')
$this->get('/dev/immobilien-azizi/azizi-creek-views-4')
->assertSuccessful()
->assertSee('Burj Azizi')
->assertSee('Sheikh Zayed Road')
->assertSee('Investment Case')
->assertSee('Azizi Creek Views 4')
->assertSee('Al Jaddaf')
->assertSee('Investment-Einordnung')
->assertSee('Azizi-Projektseite');
});

View file

@ -18,6 +18,13 @@ test('theme_image_url returns legacy path for slash-separated theme paths', func
expect($url)->toContain('img/assets/b2in/example.jpg');
});
test('theme_image_url returns public storage path for stored real estate images', function () {
expect(theme_image_url('immobile/dubai/azizi-ruby/overview-thumbnail/example.jpg'))
->toContain('storage/immobile/dubai/azizi-ruby/overview-thumbnail/example.jpg')
->and(theme_image_url('storage/immobile/dubai/azizi-ruby/overview-thumbnail/example.jpg'))
->toContain('storage/immobile/dubai/azizi-ruby/overview-thumbnail/example.jpg');
});
test('theme_image_url passes through absolute http urls', function () {
$url = theme_image_url('https://example.org/x.webp');