Files
PHP-App-Timekeeping/api/tests/unit/Models/WorkingHoursTest.php
T
2025-05-03 09:27:39 +02:00

73 lines
2.1 KiB
PHP

<?php
namespace TorstenHettstedt\TimekeepingApi\Tests\Unit\Models;
use Codeception\Attribute\DataProvider;
use Codeception\Test\Unit;
use DateInterval;
use DateTime;
use Error;
use TorstenHettstedt\TimekeepingApi\Models\WorkingHours;
class WorkingHoursTest extends Unit
{
public function testWorkingHoursWithoutContent(): void
{
$obj = new WorkingHours();
$this->assertNull($obj->getWorkingDay());
$this->assertNull($obj->getWorkingTime());
$this->expectException(Error::class);
$obj->jsonSerialize();
}
/**
* @return array<array<DateTime|DateInterval|array<string,string>>>
*/
public function workingHoursProvider(): array
{
return [
[
new DateTime('2020-11-30'),
new DateInterval("PT8H"),
[
'workingDay' => '2020-11-30',
'workingTime' => '08:00:00',
],
],
[
new DateTime('2021-05-03'),
new DateInterval("PT7H45M"),
[
'workingDay' => '2021-05-03',
'workingTime' => '07:45:00',
],
],
];
}
/**
* @param DateTime $date
* @param DateInterval $interval
* @param array<string, string> $shouldJson
*/
#[DataProvider('workingHoursProvider')]
public function testWorkingHoursWithContent(DateTime $date, DateInterval $interval, array $shouldJson): void
{
$obj = new WorkingHours();
$obj->setWorkingDay($date)->setWorkingTime($interval);
$this->assertNotNull($obj->getWorkingDay());
$this->assertInstanceOf(DateTime::class, $obj->getWorkingDay());
$this->assertEquals($date, $obj->getWorkingDay());
$this->assertNotNull($obj->getWorkingTime());
$this->assertInstanceOf(DateInterval::class, $obj->getWorkingTime());
$this->assertEquals($interval, $obj->getWorkingTime());
$json = $obj->jsonSerialize();
$this->assertEquals($shouldJson, $json);
}
}