incr/tests/Feature/MilestoneTest.php

73 lines
2.3 KiB
PHP

<?php
namespace Tests\Feature;
use App\Models\Milestone;
use App\Models\Tracker;
use App\Models\User;
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',
]);
}
public function test_can_create_milestone(): void
{
$tracker = $this->tracker();
$milestone = Milestone::create([
'tracker_id' => $tracker->id,
'target' => 1500,
'description' => 'First milestone',
]);
$this->assertDatabaseHas('milestones', [
'target' => 1500,
'description' => 'First milestone',
]);
$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']);
$response = $this->get('/milestones');
$response->assertStatus(200);
$response->assertJsonCount(2);
$response->assertJson([
['target' => 1500, 'description' => 'First milestone'],
['target' => 3000, 'description' => 'Second milestone'],
]);
}
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']);
$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']);
}
}