oms-HumanResourceTimeRecording/tests/Models/SessionTest.php
Dennis Eichhorn 314ccee8fd fix tests
2024-05-18 00:12:37 +00:00

136 lines
5.2 KiB
PHP
Executable File

<?php
/**
* Jingga
*
* PHP Version 8.2
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace Modules\HumanResourceTimeRecording\tests\Models;
use Modules\HumanResourceTimeRecording\Models\ClockingStatus;
use Modules\HumanResourceTimeRecording\Models\ClockingType;
use Modules\HumanResourceTimeRecording\Models\NullClockingType;
use Modules\HumanResourceTimeRecording\Models\Session;
use Modules\HumanResourceTimeRecording\Models\SessionElement;
/**
* @internal
*/
#[\PHPUnit\Framework\Attributes\CoversClass(\Modules\HumanResourceTimeRecording\Models\Session::class)]
final class SessionTest extends \PHPUnit\Framework\TestCase
{
private Session $session;
/**
* {@inheritdoc}
*/
protected function setUp() : void
{
$this->session = new Session();
}
#[\PHPUnit\Framework\Attributes\Group('module')]
public function testDefault() : void
{
self::assertEquals(0, $this->session->id);
self::assertEquals(0, $this->session->busy);
self::assertEquals(0, $this->session->getBreak());
self::assertEquals([], $this->session->sessionElements);
self::assertEquals(ClockingType::NO_DATA, $this->session->type);
self::assertEquals(ClockingStatus::START, $this->session->getStatus());
self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $this->session->start->format('Y-m-d'));
self::assertNull($this->session->end);
}
#[\PHPUnit\Framework\Attributes\Group('module')]
public function testStatusInputOutput() : void
{
$element = new SessionElement(null, new \DateTime('2021-10-05'));
$element->status = ClockingStatus::START;
$this->session->sessionElements[] = $element;
$element = new SessionElement(null, new \DateTime('2021-10-06'));
$element->status = ClockingStatus::PAUSE;
$this->session->sessionElements[] = $element;
$element = new SessionElement(null, new \DateTime('2021-10-07'));
$element->status = ClockingStatus::CONTINUE;
$this->session->sessionElements[] = $element;
$this->session->recalculate();
self::assertEquals(ClockingStatus::CONTINUE, $this->session->getStatus());
}
#[\PHPUnit\Framework\Attributes\Group('module')]
public function testBusyBreakInputOutput() : void
{
$element = new SessionElement(null, new \DateTime('2021-10-05 02:00:00'));
$element->status = ClockingStatus::START;
$this->session->sessionElements[] = $element;
// this is ignored because the session is already started
$element = new SessionElement(null, new \DateTime('2021-10-05 03:00:00'));
$element->status = ClockingStatus::START;
$this->session->sessionElements[] = $element;
$element = new SessionElement(null, new \DateTime('2021-10-05 04:00:00'));
$element->status = ClockingStatus::PAUSE;
$this->session->sessionElements[] = $element;
$element = new SessionElement(null, new \DateTime('2021-10-05 04:30:00'));
$element->status = ClockingStatus::CONTINUE;
$this->session->sessionElements[] = $element;
$element = new SessionElement(null, new \DateTime('2021-10-05 07:00:00'));
$element->status = ClockingStatus::PAUSE;
$this->session->sessionElements[] = $element;
$element = new SessionElement(null, new \DateTime('2021-10-05 08:30:00'));
$element->status = ClockingStatus::CONTINUE;
$this->session->sessionElements[] = $element;
$element = new SessionElement(null, new \DateTime('2021-10-05 11:00:00'));
$element->status = ClockingStatus::END;
$this->session->sessionElements[] = $element;
// this is ignored because the session is already stopped
$element = new SessionElement(null, new \DateTime('2021-10-05 11:30:00'));
$element->status = ClockingStatus::END;
$this->session->sessionElements[] = $element;
$this->session->recalculate();
self::assertEquals(2 * 60 * 60, $this->session->getBreak());
self::assertEquals(7 * 60 * 60, $this->session->busy);
}
#[\PHPUnit\Framework\Attributes\Group('module')]
public function testSerialize() : void
{
$this->session->type = new NullClockingType();
$serialized = $this->session->jsonSerialize();
unset($serialized['start']);
unset($serialized['employee']);
self::assertEquals(
[
'id' => 0,
'end' => null,
'busy' => 0,
'type' => new NullClockingType(),
'elements' => [],
],
$serialized
);
}
}