3
0
mirror of https://github.com/snipe/snipe-it.git synced 2026-04-03 06:20:22 +00:00
Files
snipe-it/tests/Unit/Models/LicenseTest.php
2026-03-23 10:48:53 +00:00

104 lines
2.7 KiB
PHP

<?php
namespace Tests\Unit\Models;
use App\Enums\ActionType;
use App\Models\License;
use App\Models\User;
use Tests\TestCase;
class LicenseTest extends TestCase
{
public function test_adding_seats_is_logged_when_updating()
{
$user = User::factory()->create();
$this->actingAs($user);
$license = License::factory()->create(['seats' => 2]);
$license->update(['seats' => 6]);
$this->assertDatabaseHas('action_logs', [
'created_by' => $user->id,
'action_type' => ActionType::AddSeats,
'item_type' => License::class,
'item_id' => $license->id,
'deleted_at' => null,
// relevant for this test:
'quantity' => 4,
'note' => 'added 4 seats',
]);
}
public function test_removing_seats_is_logged_when_updating()
{
$user = User::factory()->create();
$this->actingAs($user);
$license = License::factory()->create(['seats' => 6]);
$license->update(['seats' => 3]);
$this->assertDatabaseHas('action_logs', [
'created_by' => $user->id,
'action_type' => ActionType::DeleteSeats,
'item_type' => License::class,
'item_id' => $license->id,
'deleted_at' => null,
// relevant for this test:
'quantity' => 3,
'note' => 'deleted 3 seats',
]);
}
public function test_percent_remaining_returns_zero_when_seats_are_zero()
{
$license = new class extends License
{
public int $remaining = 8;
public function remaincount(): int
{
return $this->remaining;
}
};
$license->seats = 0;
$this->assertEquals(0, $license->percentRemaining());
}
public function test_percent_remaining_returns_expected_available_ratio()
{
$license = new class extends License
{
public int $remaining = 6;
public function remaincount(): int
{
return $this->remaining;
}
};
$license->seats = 12;
$this->assertEquals(50.0, $license->percentRemaining());
}
public function test_percent_remaining_clamps_remaining_to_valid_bounds()
{
$license = new class extends License
{
public int $remaining = -3;
public function remaincount(): int
{
return $this->remaining;
}
};
$license->seats = 10;
$this->assertEquals(0.0, $license->percentRemaining());
$license->remaining = 99;
$this->assertEquals(100.0, $license->percentRemaining());
}
}