byos_laravel/tests/Unit/Models/DeviceModelTest.php
Benjamin Nussbaum b4b6286172
Some checks are pending
tests / ci (push) Waiting to run
refactor: apply rector
2025-09-24 20:35:48 +02:00

119 lines
4.1 KiB
PHP

<?php
declare(strict_types=1);
use App\Models\DeviceModel;
test('device model has required attributes', function (): void {
$deviceModel = DeviceModel::factory()->create([
'name' => 'Test Model',
'width' => 800,
'height' => 480,
'colors' => 4,
'bit_depth' => 2,
'scale_factor' => 1.0,
'rotation' => 0,
'offset_x' => 0,
'offset_y' => 0,
]);
expect($deviceModel->name)->toBe('Test Model');
expect($deviceModel->width)->toBe(800);
expect($deviceModel->height)->toBe(480);
expect($deviceModel->colors)->toBe(4);
expect($deviceModel->bit_depth)->toBe(2);
expect($deviceModel->scale_factor)->toBe(1.0);
expect($deviceModel->rotation)->toBe(0);
expect($deviceModel->offset_x)->toBe(0);
expect($deviceModel->offset_y)->toBe(0);
});
test('device model casts attributes correctly', function (): void {
$deviceModel = DeviceModel::factory()->create([
'width' => '800',
'height' => '480',
'colors' => '4',
'bit_depth' => '2',
'scale_factor' => '1.5',
'rotation' => '90',
'offset_x' => '10',
'offset_y' => '20',
]);
expect($deviceModel->width)->toBeInt();
expect($deviceModel->height)->toBeInt();
expect($deviceModel->colors)->toBeInt();
expect($deviceModel->bit_depth)->toBeInt();
expect($deviceModel->scale_factor)->toBeFloat();
expect($deviceModel->rotation)->toBeInt();
expect($deviceModel->offset_x)->toBeInt();
expect($deviceModel->offset_y)->toBeInt();
});
test('get color depth attribute returns correct format for bit depth 2', function (): void {
$deviceModel = DeviceModel::factory()->create(['bit_depth' => 2]);
expect($deviceModel->getColorDepthAttribute())->toBe('2bit');
});
test('get color depth attribute returns correct format for bit depth 4', function (): void {
$deviceModel = DeviceModel::factory()->create(['bit_depth' => 4]);
expect($deviceModel->getColorDepthAttribute())->toBe('4bit');
});
test('get color depth attribute returns 4bit for bit depth greater than 4', function (): void {
$deviceModel = DeviceModel::factory()->create(['bit_depth' => 8]);
expect($deviceModel->getColorDepthAttribute())->toBe('4bit');
});
test('get color depth attribute returns null when bit depth is null', function (): void {
$deviceModel = new DeviceModel(['bit_depth' => null]);
expect($deviceModel->getColorDepthAttribute())->toBeNull();
});
test('get scale level attribute returns null for width 800 or less', function (): void {
$deviceModel = DeviceModel::factory()->create(['width' => 800]);
expect($deviceModel->getScaleLevelAttribute())->toBeNull();
});
test('get scale level attribute returns large for width between 801 and 1000', function (): void {
$deviceModel = DeviceModel::factory()->create(['width' => 900]);
expect($deviceModel->getScaleLevelAttribute())->toBe('large');
});
test('get scale level attribute returns xlarge for width between 1001 and 1400', function (): void {
$deviceModel = DeviceModel::factory()->create(['width' => 1200]);
expect($deviceModel->getScaleLevelAttribute())->toBe('xlarge');
});
test('get scale level attribute returns xxlarge for width greater than 1400', function (): void {
$deviceModel = DeviceModel::factory()->create(['width' => 1500]);
expect($deviceModel->getScaleLevelAttribute())->toBe('xxlarge');
});
test('get scale level attribute returns null when width is null', function (): void {
$deviceModel = new DeviceModel(['width' => null]);
expect($deviceModel->getScaleLevelAttribute())->toBeNull();
});
test('device model factory creates valid data', function (): void {
$deviceModel = DeviceModel::factory()->create();
expect($deviceModel->name)->not->toBeEmpty();
expect($deviceModel->width)->toBeInt();
expect($deviceModel->height)->toBeInt();
expect($deviceModel->colors)->toBeInt();
expect($deviceModel->bit_depth)->toBeInt();
expect($deviceModel->scale_factor)->toBeFloat();
expect($deviceModel->rotation)->toBeInt();
expect($deviceModel->offset_x)->toBeInt();
expect($deviceModel->offset_y)->toBeInt();
});