114 lines
3.8 KiB
PHP
114 lines
3.8 KiB
PHP
<?php
|
|
|
|
namespace TorstenHettstedt\TimekeepingApi\Tests\Unit\Models;
|
|
|
|
use Codeception\Test\Unit;
|
|
use DateInterval;
|
|
use DateTime;
|
|
use DateTimeInterface;
|
|
use TorstenHettstedt\TimekeepingApi\Models\PeriodDesignationEnum;
|
|
use TorstenHettstedt\TimekeepingApi\Models\WorkingHoursView;
|
|
|
|
class WorkingHoursViewTest extends Unit
|
|
{
|
|
|
|
/**
|
|
* @return array[]
|
|
*/
|
|
public function workingHoursProvider(): array
|
|
{
|
|
return [
|
|
[
|
|
new DateTime('2020-11-30'),
|
|
PeriodDesignationEnum::WEEKLY(),
|
|
15,
|
|
new DateInterval("PT32H22M"),
|
|
new DateInterval("PT22M"),
|
|
[
|
|
'period' => '2020#49',
|
|
'periodDesignation' => 'weekly',
|
|
'workingDays' => 15,
|
|
'totalHours' => '32:22:00',
|
|
'overtime' => '00:22:00'
|
|
],
|
|
],
|
|
[
|
|
new DateTime('2020-11-30'),
|
|
PeriodDesignationEnum::MONTHLY(),
|
|
15,
|
|
new DateInterval("PT32H22M"),
|
|
new DateInterval("PT22M"),
|
|
[
|
|
'period' => '2020-11',
|
|
'periodDesignation' => 'monthly',
|
|
'workingDays' => 15,
|
|
'totalHours' => '32:22:00',
|
|
'overtime' => '00:22:00'
|
|
],
|
|
],
|
|
[
|
|
new DateTime('2020-11-30'),
|
|
PeriodDesignationEnum::YEARLY(),
|
|
15,
|
|
new DateInterval("PT32H22M"),
|
|
new DateInterval("PT22M"),
|
|
[
|
|
'period' => '2020',
|
|
'periodDesignation' => 'yearly',
|
|
'workingDays' => 15,
|
|
'totalHours' => '32:22:00',
|
|
'overtime' => '00:22:00'
|
|
],
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @param DateTimeInterface $period
|
|
* @param PeriodDesignationEnum $periodDesignation
|
|
* @param int $workingDays
|
|
* @param DateInterval $totalHours
|
|
* @param DateInterval $overtime
|
|
* @param array<string, string> $should_json
|
|
*
|
|
* @dataProvider workingHoursProvider
|
|
*/
|
|
public function testWorkingHoursViewWithContent(
|
|
DateTimeInterface $period,
|
|
PeriodDesignationEnum $periodDesignation,
|
|
int $workingDays,
|
|
DateInterval $totalHours,
|
|
DateInterval $overtime,
|
|
array $should_json
|
|
): void
|
|
{
|
|
|
|
$obj = new WorkingHoursView($period, $periodDesignation, $workingDays, $totalHours, $overtime);
|
|
|
|
$this->assertNotNull($obj->getPeriod());
|
|
$this->assertInstanceOf(DateTimeInterface::class, $obj->getPeriod());
|
|
$this->assertEquals($period, $obj->getPeriod());
|
|
|
|
$this->assertNotNull($obj->getPeriodDesignation());
|
|
$this->assertInstanceOf(PeriodDesignationEnum::class, $obj->getPeriodDesignation());
|
|
$this->assertEquals($periodDesignation, $obj->getPeriodDesignation());
|
|
|
|
$this->assertNotNull($obj->getWorkingDays());
|
|
$this->assertIsInt($obj->getWorkingDays());
|
|
$this->assertEquals($workingDays, $obj->getWorkingDays());
|
|
|
|
$this->assertNotNull($obj->getTotalHours());
|
|
$this->assertInstanceOf(DateInterval::class, $obj->getTotalHours());
|
|
$this->assertEquals($totalHours, $obj->getTotalHours());
|
|
|
|
$this->assertNotNull($obj->getOvertime());
|
|
$this->assertInstanceOf(DateInterval::class, $obj->getOvertime());
|
|
$this->assertEquals($overtime, $obj->getOvertime());
|
|
|
|
|
|
$json = $obj->jsonSerialize();
|
|
$this->assertIsArray($json);
|
|
$this->assertEquals($should_json, $json);
|
|
}
|
|
}
|