10-04-2026
This commit is contained in:
parent
4d6b4930b2
commit
4bb89aad8c
836 changed files with 52961 additions and 5950 deletions
315
tests/Feature/DisplayVersionTest.php
Normal file
315
tests/Feature/DisplayVersionTest.php
Normal file
|
|
@ -0,0 +1,315 @@
|
|||
<?php
|
||||
|
||||
use App\Enums\DisplayVersionType;
|
||||
use App\Livewire\Admin\Cms\DisplayVersionEditor;
|
||||
use App\Livewire\Admin\Cms\DisplayVersionList;
|
||||
use App\Models\DisplayVersion;
|
||||
use App\Models\DisplayVersionItem;
|
||||
use App\Models\User;
|
||||
use Livewire\Livewire;
|
||||
|
||||
beforeEach(function () {
|
||||
$portalDomain = config('domains.domain_portal');
|
||||
Livewire::withoutLazyLoading();
|
||||
url()->forceRootUrl('https://'.$portalDomain);
|
||||
});
|
||||
|
||||
// ========================================
|
||||
// DisplayVersionList
|
||||
// ========================================
|
||||
|
||||
test('display version list requires authentication', function () {
|
||||
$response = $this->get(route('admin.cms.display-versions'));
|
||||
|
||||
$response->assertRedirect('/login');
|
||||
});
|
||||
|
||||
test('display version list renders for authenticated users', function () {
|
||||
$user = User::factory()->create();
|
||||
|
||||
$this->actingAs($user);
|
||||
|
||||
$response = $this->get(route('admin.cms.display-versions'));
|
||||
|
||||
$response->assertSuccessful();
|
||||
$response->assertSeeLivewire(DisplayVersionList::class);
|
||||
});
|
||||
|
||||
test('can create a display version', function () {
|
||||
$user = User::factory()->create();
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionList::class)
|
||||
->set('newName', 'Test Version')
|
||||
->set('newType', 'b2in')
|
||||
->call('createVersion');
|
||||
|
||||
expect(DisplayVersion::where('name', 'Test Version')->exists())->toBeTrue();
|
||||
|
||||
$version = DisplayVersion::where('name', 'Test Version')->first();
|
||||
expect($version->type)->toBe(DisplayVersionType::B2in);
|
||||
expect($version->settings)->toBeArray();
|
||||
expect($version->settings)->toHaveKey('theme');
|
||||
});
|
||||
|
||||
test('create version validates required fields', function () {
|
||||
$user = User::factory()->create();
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionList::class)
|
||||
->set('newName', '')
|
||||
->set('newType', '')
|
||||
->call('createVersion')
|
||||
->assertHasErrors(['newName', 'newType']);
|
||||
});
|
||||
|
||||
test('can delete a display version', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create();
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionList::class)
|
||||
->call('deleteVersion', $version->id);
|
||||
|
||||
expect(DisplayVersion::find($version->id))->toBeNull();
|
||||
});
|
||||
|
||||
test('can toggle display version active status', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create(['is_active' => true]);
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionList::class)
|
||||
->call('toggleActive', $version->id);
|
||||
|
||||
expect($version->fresh()->is_active)->toBeFalse();
|
||||
});
|
||||
|
||||
// ========================================
|
||||
// DisplayVersionEditor
|
||||
// ========================================
|
||||
|
||||
test('display version editor renders with correct version data', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create(['name' => 'My Version']);
|
||||
|
||||
$this->actingAs($user);
|
||||
|
||||
$response = $this->get(route('admin.cms.display-version-edit', $version));
|
||||
|
||||
$response->assertSuccessful();
|
||||
$response->assertSeeLivewire(DisplayVersionEditor::class);
|
||||
});
|
||||
|
||||
test('can add a video item to video-display version', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create(['type' => 'video-display']);
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionEditor::class, ['displayVersion' => $version])
|
||||
->call('openItemModal', null, 'video')
|
||||
->set('videoFilename', 'test.mp4')
|
||||
->set('videoTitle', 'Test Video')
|
||||
->set('videoPosition', 50)
|
||||
->call('saveItem');
|
||||
|
||||
$item = DisplayVersionItem::where('display_version_id', $version->id)->first();
|
||||
expect($item)->not->toBeNull();
|
||||
expect($item->item_type)->toBe('video');
|
||||
expect($item->content['filename'])->toBe('test.mp4');
|
||||
expect($item->content['position'])->toBe(50);
|
||||
});
|
||||
|
||||
test('can add a media item to b2in version', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create(['type' => 'b2in']);
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionEditor::class, ['displayVersion' => $version])
|
||||
->call('openItemModal', null, 'media')
|
||||
->set('mediaType', 'video')
|
||||
->set('mediaCategory', 'immobilien')
|
||||
->set('mediaUrl', '../assets/test.mp4')
|
||||
->set('mediaHeadline', 'Test Headline')
|
||||
->set('mediaSubline', 'Test Subline')
|
||||
->call('saveItem');
|
||||
|
||||
$item = DisplayVersionItem::where('display_version_id', $version->id)->first();
|
||||
expect($item)->not->toBeNull();
|
||||
expect($item->item_type)->toBe('media');
|
||||
expect($item->content['media_type'])->toBe('video');
|
||||
expect($item->content['headline'])->toBe('Test Headline');
|
||||
});
|
||||
|
||||
test('can edit an existing item', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create(['type' => 'video-display']);
|
||||
$item = DisplayVersionItem::factory()->create([
|
||||
'display_version_id' => $version->id,
|
||||
'item_type' => 'video',
|
||||
'content' => ['filename' => 'old.mp4', 'title' => 'Old', 'position' => 25],
|
||||
]);
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionEditor::class, ['displayVersion' => $version])
|
||||
->call('openItemModal', $item->id)
|
||||
->set('videoFilename', 'new.mp4')
|
||||
->set('videoTitle', 'New Title')
|
||||
->call('saveItem');
|
||||
|
||||
$item->refresh();
|
||||
expect($item->content['filename'])->toBe('new.mp4');
|
||||
expect($item->content['title'])->toBe('New Title');
|
||||
});
|
||||
|
||||
test('can delete an item', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create();
|
||||
$item = DisplayVersionItem::factory()->create(['display_version_id' => $version->id]);
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionEditor::class, ['displayVersion' => $version])
|
||||
->call('deleteItem', $item->id);
|
||||
|
||||
expect(DisplayVersionItem::find($item->id))->toBeNull();
|
||||
});
|
||||
|
||||
test('can toggle item active status', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create();
|
||||
$item = DisplayVersionItem::factory()->create([
|
||||
'display_version_id' => $version->id,
|
||||
'is_active' => true,
|
||||
]);
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionEditor::class, ['displayVersion' => $version])
|
||||
->call('toggleItemStatus', $item->id);
|
||||
|
||||
expect($item->fresh()->is_active)->toBeFalse();
|
||||
});
|
||||
|
||||
test('can reorder items', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create();
|
||||
$item1 = DisplayVersionItem::factory()->create([
|
||||
'display_version_id' => $version->id,
|
||||
'item_type' => 'video',
|
||||
'sort_order' => 0,
|
||||
]);
|
||||
$item2 = DisplayVersionItem::factory()->create([
|
||||
'display_version_id' => $version->id,
|
||||
'item_type' => 'video',
|
||||
'sort_order' => 1,
|
||||
]);
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionEditor::class, ['displayVersion' => $version])
|
||||
->call('moveItem', $item2->id, 'up');
|
||||
|
||||
expect($item1->fresh()->sort_order)->toBe(1);
|
||||
expect($item2->fresh()->sort_order)->toBe(0);
|
||||
});
|
||||
|
||||
test('can add a slide item to offers version', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create(['type' => 'offers']);
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionEditor::class, ['displayVersion' => $version])
|
||||
->call('openItemModal', null, 'slide')
|
||||
->set('slideType', 'product-hero')
|
||||
->set('slideDuration', 10000)
|
||||
->set('slideImageUrl', '../assets/goya1.jpg')
|
||||
->set('slideBadge', 'Einzelstück')
|
||||
->set('slideEyebrow', 'Hersteller: Sudbrock')
|
||||
->set('slideTitle', 'GOYA Sideboard')
|
||||
->set('slidePrice', '489 €')
|
||||
->set('slideOriginalPrice', 'statt 4.744 €')
|
||||
->set('slideQrUrl', 'https://cabinet-bielefeld.de')
|
||||
->set('slideQrTitle', 'Reservieren')
|
||||
->set('slideContact', '0521 98620100')
|
||||
->call('saveItem');
|
||||
|
||||
$item = DisplayVersionItem::where('display_version_id', $version->id)->first();
|
||||
expect($item)->not->toBeNull();
|
||||
expect($item->item_type)->toBe('slide');
|
||||
expect($item->content['type'])->toBe('product-hero');
|
||||
expect($item->content['title'])->toBe('GOYA Sideboard');
|
||||
expect($item->content['price'])->toBe('489 €');
|
||||
expect($item->content['image_url'])->toBe('../assets/goya1.jpg');
|
||||
expect($item->content['qr_url'])->toBe('https://cabinet-bielefeld.de');
|
||||
});
|
||||
|
||||
test('can add a slide with bullets to offers version', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create(['type' => 'offers']);
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionEditor::class, ['displayVersion' => $version])
|
||||
->call('openItemModal', null, 'slide')
|
||||
->set('slideType', 'product-details')
|
||||
->set('slideTitle', 'GOYA Sideboard')
|
||||
->set('slideBullets', ['Einzelstück', 'Abholung möglich', 'Lieferung optional'])
|
||||
->call('saveItem');
|
||||
|
||||
$item = DisplayVersionItem::where('display_version_id', $version->id)->first();
|
||||
expect($item->content['bullets'])->toHaveCount(3);
|
||||
expect($item->content['bullets'][0])->toBe('Einzelstück');
|
||||
});
|
||||
|
||||
test('can edit a slide item with new fields', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create(['type' => 'offers']);
|
||||
$item = DisplayVersionItem::factory()->create([
|
||||
'display_version_id' => $version->id,
|
||||
'item_type' => 'slide',
|
||||
'content' => [
|
||||
'type' => 'product-hero',
|
||||
'duration' => 10000,
|
||||
'image_url' => '../assets/old.jpg',
|
||||
'badge_text' => 'Old Badge',
|
||||
'eyebrow' => 'Old',
|
||||
'title' => 'Old Title',
|
||||
'subline' => '',
|
||||
'price' => '100 €',
|
||||
'original_price' => '',
|
||||
'tag_text' => '',
|
||||
'bullets' => [],
|
||||
'disclaimer' => '',
|
||||
'qr_url' => 'https://example.com',
|
||||
'qr_title' => 'QR',
|
||||
'contact' => '',
|
||||
'show_brand_text' => false,
|
||||
'brand_tagline' => '',
|
||||
],
|
||||
]);
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionEditor::class, ['displayVersion' => $version])
|
||||
->call('openItemModal', $item->id)
|
||||
->set('slideTitle', 'New Title')
|
||||
->set('slidePrice', '299 €')
|
||||
->call('saveItem');
|
||||
|
||||
$item->refresh();
|
||||
expect($item->content['title'])->toBe('New Title');
|
||||
expect($item->content['price'])->toBe('299 €');
|
||||
expect($item->content['image_url'])->toBe('../assets/old.jpg');
|
||||
});
|
||||
|
||||
test('can save version settings', function () {
|
||||
$user = User::factory()->create();
|
||||
$version = DisplayVersion::factory()->create([
|
||||
'type' => 'b2in',
|
||||
'settings' => ['theme' => 'dark'],
|
||||
]);
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(DisplayVersionEditor::class, ['displayVersion' => $version])
|
||||
->call('openSettingsModal')
|
||||
->set('settings.theme', 'light')
|
||||
->call('saveSettings');
|
||||
|
||||
expect($version->fresh()->settings['theme'])->toBe('light');
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue