73 lines
2.3 KiB
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']);
|
|
}
|
|
}
|