incr/tests/Feature/MilestoneTest.php

74 lines
2.3 KiB
PHP
Raw Normal View History

2025-07-13 00:18:45 +02:00
<?php
namespace Tests\Feature;
use App\Models\Milestone;
use App\Models\Tracker;
use App\Models\User;
2025-07-13 00:18:45 +02:00
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class MilestoneTest extends TestCase
{
use RefreshDatabase;
private function tracker(): Tracker
{
return Tracker::create([
'user_id' => User::default()->id,
'label' => 'Test',
'unit' => 'units',
]);
}
2025-07-13 00:18:45 +02:00
public function test_can_create_milestone(): void
{
$tracker = $this->tracker();
2025-07-13 00:18:45 +02:00
$milestone = Milestone::create([
'tracker_id' => $tracker->id,
2025-07-13 00:18:45 +02:00
'target' => 1500,
'description' => 'First milestone',
2025-07-13 00:18:45 +02:00
]);
$this->assertDatabaseHas('milestones', [
'target' => 1500,
'description' => 'First milestone',
2025-07-13 00:18:45 +02:00
]);
$this->assertEquals(1500, $milestone->target);
$this->assertEquals('First milestone', $milestone->description);
}
public function test_can_fetch_milestones_via_api(): void
{
$tracker = $this->tracker();
Milestone::create(['tracker_id' => $tracker->id, 'target' => 1500, 'description' => 'First milestone']);
Milestone::create(['tracker_id' => $tracker->id, 'target' => 3000, 'description' => 'Second milestone']);
2025-07-13 00:18:45 +02:00
$response = $this->get('/milestones');
$response->assertStatus(200);
$response->assertJsonCount(2);
$response->assertJson([
['target' => 1500, 'description' => 'First milestone'],
['target' => 3000, 'description' => 'Second milestone'],
2025-07-13 00:18:45 +02:00
]);
}
public function test_milestones_ordered_by_target(): void
{
$tracker = $this->tracker();
Milestone::create(['tracker_id' => $tracker->id, 'target' => 3000, 'description' => 'Third']);
Milestone::create(['tracker_id' => $tracker->id, 'target' => 1000, 'description' => 'First']);
Milestone::create(['tracker_id' => $tracker->id, 'target' => 2000, 'description' => 'Second']);
2025-07-13 00:18:45 +02:00
$response = $this->get('/milestones');
$milestones = $response->json();
$this->assertEquals(1000, $milestones[0]['target']);
$this->assertEquals(2000, $milestones[1]['target']);
$this->assertEquals(3000, $milestones[2]['target']);
}
}