homeos/tests/Feature/RoomsTest.php

57 lines
1.7 KiB
PHP

<?php
namespace Tests\Feature;
use App\Livewire\Modals\CreateRoom;
use App\Livewire\Rooms\Show;
use App\Models\Device;
use App\Models\Room;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Livewire\Livewire;
use Tests\TestCase;
class RoomsTest extends TestCase
{
use RefreshDatabase;
public function test_create_room_modal_creates_a_room(): void
{
$this->actingAs(User::factory()->create());
Livewire::test(CreateRoom::class)
->set('name', 'Wohnzimmer')
->set('icon', 'lamp')
->call('save')
->assertRedirect(route('rooms.index'));
$this->assertDatabaseHas('rooms', ['name' => 'Wohnzimmer', 'icon' => 'lamp']);
}
public function test_create_room_rejects_an_unknown_icon(): void
{
$this->actingAs(User::factory()->create());
Livewire::test(CreateRoom::class)
->set('name', 'X')
->set('icon', 'not-an-icon')
->call('save')
->assertHasErrors('icon');
}
public function test_deleting_a_room_keeps_devices_but_unassigns_them(): void
{
$this->actingAs(User::factory()->create());
$room = Room::create(['name' => 'Küche', 'icon' => 'rooms', 'sort' => 1]);
$device = Device::create(['name' => 'Lampe', 'vendor' => 'Shelly', 'protocol' => 'http', 'room_id' => $room->id, 'config' => ['ip' => '1.2.3.4']]);
Livewire::test(Show::class, ['room' => $room])
->call('deleteRoom')
->assertRedirect(route('rooms.index'));
$this->assertModelMissing($room);
$this->assertNull($device->fresh()->room_id); // device kept, just unassigned
}
}