<?php
|
|
|
|
namespace Tests\Feature\Http;
|
|
|
|
use Illuminate\Testing\Fluent\AssertableJson;
|
|
use Tests\TestCase;
|
|
|
|
class CalculateDurationTest extends TestCase
|
|
{
|
|
public function testCanCalulateDurationViaApi(): void
|
|
{
|
|
$this
|
|
->postJson('/calculate-duration', [
|
|
'start' => [
|
|
'date' => '2024-08-10',
|
|
],
|
|
'end' => [
|
|
'date' => '2024-08-21'
|
|
],
|
|
])
|
|
->assertSuccessful()
|
|
->assertJson(fn (AssertableJson $json) => $json
|
|
->has('data', fn (AssertableJson $json) => $json
|
|
->where('days', 12)
|
|
->where('weeks', 1)
|
|
->where('week_days', 8)));
|
|
}
|
|
|
|
public function testCanCalulateDurationViaApiWithSecondsModifier(): void
|
|
{
|
|
$this
|
|
->postJson('/calculate-duration', [
|
|
'start' => [
|
|
'date' => '2024-08-10',
|
|
],
|
|
'end' => [
|
|
'date' => '2024-08-21'
|
|
],
|
|
'convert_to' => 'second',
|
|
])
|
|
->assertSuccessful()
|
|
->assertJson(fn (AssertableJson $json) => $json
|
|
->has('data', fn (AssertableJson $json) => $json
|
|
->where('days', 1036800)
|
|
->where('weeks', 604800)
|
|
->where('week_days', 691200)));
|
|
}
|
|
|
|
public function testCanCalulateDurationViaApiWithHoursModifier(): void
|
|
{
|
|
$this
|
|
->postJson('/calculate-duration', [
|
|
'start' => [
|
|
'date' => '2024-08-10',
|
|
],
|
|
'end' => [
|
|
'date' => '2024-08-21'
|
|
],
|
|
'convert_to' => 'hour',
|
|
])
|
|
->assertSuccessful()
|
|
->assertJson(fn (AssertableJson $json) => $json
|
|
->has('data', fn (AssertableJson $json) => $json
|
|
->where('days', 288)
|
|
->where('weeks', 168)
|
|
->where('week_days', 192)));
|
|
}
|
|
|
|
public function testCanCalulateDurationViaApiWithMinutesModifier(): void
|
|
{
|
|
$this
|
|
->postJson('/calculate-duration', [
|
|
'start' => [
|
|
'date' => '2024-08-10',
|
|
],
|
|
'end' => [
|
|
'date' => '2024-08-21'
|
|
],
|
|
'convert_to' => 'minute',
|
|
])
|
|
->assertSuccessful()
|
|
->assertJson(fn (AssertableJson $json) => $json
|
|
->has('data', fn (AssertableJson $json) => $json
|
|
->where('days', 17280)
|
|
->where('weeks', 10080)
|
|
->where('week_days', 11520)));
|
|
}
|
|
|
|
public function testCanCalulateDurationViaApiWithYearsModifier(): void
|
|
{
|
|
$this
|
|
->postJson('/calculate-duration', [
|
|
'start' => [
|
|
'date' => '2024-08-10',
|
|
],
|
|
'end' => [
|
|
'date' => '2024-08-21'
|
|
],
|
|
'convert_to' => 'year',
|
|
])
|
|
->assertSuccessful()
|
|
->assertJson(fn (AssertableJson $json) => $json
|
|
->has('data', fn (AssertableJson $json) => $json
|
|
->where('days', 0.03288)
|
|
->where('weeks', 0.01918)
|
|
->where('week_days', 0.02192)));
|
|
}
|
|
|
|
public function testCalculateDurationValidatesTimeFormat(): void
|
|
{
|
|
$this
|
|
->postJson('/calculate-duration', [
|
|
'start' => [
|
|
'date' => 'not valid',
|
|
],
|
|
'end' => [
|
|
'date' => '10-09-1998',
|
|
],
|
|
])
|
|
->assertStatus(422)
|
|
->assertJsonValidationErrors([
|
|
'start.date' => 'match the format',
|
|
'end.date' => 'match the format',
|
|
]);
|
|
}
|
|
|
|
public function testCalculateDurationValidatesTimeZones(): void
|
|
{
|
|
$this
|
|
->postJson('/calculate-duration', [
|
|
'start' => [
|
|
'timezone' => 'not valid',
|
|
],
|
|
'end' => [
|
|
'timezone' => 'Australia/adelaide-but-misspelled-or-something',
|
|
],
|
|
])
|
|
->assertStatus(422)
|
|
->assertJsonValidationErrors([
|
|
'start.timezone' => 'valid timezone',
|
|
'end.timezone' => 'valid timezone',
|
|
]);
|
|
}
|
|
|
|
public function testCalculateDurationValidatesConvertToValid(): void
|
|
{
|
|
$this
|
|
->postJson('/calculate-duration', [
|
|
'convert_to' => 'invalid value',
|
|
])
|
|
->assertStatus(422)
|
|
->assertJsonValidationErrors([
|
|
'convert_to' => 'invalid',
|
|
]);
|
|
}
|
|
}
|